@layerfi/components 0.1.12 → 0.1.13

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
@@ -827,7 +827,6 @@ var debounce = (fnc, timeout = 300) => {
827
827
  }, timeout);
828
828
  };
829
829
  };
830
- var convertToStableName = (name) => name.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "").replace(/\W+/g, " ").split(/ |\B(?=[A-Z])/).map((word) => word.toLowerCase()).join("_");
831
830
 
832
831
  // src/components/BankTransactionListItem/BankTransactionListItem.tsx
833
832
  var import_react36 = __toESM(require("react"));
@@ -2230,6 +2229,7 @@ var FileInput = ({ text = "Upload", onUpload }) => {
2230
2229
  // src/components/Input/Select.tsx
2231
2230
  var import_react26 = __toESM(require("react"));
2232
2231
  var import_react_select2 = __toESM(require("react-select"));
2232
+ var import_classnames14 = __toESM(require("classnames"));
2233
2233
  var DropdownIndicator2 = (props) => {
2234
2234
  return /* @__PURE__ */ import_react26.default.createElement(import_react_select2.components.DropdownIndicator, { ...props }, /* @__PURE__ */ import_react26.default.createElement(ChevronDownFill_default, null));
2235
2235
  };
@@ -2241,13 +2241,20 @@ var Select2 = ({
2241
2241
  value,
2242
2242
  onChange,
2243
2243
  disabled,
2244
- placeholder
2244
+ placeholder,
2245
+ isInvalid,
2246
+ errorMessage
2245
2247
  }) => {
2246
- return /* @__PURE__ */ import_react26.default.createElement(
2248
+ const baseClassName = (0, import_classnames14.default)(
2249
+ "Layer__select",
2250
+ isInvalid ? "Layer__select--error" : "",
2251
+ className
2252
+ );
2253
+ return /* @__PURE__ */ import_react26.default.createElement(Tooltip, { disabled: !isInvalid || !errorMessage }, /* @__PURE__ */ import_react26.default.createElement(TooltipTrigger, { className: "Layer__input-tooltip" }, /* @__PURE__ */ import_react26.default.createElement(
2247
2254
  import_react_select2.default,
2248
2255
  {
2249
2256
  name,
2250
- className: `Layer__select ${className ?? ""}`,
2257
+ className: baseClassName,
2251
2258
  classNamePrefix,
2252
2259
  placeholder: placeholder ?? "Select...",
2253
2260
  options,
@@ -2258,7 +2265,7 @@ var Select2 = ({
2258
2265
  components: { DropdownIndicator: DropdownIndicator2 },
2259
2266
  isDisabled: disabled
2260
2267
  }
2261
- );
2268
+ )), /* @__PURE__ */ import_react26.default.createElement(TooltipContent, { className: "Layer__tooltip" }, errorMessage));
2262
2269
  };
2263
2270
 
2264
2271
  // src/components/MatchForm/MatchForm.tsx
@@ -2288,7 +2295,7 @@ var MatchBadge = ({
2288
2295
  };
2289
2296
 
2290
2297
  // src/components/MatchForm/MatchForm.tsx
2291
- var import_classnames14 = __toESM(require("classnames"));
2298
+ var import_classnames15 = __toESM(require("classnames"));
2292
2299
  var import_date_fns6 = require("date-fns");
2293
2300
  var MatchForm = ({
2294
2301
  classNamePrefix,
@@ -2307,7 +2314,7 @@ var MatchForm = ({
2307
2314
  "div",
2308
2315
  {
2309
2316
  key: idx,
2310
- className: (0, import_classnames14.default)(
2317
+ className: (0, import_classnames15.default)(
2311
2318
  `${classNamePrefix}__match-row`,
2312
2319
  match.id === selectedMatchId ? `${classNamePrefix}__match-row--selected` : ""
2313
2320
  ),
@@ -2366,18 +2373,18 @@ var MatchForm = ({
2366
2373
 
2367
2374
  // src/components/Textarea/Textarea.tsx
2368
2375
  var import_react29 = __toESM(require("react"));
2369
- var import_classnames15 = __toESM(require("classnames"));
2376
+ var import_classnames16 = __toESM(require("classnames"));
2370
2377
  var Textarea = ({
2371
2378
  className,
2372
2379
  ...props
2373
2380
  }) => {
2374
- const baseClassName = (0, import_classnames15.default)("Layer__textarea", className);
2381
+ const baseClassName = (0, import_classnames16.default)("Layer__textarea", className);
2375
2382
  return /* @__PURE__ */ import_react29.default.createElement("textarea", { ...props, className: baseClassName });
2376
2383
  };
2377
2384
 
2378
2385
  // src/components/Toggle/Toggle.tsx
2379
2386
  var import_react30 = __toESM(require("react"));
2380
- var import_classnames16 = __toESM(require("classnames"));
2387
+ var import_classnames17 = __toESM(require("classnames"));
2381
2388
  var Toggle = ({
2382
2389
  name,
2383
2390
  options,
@@ -2394,7 +2401,7 @@ var Toggle = ({
2394
2401
  }
2395
2402
  });
2396
2403
  const selectedValue = selected || options[0].value;
2397
- const baseClassName = (0, import_classnames16.default)(
2404
+ const baseClassName = (0, import_classnames17.default)(
2398
2405
  "Layer__toggle",
2399
2406
  `Layer__toggle--${size}`,
2400
2407
  initialized ? "Layer__toggle--initialized" : ""
@@ -2645,7 +2652,7 @@ var Notification = ({
2645
2652
  };
2646
2653
 
2647
2654
  // src/components/ExpandedBankTransactionRow/ExpandedBankTransactionRow.tsx
2648
- var import_classnames17 = __toESM(require("classnames"));
2655
+ var import_classnames18 = __toESM(require("classnames"));
2649
2656
  var hasMatch = (bankTransaction) => {
2650
2657
  return Boolean(
2651
2658
  bankTransaction?.suggested_matches && bankTransaction?.suggested_matches?.length > 0 || bankTransaction?.match
@@ -2898,7 +2905,7 @@ var ExpandedBankTransactionRow = (0, import_react32.forwardRef)(
2898
2905
  /* @__PURE__ */ import_react32.default.createElement("div", { className: `${className}__content-panels` }, /* @__PURE__ */ import_react32.default.createElement(
2899
2906
  "div",
2900
2907
  {
2901
- className: (0, import_classnames17.default)(
2908
+ className: (0, import_classnames18.default)(
2902
2909
  `${className}__match`,
2903
2910
  `${className}__content-panel`,
2904
2911
  purpose === "match" /* match */ ? `${className}__content-panel--active` : ""
@@ -2920,7 +2927,7 @@ var ExpandedBankTransactionRow = (0, import_react32.forwardRef)(
2920
2927
  ), /* @__PURE__ */ import_react32.default.createElement(
2921
2928
  "div",
2922
2929
  {
2923
- className: (0, import_classnames17.default)(
2930
+ className: (0, import_classnames18.default)(
2924
2931
  `${className}__splits`,
2925
2932
  `${className}__content-panel`,
2926
2933
  purpose === "categorize" /* categorize */ ? `${className}__content-panel--active` : ""
@@ -3059,7 +3066,7 @@ var SplitTooltipDetails = ({
3059
3066
  };
3060
3067
 
3061
3068
  // src/components/BankTransactionRow/BankTransactionRow.tsx
3062
- var import_classnames18 = __toESM(require("classnames"));
3069
+ var import_classnames19 = __toESM(require("classnames"));
3063
3070
  var import_date_fns7 = require("date-fns");
3064
3071
  var isCredit = ({ direction }) => direction === "CREDIT" /* CREDIT */;
3065
3072
  var extractDescriptionForSplit = (category) => {
@@ -3158,7 +3165,7 @@ var BankTransactionRow = ({
3158
3165
  }
3159
3166
  const className = "Layer__bank-transaction-row";
3160
3167
  const openClassName = open ? `${className}--expanded` : "";
3161
- const rowClassName = (0, import_classnames18.default)(
3168
+ const rowClassName = (0, import_classnames19.default)(
3162
3169
  className,
3163
3170
  bankTransaction.recently_categorized && editable ? "Layer__bank-transaction-row--removing" : "",
3164
3171
  open ? openClassName : "",
@@ -3232,7 +3239,7 @@ var BankTransactionRow = ({
3232
3239
  /* @__PURE__ */ import_react34.default.createElement(
3233
3240
  "td",
3234
3241
  {
3235
- className: (0, import_classnames18.default)(
3242
+ className: (0, import_classnames19.default)(
3236
3243
  "Layer__table-cell",
3237
3244
  "Layer__table-cell__category-col",
3238
3245
  `${className}__actions-cell`,
@@ -3387,7 +3394,7 @@ var Assignment = ({ bankTransaction }) => {
3387
3394
  };
3388
3395
 
3389
3396
  // src/components/BankTransactionListItem/BankTransactionListItem.tsx
3390
- var import_classnames19 = __toESM(require("classnames"));
3397
+ var import_classnames20 = __toESM(require("classnames"));
3391
3398
  var import_date_fns9 = require("date-fns");
3392
3399
  var isCredit2 = ({ direction }) => direction === "CREDIT" /* CREDIT */;
3393
3400
  var BankTransactionListItem = ({
@@ -3446,7 +3453,7 @@ var BankTransactionListItem = ({
3446
3453
  }
3447
3454
  const className = "Layer__bank-transaction-list-item";
3448
3455
  const openClassName = open ? `${className}--expanded` : "";
3449
- const rowClassName = (0, import_classnames19.default)(
3456
+ const rowClassName = (0, import_classnames20.default)(
3450
3457
  className,
3451
3458
  bankTransaction.recently_categorized ? "Layer__bank-transaction-row--removing" : "",
3452
3459
  open ? openClassName : "",
@@ -3753,10 +3760,10 @@ var hslToHex = (hsl) => {
3753
3760
  };
3754
3761
 
3755
3762
  // src/components/Container/Container.tsx
3756
- var import_classnames20 = __toESM(require("classnames"));
3763
+ var import_classnames21 = __toESM(require("classnames"));
3757
3764
  var Container = (0, import_react37.forwardRef)(
3758
3765
  ({ name, className, children, asWidget, elevated = false }, ref) => {
3759
- const baseClassName = (0, import_classnames20.default)(
3766
+ const baseClassName = (0, import_classnames21.default)(
3760
3767
  "Layer__component Layer__component-container",
3761
3768
  `Layer__${name}`,
3762
3769
  elevated && "Layer__component--elevated",
@@ -3771,10 +3778,10 @@ var Container = (0, import_react37.forwardRef)(
3771
3778
 
3772
3779
  // src/components/Container/Header.tsx
3773
3780
  var import_react38 = __toESM(require("react"));
3774
- var import_classnames21 = __toESM(require("classnames"));
3781
+ var import_classnames22 = __toESM(require("classnames"));
3775
3782
  var Header = (0, import_react38.forwardRef)(
3776
3783
  ({ className, children, style }, ref) => {
3777
- const baseClassName = (0, import_classnames21.default)("Layer__component-header", className);
3784
+ const baseClassName = (0, import_classnames22.default)("Layer__component-header", className);
3778
3785
  return /* @__PURE__ */ import_react38.default.createElement("header", { ref, className: baseClassName, style }, children);
3779
3786
  }
3780
3787
  );
@@ -3922,7 +3929,7 @@ var ChavronRight = ({ size = 18, ...props }) => /* @__PURE__ */ React54.createEl
3922
3929
  var ChevronRight_default = ChavronRight;
3923
3930
 
3924
3931
  // src/components/Pagination/Pagination.tsx
3925
- var import_classnames22 = __toESM(require("classnames"));
3932
+ var import_classnames23 = __toESM(require("classnames"));
3926
3933
  var Pagination = ({
3927
3934
  onPageChange,
3928
3935
  totalCount,
@@ -3947,7 +3954,7 @@ var Pagination = ({
3947
3954
  "li",
3948
3955
  {
3949
3956
  key: `page-prev`,
3950
- className: (0, import_classnames22.default)(
3957
+ className: (0, import_classnames23.default)(
3951
3958
  "Layer__pagination-item Layer__pagination-arrow Layer__pagination-arrow--previous",
3952
3959
  {
3953
3960
  disabled: currentPage === 1
@@ -3971,7 +3978,7 @@ var Pagination = ({
3971
3978
  "li",
3972
3979
  {
3973
3980
  key: `page-${pageNumber}`,
3974
- className: (0, import_classnames22.default)("Layer__pagination-item", {
3981
+ className: (0, import_classnames23.default)("Layer__pagination-item", {
3975
3982
  selected: pageNumber === currentPage
3976
3983
  }),
3977
3984
  onClick: () => {
@@ -3986,7 +3993,7 @@ var Pagination = ({
3986
3993
  "li",
3987
3994
  {
3988
3995
  key: `page-last`,
3989
- className: (0, import_classnames22.default)(
3996
+ className: (0, import_classnames23.default)(
3990
3997
  "Layer__pagination-item Layer__pagination-arrow Layer__pagination-arrow--next",
3991
3998
  {
3992
3999
  disabled: currentPage === lastPage
@@ -4484,7 +4491,7 @@ var MoreVertical_default = MoreVertical;
4484
4491
 
4485
4492
  // src/components/HoverMenu/HoverMenu.tsx
4486
4493
  var import_react47 = __toESM(require("react"));
4487
- var import_classnames23 = __toESM(require("classnames"));
4494
+ var import_classnames24 = __toESM(require("classnames"));
4488
4495
  var HoverMenu = ({
4489
4496
  children,
4490
4497
  config,
@@ -4493,7 +4500,7 @@ var HoverMenu = ({
4493
4500
  }) => {
4494
4501
  const [openMenu, setOpenMenu] = (0, import_react47.useState)(false);
4495
4502
  const hoverMenuRef = (0, import_react47.useRef)(null);
4496
- const hoverMenuClassName = (0, import_classnames23.default)(
4503
+ const hoverMenuClassName = (0, import_classnames24.default)(
4497
4504
  "Layer__hover-menu",
4498
4505
  openMenu && "Layer__hover-menu--open"
4499
4506
  );
@@ -4856,13 +4863,13 @@ var InstitutionIcon = ({ size = 18, ...props }) => /* @__PURE__ */ React62.creat
4856
4863
  var InstitutionIcon_default = InstitutionIcon;
4857
4864
 
4858
4865
  // src/components/LinkedAccountThumb/LinkedAccountThumb.tsx
4859
- var import_classnames24 = __toESM(require("classnames"));
4866
+ var import_classnames25 = __toESM(require("classnames"));
4860
4867
  var AccountNumber = ({ accountNumber }) => /* @__PURE__ */ import_react49.default.createElement("div", { className: "account-number" }, /* @__PURE__ */ import_react49.default.createElement(Text, { size: "sm" }, "\u2022\u2022\u2022 ", accountNumber));
4861
4868
  var LinkedAccountThumb = ({
4862
4869
  account,
4863
4870
  asWidget
4864
4871
  }) => {
4865
- const linkedAccountThumbClassName = (0, import_classnames24.default)(
4872
+ const linkedAccountThumbClassName = (0, import_classnames25.default)(
4866
4873
  "Layer__linked-account-thumb",
4867
4874
  asWidget && "--as-widget"
4868
4875
  );
@@ -4907,7 +4914,7 @@ var LinkedAccountThumb = ({
4907
4914
  };
4908
4915
 
4909
4916
  // src/components/LinkedAccounts/LinkedAccounts.tsx
4910
- var import_classnames25 = __toESM(require("classnames"));
4917
+ var import_classnames26 = __toESM(require("classnames"));
4911
4918
  var COMPONENT_NAME2 = "linked-accounts";
4912
4919
  var LinkedAccounts = ({ asWidget, elevated }) => {
4913
4920
  const {
@@ -4924,7 +4931,7 @@ var LinkedAccounts = ({ asWidget, elevated }) => {
4924
4931
  { name: "Renew link", action: renewLinkAccount },
4925
4932
  { name: "Unlink", action: unlinkAccount }
4926
4933
  ];
4927
- const linkedAccountsNewAccountClassName = (0, import_classnames25.default)(
4934
+ const linkedAccountsNewAccountClassName = (0, import_classnames26.default)(
4928
4935
  "Layer__linked-accounts__new-account",
4929
4936
  asWidget && "--as-widget"
4930
4937
  );
@@ -6083,7 +6090,7 @@ var SortArrows = ({ size = 13, ...props }) => /* @__PURE__ */ React70.createElem
6083
6090
  var SortArrows_default = SortArrows;
6084
6091
 
6085
6092
  // src/components/ProfitAndLossDetailedCharts/DetailedTable.tsx
6086
- var import_classnames26 = __toESM(require("classnames"));
6093
+ var import_classnames27 = __toESM(require("classnames"));
6087
6094
  var DetailedTable = ({
6088
6095
  filteredData,
6089
6096
  sidebarScope,
@@ -6093,7 +6100,7 @@ var DetailedTable = ({
6093
6100
  setHoveredItem
6094
6101
  }) => {
6095
6102
  const buildColClass = (column) => {
6096
- return (0, import_classnames26.default)(
6103
+ return (0, import_classnames27.default)(
6097
6104
  "Layer__sortable-col",
6098
6105
  sidebarScope && filters[sidebarScope]?.sortBy === column ? `sort--${(sidebarScope && filters[sidebarScope]?.sortDirection) ?? "desc"}` : ""
6099
6106
  );
@@ -6128,7 +6135,7 @@ var DetailedTable = ({
6128
6135
  "tr",
6129
6136
  {
6130
6137
  key: `pl-side-table-item-${idx}`,
6131
- className: (0, import_classnames26.default)(
6138
+ className: (0, import_classnames27.default)(
6132
6139
  "Layer__profit-and-loss-detailed-table__row",
6133
6140
  hoveredItem && hoveredItem === item.display_name ? "active" : ""
6134
6141
  ),
@@ -6259,13 +6266,13 @@ var import_react61 = __toESM(require("react"));
6259
6266
 
6260
6267
  // src/components/SkeletonLoader/SkeletonLoader.tsx
6261
6268
  var import_react59 = __toESM(require("react"));
6262
- var import_classnames27 = __toESM(require("classnames"));
6269
+ var import_classnames28 = __toESM(require("classnames"));
6263
6270
  var SkeletonLoader = ({
6264
6271
  height,
6265
6272
  width,
6266
6273
  className
6267
6274
  }) => {
6268
- const baseClassName = (0, import_classnames27.default)(
6275
+ const baseClassName = (0, import_classnames28.default)(
6269
6276
  "Layer__skeleton-loader Layer__anim--skeleton-loading",
6270
6277
  className
6271
6278
  );
@@ -6309,7 +6316,7 @@ var MiniChart = ({ data }) => {
6309
6316
  };
6310
6317
 
6311
6318
  // src/components/ProfitAndLossSummaries/ProfitAndLossSummaries.tsx
6312
- var import_classnames28 = __toESM(require("classnames"));
6319
+ var import_classnames29 = __toESM(require("classnames"));
6313
6320
  var CHART_PLACEHOLDER = [
6314
6321
  {
6315
6322
  name: "placeholder",
@@ -6365,7 +6372,7 @@ var ProfitAndLossSummaries = ({
6365
6372
  /* @__PURE__ */ import_react61.default.createElement(
6366
6373
  "div",
6367
6374
  {
6368
- className: (0, import_classnames28.default)(
6375
+ className: (0, import_classnames29.default)(
6369
6376
  "Layer__profit-and-loss-summaries__summary",
6370
6377
  actionable && "Layer__actionable",
6371
6378
  "Layer__profit-and-loss-summaries__summary--income",
@@ -6387,7 +6394,7 @@ var ProfitAndLossSummaries = ({
6387
6394
  /* @__PURE__ */ import_react61.default.createElement(
6388
6395
  "div",
6389
6396
  {
6390
- className: (0, import_classnames28.default)(
6397
+ className: (0, import_classnames29.default)(
6391
6398
  "Layer__profit-and-loss-summaries__summary",
6392
6399
  actionable && "Layer__actionable",
6393
6400
  "Layer__profit-and-loss-summaries__summary--expenses",
@@ -6411,7 +6418,7 @@ var ProfitAndLossSummaries = ({
6411
6418
  /* @__PURE__ */ import_react61.default.createElement(
6412
6419
  "div",
6413
6420
  {
6414
- className: (0, import_classnames28.default)(
6421
+ className: (0, import_classnames29.default)(
6415
6422
  "Layer__profit-and-loss-summaries__summary net-profit Layer__profit-and-loss-summaries__summary--net-profit",
6416
6423
  actionable && "Layer__actionable"
6417
6424
  )
@@ -6602,7 +6609,7 @@ var empty_profit_and_loss_report_default = {
6602
6609
  };
6603
6610
 
6604
6611
  // src/components/ProfitAndLossTable/ProfitAndLossTable.tsx
6605
- var import_classnames29 = __toESM(require("classnames"));
6612
+ var import_classnames30 = __toESM(require("classnames"));
6606
6613
  var ProfitAndLossTable = ({ lockExpanded, asContainer }) => {
6607
6614
  const {
6608
6615
  data: actualData,
@@ -6614,7 +6621,7 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer }) => {
6614
6621
  return /* @__PURE__ */ import_react63.default.createElement(
6615
6622
  "div",
6616
6623
  {
6617
- className: (0, import_classnames29.default)(
6624
+ className: (0, import_classnames30.default)(
6618
6625
  "Layer__profit-and-loss-table__loader-container",
6619
6626
  asContainer && "Layer__component-container"
6620
6627
  )
@@ -6625,7 +6632,7 @@ var ProfitAndLossTable = ({ lockExpanded, asContainer }) => {
6625
6632
  return /* @__PURE__ */ import_react63.default.createElement(import_react63.default.Fragment, null, /* @__PURE__ */ import_react63.default.createElement(
6626
6633
  "div",
6627
6634
  {
6628
- className: (0, import_classnames29.default)(
6635
+ className: (0, import_classnames30.default)(
6629
6636
  "Layer__profit-and-loss-table Layer__profit-and-loss-table--main",
6630
6637
  asContainer && "Layer__component-container"
6631
6638
  )
@@ -6779,7 +6786,7 @@ var import_react66 = __toESM(require("react"));
6779
6786
 
6780
6787
  // src/components/Panel/Panel.tsx
6781
6788
  var import_react65 = __toESM(require("react"));
6782
- var import_classnames30 = __toESM(require("classnames"));
6789
+ var import_classnames31 = __toESM(require("classnames"));
6783
6790
  var Panel = ({
6784
6791
  children,
6785
6792
  className,
@@ -6797,7 +6804,7 @@ var Panel = ({
6797
6804
  return /* @__PURE__ */ import_react65.default.createElement(
6798
6805
  "div",
6799
6806
  {
6800
- className: (0, import_classnames30.default)(
6807
+ className: (0, import_classnames31.default)(
6801
6808
  "Layer__panel",
6802
6809
  className,
6803
6810
  sidebarIsOpen && "Layer__panel--open"
@@ -6879,6 +6886,209 @@ var import_react81 = __toESM(require("react"));
6879
6886
 
6880
6887
  // src/hooks/useChartOfAccounts/useChartOfAccounts.tsx
6881
6888
  var import_react67 = require("react");
6889
+
6890
+ // src/components/ChartOfAccountsForm/constants.ts
6891
+ var LEDGER_ACCOUNT_TYPES = [
6892
+ {
6893
+ value: "ASSET",
6894
+ label: "Assets"
6895
+ },
6896
+ {
6897
+ value: "LIABILITY",
6898
+ label: "Liabilities"
6899
+ },
6900
+ {
6901
+ value: "EQUITY",
6902
+ label: "Equities"
6903
+ },
6904
+ {
6905
+ value: "REVENUE",
6906
+ label: "Revenue"
6907
+ },
6908
+ {
6909
+ value: "EXPENSE",
6910
+ label: "Expenses"
6911
+ }
6912
+ ];
6913
+ var DEFAULT_ACCOUNT_TYPE_DIRECTION = {
6914
+ ASSET: "DEBIT" /* DEBIT */,
6915
+ LIABILITY: "CREDIT" /* CREDIT */,
6916
+ EQUITY: "CREDIT" /* CREDIT */,
6917
+ REVENUE: "CREDIT" /* CREDIT */,
6918
+ EXPENSE: "DEBIT" /* DEBIT */
6919
+ };
6920
+ var NORMALITY_OPTIONS = [
6921
+ {
6922
+ value: "DEBIT" /* DEBIT */,
6923
+ label: "Debit"
6924
+ },
6925
+ {
6926
+ value: "CREDIT" /* CREDIT */,
6927
+ label: "Credit"
6928
+ }
6929
+ ];
6930
+ var ASSET_LEDGER_ACCOUNT_SUBTYPES = [
6931
+ {
6932
+ value: "BANK_ACCOUNTS",
6933
+ label: "Bank Accounts"
6934
+ },
6935
+ {
6936
+ value: "ACCOUNTS_RECEIVABLE",
6937
+ label: "Accounts Receivable"
6938
+ },
6939
+ {
6940
+ value: "INVENTORY",
6941
+ label: "Inventory"
6942
+ },
6943
+ {
6944
+ value: "PAYMENT_PROCESSOR_CLEARING_ACCOUNT",
6945
+ label: "Payment Processor Clearing Accounts"
6946
+ },
6947
+ {
6948
+ value: "FIXED_ASSET",
6949
+ label: "Fixed Assets"
6950
+ },
6951
+ {
6952
+ value: "CASH",
6953
+ label: "Cash"
6954
+ },
6955
+ {
6956
+ value: "UNDEPOSITED_FUNDS",
6957
+ label: "Undeposited Funds"
6958
+ }
6959
+ ];
6960
+ var LIABILITY_LEDGER_ACCOUNT_SUBTYPES = [
6961
+ {
6962
+ value: "LIABILITY",
6963
+ label: "Liabilities"
6964
+ },
6965
+ {
6966
+ value: "ACCOUNTS_PAYABLE",
6967
+ label: "Accounts Payable"
6968
+ },
6969
+ {
6970
+ value: "CREDIT_CARD",
6971
+ label: "Credit Cards"
6972
+ },
6973
+ {
6974
+ value: "SHAREHOLDER_LOAN",
6975
+ label: "Shareholder Loans"
6976
+ },
6977
+ {
6978
+ value: "PAYROLL_LIABILITY",
6979
+ label: "Payroll Liabilities"
6980
+ },
6981
+ {
6982
+ value: "SALES_TAXES_PAYABLE",
6983
+ label: "Sales Taxes Payable"
6984
+ },
6985
+ {
6986
+ value: "LINE_OF_CREDIT",
6987
+ label: "Lines of Credit"
6988
+ },
6989
+ {
6990
+ value: "NOTES_PAYABLE",
6991
+ label: "Notes Payable"
6992
+ },
6993
+ {
6994
+ value: "TIPS",
6995
+ label: "Tips"
6996
+ },
6997
+ {
6998
+ value: "UNEARNED_REVENUE",
6999
+ label: "Unearned Revenue"
7000
+ },
7001
+ {
7002
+ value: "UNDEPOSITED_OUTFLOWS",
7003
+ label: "Undeposited Outflows"
7004
+ }
7005
+ ];
7006
+ var EQUITY_LEDGER_ACCOUNT_SUBTYPES = [
7007
+ {
7008
+ value: "CONTRIBUTIONS",
7009
+ label: "Contributions"
7010
+ },
7011
+ {
7012
+ value: "DISTRIBUTIONS",
7013
+ label: "Distributions"
7014
+ },
7015
+ {
7016
+ value: "COMMON_STOCK",
7017
+ label: "Common Stock"
7018
+ },
7019
+ {
7020
+ value: "ADDITIONAL_PAID_IN_CAPITAL",
7021
+ label: "Additional Paid In Capital"
7022
+ },
7023
+ {
7024
+ value: "RETAINED_EARNINGS",
7025
+ label: "Retained Earnings"
7026
+ },
7027
+ {
7028
+ value: "ACCUMULATED_ADJUSTMENTS",
7029
+ label: "Accumulated Adjustments"
7030
+ },
7031
+ {
7032
+ value: "OPENING_BALANCE_EQUITY",
7033
+ label: "Opening Balance Equity"
7034
+ }
7035
+ ];
7036
+ var REVENUE_LEDGER_ACCOUNT_SUBTYPES = [
7037
+ {
7038
+ value: "SALES",
7039
+ label: "Sales"
7040
+ },
7041
+ {
7042
+ value: "UNCATEGORIZED_REVENUE",
7043
+ label: "Uncategorized Revenue"
7044
+ },
7045
+ {
7046
+ value: "RETURNS_ALLOWANCES",
7047
+ label: "Returns & Allowances"
7048
+ }
7049
+ ];
7050
+ var EXPENSE_LEDGER_ACCOUNT_SUBTYPES = [
7051
+ {
7052
+ value: "COGS",
7053
+ label: "COGS"
7054
+ },
7055
+ {
7056
+ value: "OPERATING_EXPENSES",
7057
+ label: "Operating Expenses"
7058
+ },
7059
+ {
7060
+ value: "PAYROLL",
7061
+ label: "Payroll"
7062
+ },
7063
+ {
7064
+ value: "TAXES_LICENSES",
7065
+ label: "Taxes & Licenses"
7066
+ },
7067
+ {
7068
+ value: "BAD_DEBT",
7069
+ label: "Bad Debt"
7070
+ },
7071
+ {
7072
+ value: "CHARITABLE_CONTRIBUTIONS",
7073
+ label: "Charitable Contributions"
7074
+ }
7075
+ ];
7076
+ var LEDGER_ACCOUNT_SUBTYPES = [
7077
+ ...ASSET_LEDGER_ACCOUNT_SUBTYPES,
7078
+ ...LIABILITY_LEDGER_ACCOUNT_SUBTYPES,
7079
+ ...EQUITY_LEDGER_ACCOUNT_SUBTYPES,
7080
+ ...REVENUE_LEDGER_ACCOUNT_SUBTYPES,
7081
+ ...EXPENSE_LEDGER_ACCOUNT_SUBTYPES
7082
+ ];
7083
+ var LEDGER_ACCOUNT_SUBTYPES_FOR_TYPE = {
7084
+ ASSET: ASSET_LEDGER_ACCOUNT_SUBTYPES,
7085
+ LIABILITY: LIABILITY_LEDGER_ACCOUNT_SUBTYPES,
7086
+ EQUITY: EQUITY_LEDGER_ACCOUNT_SUBTYPES,
7087
+ REVENUE: REVENUE_LEDGER_ACCOUNT_SUBTYPES,
7088
+ EXPENSE: EXPENSE_LEDGER_ACCOUNT_SUBTYPES
7089
+ };
7090
+
7091
+ // src/hooks/useChartOfAccounts/useChartOfAccounts.tsx
6882
7092
  var import_swr6 = __toESM(require("swr"));
6883
7093
  var validate = (formData) => {
6884
7094
  const errors = [];
@@ -6886,6 +7096,14 @@ var validate = (formData) => {
6886
7096
  if (nameError) {
6887
7097
  errors.push(nameError);
6888
7098
  }
7099
+ const normalityError = validateNormality(formData);
7100
+ if (normalityError) {
7101
+ errors.push(normalityError);
7102
+ }
7103
+ const typeError = validateType(formData);
7104
+ if (typeError) {
7105
+ errors.push(typeError);
7106
+ }
6889
7107
  return errors;
6890
7108
  };
6891
7109
  var revalidateField = (fieldName, formData) => {
@@ -6897,10 +7115,48 @@ var revalidateField = (fieldName, formData) => {
6897
7115
  }
6898
7116
  return (formData?.errors || []).filter((x) => x.field !== fieldName);
6899
7117
  }
7118
+ case "normality": {
7119
+ const normalityError = validateNormality(formData);
7120
+ if (normalityError) {
7121
+ return (formData?.errors || []).filter((x) => x.field !== fieldName).concat([normalityError]);
7122
+ }
7123
+ return (formData?.errors || []).filter((x) => x.field !== fieldName);
7124
+ }
7125
+ case "type": {
7126
+ const typeError = validateType(formData);
7127
+ if (typeError) {
7128
+ return (formData?.errors || []).filter((x) => x.field !== fieldName).concat([typeError]);
7129
+ }
7130
+ return (formData?.errors || []).filter((x) => x.field !== fieldName);
7131
+ }
6900
7132
  default:
6901
7133
  return formData?.errors;
6902
7134
  }
6903
7135
  };
7136
+ var validateType = (formData) => {
7137
+ if (!formData?.data.type?.value) {
7138
+ return {
7139
+ field: "type",
7140
+ message: "Must be selected"
7141
+ };
7142
+ }
7143
+ return;
7144
+ };
7145
+ var validateNormality = (formData) => {
7146
+ const stringValueNormality = formData?.data.normality?.value?.toString();
7147
+ if (stringValueNormality === void 0) {
7148
+ return {
7149
+ field: "normality",
7150
+ message: "Must be selected"
7151
+ };
7152
+ } else if (!["DEBIT", "CREDIT"].includes(stringValueNormality)) {
7153
+ return {
7154
+ field: "normality",
7155
+ message: "Must be selected"
7156
+ };
7157
+ }
7158
+ return;
7159
+ };
6904
7160
  var validateName = (formData) => {
6905
7161
  if (!formData?.data.name?.trim()) {
6906
7162
  return {
@@ -6941,14 +7197,8 @@ var useChartOfAccounts = () => {
6941
7197
  const update = async (accountData, accountId) => {
6942
7198
  setSendingForm(true);
6943
7199
  setApiError(void 0);
6944
- const stable_name = convertToStableName(accountData.name);
6945
7200
  const newAccountData = {
6946
- ...accountData,
6947
- stable_name,
6948
- pnl_category: "INCOME",
6949
- //this field will be deprecated soon, but is still required
6950
- always_show_in_pnl: false
6951
- //this field will be deprecated soon, but is still required
7201
+ ...accountData
6952
7202
  };
6953
7203
  try {
6954
7204
  await Layer.updateAccount(apiUrl, auth?.access_token, {
@@ -6977,13 +7227,14 @@ var useChartOfAccounts = () => {
6977
7227
  }
6978
7228
  const data2 = {
6979
7229
  name: form.data.name ?? "",
6980
- normality: form.data.subType?.value,
7230
+ stable_name: form.data.stable_name,
6981
7231
  parent_id: form.data.parent ? {
6982
7232
  type: "AccountId",
6983
7233
  id: form.data.parent.value
6984
7234
  } : void 0,
6985
7235
  account_type: form.data.type.value.toString(),
6986
- account_subtype: form.data.subType?.value.toString()
7236
+ account_subtype: form.data.subType?.value.toString(),
7237
+ normality: form.data.normality?.value
6987
7238
  };
6988
7239
  if (form.action === "new") {
6989
7240
  create(data2);
@@ -7000,10 +7251,8 @@ var useChartOfAccounts = () => {
7000
7251
  data: {
7001
7252
  parent: void 0,
7002
7253
  name: void 0,
7003
- type: {
7004
- value: "ASSETS",
7005
- label: "Assets"
7006
- },
7254
+ type: void 0,
7255
+ normality: void 0,
7007
7256
  subType: void 0
7008
7257
  }
7009
7258
  });
@@ -7024,12 +7273,19 @@ var useChartOfAccounts = () => {
7024
7273
  value: parent.id,
7025
7274
  label: parent.name
7026
7275
  } : void 0,
7276
+ stable_name: found.stable_name,
7027
7277
  name: found.name,
7028
7278
  type: {
7029
- value: "ASSETS",
7030
- label: "Assets"
7279
+ value: found.account_type.value,
7280
+ label: found.account_type.display_name
7031
7281
  },
7032
- subType: void 0
7282
+ subType: found.account_subtype ? {
7283
+ value: found.account_subtype?.value,
7284
+ label: found.account_subtype?.display_name
7285
+ } : void 0,
7286
+ normality: NORMALITY_OPTIONS.find(
7287
+ (normalityOption) => normalityOption.value == found.normality
7288
+ )
7033
7289
  }
7034
7290
  });
7035
7291
  };
@@ -7038,13 +7294,41 @@ var useChartOfAccounts = () => {
7038
7294
  if (!form) {
7039
7295
  return;
7040
7296
  }
7041
- const newFormData = {
7297
+ let newFormData = {
7042
7298
  ...form,
7043
7299
  data: {
7044
7300
  ...form.data,
7045
7301
  [fieldName]: value
7046
7302
  }
7047
7303
  };
7304
+ if (fieldName === "parent") {
7305
+ const allAccounts = flattenAccounts(data?.data?.accounts || []);
7306
+ const foundParent = allAccounts?.find(
7307
+ (x) => x.id === value.value
7308
+ );
7309
+ if (foundParent) {
7310
+ newFormData = {
7311
+ ...newFormData,
7312
+ data: {
7313
+ ...newFormData.data,
7314
+ /* Inherit the parent's type */
7315
+ type: {
7316
+ value: foundParent.account_type.value,
7317
+ label: foundParent.account_type.display_name
7318
+ },
7319
+ /* If the parent has a subtype, inherit it */
7320
+ subType: foundParent.account_subtype ? {
7321
+ value: foundParent.account_subtype?.value,
7322
+ label: foundParent.account_subtype?.display_name
7323
+ } : void 0,
7324
+ /* Inherit the parent's normality */
7325
+ normality: NORMALITY_OPTIONS.find(
7326
+ (normalityOption) => normalityOption.value == foundParent.normality
7327
+ )
7328
+ }
7329
+ };
7330
+ }
7331
+ }
7048
7332
  const errors = revalidateField(fieldName, newFormData);
7049
7333
  setForm({
7050
7334
  ...newFormData,
@@ -7149,7 +7433,7 @@ var Edit2 = ({ size = 18, ...props }) => /* @__PURE__ */ React83.createElement(
7149
7433
  var Edit2_default = Edit2;
7150
7434
 
7151
7435
  // src/components/ChartOfAccountsRow/ChartOfAccountsRow.tsx
7152
- var import_classnames31 = __toESM(require("classnames"));
7436
+ var import_classnames32 = __toESM(require("classnames"));
7153
7437
  var INDENTATION = 24;
7154
7438
  var MOBILE_INDENTATION = 12;
7155
7439
  var EXPANDED_STYLE = {
@@ -7198,7 +7482,7 @@ var ChartOfAccountsRow = ({
7198
7482
  }, cumulativeIndex * 50);
7199
7483
  return () => clearTimeout(timeoutId);
7200
7484
  }, []);
7201
- const baseClass = (0, import_classnames31.default)(
7485
+ const baseClass = (0, import_classnames32.default)(
7202
7486
  "Layer__table-row",
7203
7487
  isOpen ? "Layer__table-row--expanded" : "Layer__table-row--collapsed",
7204
7488
  !expanded && "Layer__table-row--hidden",
@@ -7206,11 +7490,11 @@ var ChartOfAccountsRow = ({
7206
7490
  form?.accountId === account.id && "Layer__table-row--active",
7207
7491
  !showComponent && "Layer__table-row--anim-starting-state"
7208
7492
  );
7209
- const desktopRowClass = (0, import_classnames31.default)(
7493
+ const desktopRowClass = (0, import_classnames32.default)(
7210
7494
  baseClass,
7211
7495
  "Layer__chart-of-accounts__row---desktop"
7212
7496
  );
7213
- const mobileRowClass = (0, import_classnames31.default)(
7497
+ const mobileRowClass = (0, import_classnames32.default)(
7214
7498
  baseClass,
7215
7499
  "Layer__chart-of-accounts__row---mobile"
7216
7500
  );
@@ -7370,18 +7654,6 @@ var import_react72 = __toESM(require("react"));
7370
7654
  // src/components/ChartOfAccountsForm/ChartOfAccountsForm.tsx
7371
7655
  var import_react71 = __toESM(require("react"));
7372
7656
 
7373
- // src/components/ChartOfAccountsForm/constants.ts
7374
- var SUB_TYPE_OPTIONS = [
7375
- {
7376
- value: "DEBIT" /* DEBIT */,
7377
- label: "Debit"
7378
- },
7379
- {
7380
- value: "CREDIT" /* CREDIT */,
7381
- label: "Credit"
7382
- }
7383
- ];
7384
-
7385
7657
  // src/components/ChartOfAccountsForm/useParentOptions.ts
7386
7658
  var import_react70 = require("react");
7387
7659
  var useParentOptions = (data) => (0, import_react70.useMemo)(
@@ -7485,19 +7757,33 @@ var ChartOfAccountsForm = () => {
7485
7757
  )), /* @__PURE__ */ import_react71.default.createElement(InputGroup, { name: "type", label: "Type", inline: true }, /* @__PURE__ */ import_react71.default.createElement(
7486
7758
  Select2,
7487
7759
  {
7488
- options: [],
7489
- disabled: true,
7760
+ options: LEDGER_ACCOUNT_TYPES,
7490
7761
  value: form?.data.type,
7491
- onChange: (sel) => changeFormData("type", sel)
7762
+ onChange: (sel) => changeFormData("type", sel),
7763
+ isInvalid: Boolean(form?.errors?.find((x) => x.field === "type")),
7764
+ errorMessage: form?.errors?.find((x) => x.field === "type")?.message,
7765
+ disabled: sendingForm || form.action === "edit" || form.data.parent !== void 0
7492
7766
  }
7493
7767
  )), /* @__PURE__ */ import_react71.default.createElement(InputGroup, { name: "subType", label: "Sub-Type", inline: true }, /* @__PURE__ */ import_react71.default.createElement(
7494
7768
  Select2,
7495
7769
  {
7496
- options: SUB_TYPE_OPTIONS,
7770
+ options: form?.data.type?.value !== void 0 ? LEDGER_ACCOUNT_SUBTYPES_FOR_TYPE[form?.data.type?.value] : LEDGER_ACCOUNT_SUBTYPES,
7497
7771
  value: form?.data.subType,
7498
7772
  onChange: (sel) => changeFormData("subType", sel),
7499
7773
  disabled: sendingForm
7500
7774
  }
7775
+ )), /* @__PURE__ */ import_react71.default.createElement(InputGroup, { name: "normality", label: "Normality", inline: true }, /* @__PURE__ */ import_react71.default.createElement(
7776
+ Select2,
7777
+ {
7778
+ options: NORMALITY_OPTIONS,
7779
+ value: form?.data.normality,
7780
+ isInvalid: Boolean(
7781
+ form?.errors?.find((x) => x.field === "normality")
7782
+ ),
7783
+ errorMessage: form?.errors?.find((x) => x.field === "normality")?.message,
7784
+ onChange: (sel) => changeFormData("normality", sel),
7785
+ disabled: sendingForm
7786
+ }
7501
7787
  )))
7502
7788
  );
7503
7789
  };
@@ -7584,9 +7870,9 @@ var import_react78 = __toESM(require("react"));
7584
7870
 
7585
7871
  // src/components/Card/Card.tsx
7586
7872
  var import_react74 = __toESM(require("react"));
7587
- var import_classnames32 = __toESM(require("classnames"));
7873
+ var import_classnames33 = __toESM(require("classnames"));
7588
7874
  var Card = ({ children, className }) => {
7589
- return /* @__PURE__ */ import_react74.default.createElement("div", { className: (0, import_classnames32.default)("Layer__card", className) }, children);
7875
+ return /* @__PURE__ */ import_react74.default.createElement("div", { className: (0, import_classnames33.default)("Layer__card", className) }, children);
7590
7876
  };
7591
7877
 
7592
7878
  // src/components/DateTime/DateTime.tsx
@@ -7628,14 +7914,14 @@ var DateTime = ({
7628
7914
 
7629
7915
  // src/components/DetailsList/DetailsList.tsx
7630
7916
  var import_react76 = __toESM(require("react"));
7631
- var import_classnames33 = __toESM(require("classnames"));
7917
+ var import_classnames34 = __toESM(require("classnames"));
7632
7918
  var DetailsList = ({
7633
7919
  title,
7634
7920
  children,
7635
7921
  className,
7636
7922
  actions
7637
7923
  }) => {
7638
- return /* @__PURE__ */ import_react76.default.createElement("div", { className: (0, import_classnames33.default)("Layer__details-list", className) }, title && /* @__PURE__ */ import_react76.default.createElement(Header, null, /* @__PURE__ */ import_react76.default.createElement(Heading, { size: "secondary" /* secondary */ }, title), actions && /* @__PURE__ */ import_react76.default.createElement("div", { className: "Layer__details-list__actions" }, actions)), /* @__PURE__ */ import_react76.default.createElement("ul", { className: "Layer__details-list__list" }, children));
7924
+ return /* @__PURE__ */ import_react76.default.createElement("div", { className: (0, import_classnames34.default)("Layer__details-list", className) }, title && /* @__PURE__ */ import_react76.default.createElement(Header, null, /* @__PURE__ */ import_react76.default.createElement(Heading, { size: "secondary" /* secondary */ }, title), actions && /* @__PURE__ */ import_react76.default.createElement("div", { className: "Layer__details-list__actions" }, actions)), /* @__PURE__ */ import_react76.default.createElement("ul", { className: "Layer__details-list__list" }, children));
7639
7925
  };
7640
7926
 
7641
7927
  // src/components/DetailsList/DetailsListItem.tsx
@@ -7716,7 +8002,7 @@ var LedgerAccountEntryDetails = () => {
7716
8002
  }
7717
8003
  )
7718
8004
  },
7719
- /* @__PURE__ */ import_react78.default.createElement(DetailsListItem, { label: "Source", isLoading: isLoadingEntry }, /* @__PURE__ */ import_react78.default.createElement(Badge, null, entryData?.source?.type)),
8005
+ /* @__PURE__ */ import_react78.default.createElement(DetailsListItem, { label: "Source", isLoading: isLoadingEntry }, /* @__PURE__ */ import_react78.default.createElement(Badge, null, entryData?.source?.entity_name)),
7720
8006
  entryData?.source?.display_description && /* @__PURE__ */ import_react78.default.createElement(SourceDetailView, { source: entryData?.source })
7721
8007
  ), /* @__PURE__ */ import_react78.default.createElement(
7722
8008
  DetailsList,
@@ -7733,7 +8019,7 @@ var LedgerAccountEntryDetails = () => {
7733
8019
 
7734
8020
  // src/components/LedgerAccount/LedgerAccountRow.tsx
7735
8021
  var import_react79 = __toESM(require("react"));
7736
- var import_classnames34 = __toESM(require("classnames"));
8022
+ var import_classnames35 = __toESM(require("classnames"));
7737
8023
  var import_date_fns16 = require("date-fns");
7738
8024
  var LedgerAccountRow = ({
7739
8025
  row,
@@ -7757,7 +8043,7 @@ var LedgerAccountRow = ({
7757
8043
  return /* @__PURE__ */ import_react79.default.createElement(
7758
8044
  "tr",
7759
8045
  {
7760
- className: (0, import_classnames34.default)(
8046
+ className: (0, import_classnames35.default)(
7761
8047
  "Layer__table-row",
7762
8048
  row.entry_id === selectedEntryId && "Layer__table-row--active",
7763
8049
  initialLoad && "initial-load",
@@ -7790,7 +8076,7 @@ var LedgerAccountRow = ({
7790
8076
  return /* @__PURE__ */ import_react79.default.createElement(
7791
8077
  "tr",
7792
8078
  {
7793
- className: (0, import_classnames34.default)(
8079
+ className: (0, import_classnames35.default)(
7794
8080
  "Layer__table-row",
7795
8081
  row.entry_id === selectedEntryId && "Layer__table-row--active",
7796
8082
  initialLoad && "initial-load",
@@ -7819,7 +8105,7 @@ var LedgerAccountRow = ({
7819
8105
  return /* @__PURE__ */ import_react79.default.createElement(
7820
8106
  "tr",
7821
8107
  {
7822
- className: (0, import_classnames34.default)(
8108
+ className: (0, import_classnames35.default)(
7823
8109
  "Layer__table-row",
7824
8110
  row.entry_id === selectedEntryId && "Layer__table-row--active",
7825
8111
  initialLoad && "initial-load",
@@ -7845,7 +8131,7 @@ var LedgerAccountRow = ({
7845
8131
  };
7846
8132
 
7847
8133
  // src/components/LedgerAccount/LedgerAccountIndex.tsx
7848
- var import_classnames35 = __toESM(require("classnames"));
8134
+ var import_classnames36 = __toESM(require("classnames"));
7849
8135
  var LedgerAccount = ({
7850
8136
  containerRef,
7851
8137
  pageSize = 15,
@@ -7873,7 +8159,7 @@ var LedgerAccount = ({
7873
8159
  return () => clearTimeout(timeoutLoad);
7874
8160
  }
7875
8161
  }, [isLoading]);
7876
- const baseClassName = (0, import_classnames35.default)(
8162
+ const baseClassName = (0, import_classnames36.default)(
7877
8163
  "Layer__ledger-account__index",
7878
8164
  accountId && "open"
7879
8165
  );