@layerfi/components 0.1.116-alpha.1 → 0.1.117-alpha

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.
@@ -202,7 +202,7 @@ class ErrorHandlerClass {
202
202
  }
203
203
  const errorHandler = new ErrorHandlerClass();
204
204
  const reportError = (payload) => errorHandler.onError(payload);
205
- const version = "0.1.116-alpha.1";
205
+ const version = "0.1.117-alpha";
206
206
  const pkg = {
207
207
  version
208
208
  };
@@ -11329,7 +11329,7 @@ function BankTransactionsActions({ children }) {
11329
11329
  const BulkActionsModule = ({ slots }) => {
11330
11330
  const { count } = useCountSelectedIds();
11331
11331
  const { clearSelection } = useBulkSelectionActions();
11332
- return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { slot: "toggle", justify: "space-between", align: "center", gap: "xs", children: [
11332
+ return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { slot: "toggle", justify: "space-between", align: "center", gap: "xs", className: "Layer__BulkActionsModule", children: [
11333
11333
  /* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "space-between", align: "center", pis: "sm", pie: "3xs", gap: "3xs", className: "Layer__BulkActionsModule__SelectedItemsContainer", children: [
11334
11334
  /* @__PURE__ */ jsxRuntime.jsx(Span, { noWrap: true, children: `${count} selected` }),
11335
11335
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -11975,7 +11975,7 @@ const BankTransactionsHeader = ({
11975
11975
  )
11976
11976
  ] }),
11977
11977
  /* @__PURE__ */ jsxRuntime.jsx(TransactionsSearch, { slot: "search", isDisabled: showBulkActions }),
11978
- /* @__PURE__ */ jsxRuntime.jsxs(HStack, { slot: "download-upload", justify: "center", gap: "xs", children: [
11978
+ showBulkActions ? null : /* @__PURE__ */ jsxRuntime.jsxs(HStack, { slot: "download-upload", justify: "center", gap: "xs", children: [
11979
11979
  /* @__PURE__ */ jsxRuntime.jsx(
11980
11980
  DownloadButton,
11981
11981
  {
@@ -18535,8 +18535,8 @@ const BankTransactionsMobileBulkActionsHeader = ({
18535
18535
  HStack,
18536
18536
  {
18537
18537
  gap: "md",
18538
- pi: "lg",
18539
- pbs: "md",
18538
+ pi: "xs",
18539
+ pbs: "sm",
18540
18540
  justify: "space-between",
18541
18541
  align: "center",
18542
18542
  children: [
@@ -26300,11 +26300,10 @@ const ProfitAndLossFullReportDownloadButton = ({
26300
26300
  };
26301
26301
  function ProfitAndLossDownloadButton({
26302
26302
  stringOverrides,
26303
- moneyFormat
26303
+ moneyFormat,
26304
+ iconOnly
26304
26305
  }) {
26305
26306
  const { selectedLineItem } = react.useContext(ProfitAndLossContext);
26306
- const { value } = useSizeClass();
26307
- const iconOnly = value !== "desktop";
26308
26307
  if (selectedLineItem) {
26309
26308
  return /* @__PURE__ */ jsxRuntime.jsx(
26310
26309
  ProfitAndLossDetailLinesDownloadButton,
@@ -26364,6 +26363,71 @@ const ProfitAndLossHeader = ({
26364
26363
  ] })
26365
26364
  ] });
26366
26365
  };
26366
+ const DateRangePickers = ({ minDate, maxDate }) => {
26367
+ const { startDate: globalStartDate, endDate: globalEndDate } = useGlobalDateRange({ displayMode: "full" });
26368
+ const { setDateRange: setGlobalDateRange } = useGlobalDateRangeActions();
26369
+ const {
26370
+ localDate: localStartDate,
26371
+ onChange: onChangeStartDate,
26372
+ minDateZdt: minStartDate,
26373
+ maxDateZdt: maxStartDate,
26374
+ isInvalid: startDateInvalid,
26375
+ errorText: startDateErrorText,
26376
+ onBlur: onBlurStartDate
26377
+ } = useDatePickerState({
26378
+ date: globalStartDate,
26379
+ minDate,
26380
+ maxDate
26381
+ });
26382
+ const {
26383
+ localDate: localEndDate,
26384
+ onChange: onChangeEndDate,
26385
+ minDateZdt: minEndDate,
26386
+ maxDateZdt: maxEndDate,
26387
+ isInvalid: endDateInvalid,
26388
+ errorText: endDateErrorText,
26389
+ onBlur: onBlurEndDate
26390
+ } = useDatePickerState({
26391
+ date: globalEndDate,
26392
+ minDate,
26393
+ maxDate
26394
+ });
26395
+ react.useEffect(() => {
26396
+ if (startDateInvalid || endDateInvalid || !localStartDate || !localEndDate) return;
26397
+ const next = { startDate: localStartDate.toDate(), endDate: localEndDate.toDate() };
26398
+ setGlobalDateRange(next);
26399
+ }, [startDateInvalid, endDateInvalid, localStartDate, localEndDate, setGlobalDateRange]);
26400
+ return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", pb: "md", children: [
26401
+ /* @__PURE__ */ jsxRuntime.jsx(
26402
+ DatePicker,
26403
+ {
26404
+ label: "Start Date",
26405
+ showLabel: true,
26406
+ date: localStartDate,
26407
+ onChange: onChangeStartDate,
26408
+ minDate: minStartDate,
26409
+ maxDate: maxStartDate,
26410
+ isInvalid: startDateInvalid,
26411
+ errorText: startDateErrorText,
26412
+ onBlur: onBlurStartDate
26413
+ }
26414
+ ),
26415
+ /* @__PURE__ */ jsxRuntime.jsx(
26416
+ DatePicker,
26417
+ {
26418
+ label: "End Date",
26419
+ showLabel: true,
26420
+ date: localEndDate,
26421
+ onChange: onChangeEndDate,
26422
+ minDate: minEndDate,
26423
+ maxDate: maxEndDate,
26424
+ isInvalid: endDateInvalid,
26425
+ errorText: endDateErrorText,
26426
+ onBlur: onBlurEndDate
26427
+ }
26428
+ )
26429
+ ] });
26430
+ };
26367
26431
  const MultiSelect = ({
26368
26432
  name,
26369
26433
  options: options2,
@@ -27093,6 +27157,25 @@ const ProfitAndLossReport = ({
27093
27157
  const useComparisonPnl = !!comparisonConfig;
27094
27158
  const header = react.useMemo(() => {
27095
27159
  if (hideHeader) return null;
27160
+ const isMobile = view !== "desktop";
27161
+ const isFullDateMode = dateSelectionMode === "full";
27162
+ if (isMobile && isFullDateMode) {
27163
+ return /* @__PURE__ */ jsxRuntime.jsxs(Header, { children: [
27164
+ /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
27165
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(DateSelectionComboBox, {}) }),
27166
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(
27167
+ ProfitAndLossDownloadButton,
27168
+ {
27169
+ stringOverrides: stringOverrides == null ? void 0 : stringOverrides.downloadButton,
27170
+ moneyFormat: csvMoneyFormat,
27171
+ iconOnly: true
27172
+ }
27173
+ ) })
27174
+ ] }),
27175
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderRow, { children: /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(DateRangePickers, {}) }) }),
27176
+ useComparisonPnl && /* @__PURE__ */ jsxRuntime.jsx(HeaderRow, { children: /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(ProfitAndLossCompareOptions, {}) }) })
27177
+ ] });
27178
+ }
27096
27179
  return /* @__PURE__ */ jsxRuntime.jsxs(Header, { children: [
27097
27180
  /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
27098
27181
  /* @__PURE__ */ jsxRuntime.jsxs(HeaderCol, { children: [
@@ -27103,7 +27186,8 @@ const ProfitAndLossReport = ({
27103
27186
  ProfitAndLossDownloadButton,
27104
27187
  {
27105
27188
  stringOverrides: stringOverrides == null ? void 0 : stringOverrides.downloadButton,
27106
- moneyFormat: csvMoneyFormat
27189
+ moneyFormat: csvMoneyFormat,
27190
+ iconOnly: true
27107
27191
  }
27108
27192
  ) })
27109
27193
  ] }),
@@ -27970,6 +28054,36 @@ const CombinedDateSelection = ({ mode }) => {
27970
28054
  }
27971
28055
  return /* @__PURE__ */ jsxRuntime.jsx(DateSelection, {});
27972
28056
  };
28057
+ const LabeledGlobalDatePicker = () => {
28058
+ const { date: date2 } = useGlobalDate();
28059
+ const { setDate: setGlobalDate } = useGlobalDateActions();
28060
+ const rawActivationDate = useBusinessActivationDate();
28061
+ const activationDate = react.useMemo(() => rawActivationDate ? dateFns.startOfDay(rawActivationDate) : null, [rawActivationDate]);
28062
+ const maxDate = react.useMemo(() => dateFns.endOfDay(/* @__PURE__ */ new Date()), []);
28063
+ const setDate = react.useCallback((date22) => {
28064
+ setGlobalDate({ date: date22 });
28065
+ }, [setGlobalDate]);
28066
+ const { localDate, onChange, minDateZdt, maxDateZdt, errorText, onBlur, isInvalid } = useDatePickerState({
28067
+ date: date2,
28068
+ setDate,
28069
+ minDate: activationDate,
28070
+ maxDate
28071
+ });
28072
+ return /* @__PURE__ */ jsxRuntime.jsx(
28073
+ DatePicker,
28074
+ {
28075
+ label: "Effective Date",
28076
+ showLabel: true,
28077
+ date: localDate,
28078
+ onChange,
28079
+ minDate: minDateZdt,
28080
+ maxDate: maxDateZdt,
28081
+ isInvalid,
28082
+ errorText,
28083
+ onBlur
28084
+ }
28085
+ );
28086
+ };
27973
28087
  const COMPONENT_NAME$8 = "balance-sheet";
27974
28088
  const BalanceSheet = (props) => {
27975
28089
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -27989,16 +28103,63 @@ const BalanceSheetView = ({
27989
28103
  const { date: effectiveDate } = useGlobalDate();
27990
28104
  const { data, isLoading } = useBalanceSheet({ effectiveDate });
27991
28105
  const { view, containerRef } = useElementViewSize();
28106
+ const isMobile = view !== "desktop";
28107
+ const isFullDateMode = dateSelectionMode === "full";
28108
+ const widgetHeader = react.useMemo(() => {
28109
+ if (isMobile && isFullDateMode) {
28110
+ return /* @__PURE__ */ jsxRuntime.jsxs(Header, { children: [
28111
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderRow, { children: /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(DateSelectionComboBox, {}) }) }),
28112
+ /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { className: "Layer__Reports__header-row", children: [
28113
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(LabeledGlobalDatePicker, {}) }),
28114
+ withExpandAllButton && /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(BalanceSheetExpandAllButton, { view }) })
28115
+ ] })
28116
+ ] });
28117
+ }
28118
+ return /* @__PURE__ */ jsxRuntime.jsx(Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28119
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
28120
+ withExpandAllButton && /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(BalanceSheetExpandAllButton, { view }) })
28121
+ ] }) });
28122
+ }, [dateSelectionMode, isMobile, isFullDateMode, view, withExpandAllButton]);
28123
+ const header = react.useMemo(() => {
28124
+ if (isMobile && isFullDateMode) {
28125
+ return /* @__PURE__ */ jsxRuntime.jsxs(Header, { children: [
28126
+ /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28127
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(DateSelectionComboBox, {}) }),
28128
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(
28129
+ BalanceSheetDownloadButton,
28130
+ {
28131
+ effectiveDate,
28132
+ iconOnly: true
28133
+ }
28134
+ ) })
28135
+ ] }),
28136
+ /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { className: "Layer__Reports__header-row", children: [
28137
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(LabeledGlobalDatePicker, {}) }),
28138
+ withExpandAllButton && /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(BalanceSheetExpandAllButton, { view }) })
28139
+ ] })
28140
+ ] });
28141
+ }
28142
+ return /* @__PURE__ */ jsxRuntime.jsx(Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28143
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
28144
+ /* @__PURE__ */ jsxRuntime.jsxs(HeaderCol, { children: [
28145
+ withExpandAllButton && /* @__PURE__ */ jsxRuntime.jsx(BalanceSheetExpandAllButton, { view }),
28146
+ /* @__PURE__ */ jsxRuntime.jsx(
28147
+ BalanceSheetDownloadButton,
28148
+ {
28149
+ effectiveDate,
28150
+ iconOnly: true
28151
+ }
28152
+ )
28153
+ ] })
28154
+ ] }) });
28155
+ }, [dateSelectionMode, effectiveDate, isMobile, isFullDateMode, view, withExpandAllButton]);
27992
28156
  if (asWidget) {
27993
28157
  return /* @__PURE__ */ jsxRuntime.jsx(TableProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(Container, { name: COMPONENT_NAME$8, asWidget: true, children: /* @__PURE__ */ jsxRuntime.jsx(
27994
28158
  View,
27995
28159
  {
27996
28160
  type: "panel",
27997
28161
  ref: containerRef,
27998
- header: /* @__PURE__ */ jsxRuntime.jsx(Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
27999
- /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
28000
- withExpandAllButton && /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(BalanceSheetExpandAllButton, { view }) })
28001
- ] }) }),
28162
+ header: widgetHeader,
28002
28163
  children: !data || isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: `Layer__${COMPONENT_NAME$8}__loader-container`, children: /* @__PURE__ */ jsxRuntime.jsx(Loader, {}) }) : /* @__PURE__ */ jsxRuntime.jsx(
28003
28164
  BalanceSheetTable,
28004
28165
  {
@@ -28015,19 +28176,7 @@ const BalanceSheetView = ({
28015
28176
  {
28016
28177
  type: "panel",
28017
28178
  ref: containerRef,
28018
- header: /* @__PURE__ */ jsxRuntime.jsx(Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28019
- /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
28020
- /* @__PURE__ */ jsxRuntime.jsxs(HeaderCol, { children: [
28021
- withExpandAllButton && /* @__PURE__ */ jsxRuntime.jsx(BalanceSheetExpandAllButton, { view }),
28022
- /* @__PURE__ */ jsxRuntime.jsx(
28023
- BalanceSheetDownloadButton,
28024
- {
28025
- effectiveDate,
28026
- iconOnly: view === "mobile"
28027
- }
28028
- )
28029
- ] })
28030
- ] }) }),
28179
+ header,
28031
28180
  children: !data || isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: `Layer__${COMPONENT_NAME$8}__loader-container`, children: /* @__PURE__ */ jsxRuntime.jsx(Loader, {}) }) : /* @__PURE__ */ jsxRuntime.jsx(
28032
28181
  BalanceSheetTable,
28033
28182
  {
@@ -28299,37 +28448,49 @@ const StatementOfCashFlow = (props) => {
28299
28448
  };
28300
28449
  const StatementOfCashFlowView = ({
28301
28450
  stringOverrides,
28302
- dateSelectionMode = "full"
28451
+ dateSelectionMode = "full",
28452
+ view
28303
28453
  }) => {
28304
28454
  const dateRange = useGlobalDateRange({ displayMode: dateSelectionMode });
28305
28455
  const { data, isLoading } = useStatementOfCashFlow(dateRange);
28306
- const { view, containerRef } = useElementViewSize();
28307
- return /* @__PURE__ */ jsxRuntime.jsx(TableProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(
28308
- View,
28309
- {
28310
- type: "panel",
28311
- ref: containerRef,
28312
- header: /* @__PURE__ */ jsxRuntime.jsx(Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28313
- /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(CombinedDateRangeSelection, { mode: dateSelectionMode }) }),
28314
- /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(
28315
- CashflowStatementDownloadButton,
28316
- {
28317
- startDate: dateRange.startDate,
28318
- endDate: dateRange.endDate,
28319
- iconOnly: view === "mobile"
28320
- }
28321
- ) })
28322
- ] }) }),
28323
- children: !data || isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: `Layer__${COMPONENT_NAME$7}__loader-container`, children: /* @__PURE__ */ jsxRuntime.jsx(Loader, {}) }) : /* @__PURE__ */ jsxRuntime.jsx(
28324
- StatementOfCashFlowTable,
28456
+ const header = react.useMemo(() => {
28457
+ const isMobile = view !== "desktop";
28458
+ const isFullDateMode = dateSelectionMode === "full";
28459
+ if (isMobile && isFullDateMode) {
28460
+ return /* @__PURE__ */ jsxRuntime.jsxs(Header, { children: [
28461
+ /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28462
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(DateSelectionComboBox, {}) }),
28463
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(
28464
+ CashflowStatementDownloadButton,
28465
+ {
28466
+ startDate: dateRange.startDate,
28467
+ endDate: dateRange.endDate,
28468
+ iconOnly: isMobile
28469
+ }
28470
+ ) })
28471
+ ] }),
28472
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderRow, { children: /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(DateRangePickers, {}) }) })
28473
+ ] });
28474
+ }
28475
+ return /* @__PURE__ */ jsxRuntime.jsx(Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(HeaderRow, { children: [
28476
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(CombinedDateRangeSelection, { mode: dateSelectionMode }) }),
28477
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderCol, { children: /* @__PURE__ */ jsxRuntime.jsx(
28478
+ CashflowStatementDownloadButton,
28325
28479
  {
28326
- data,
28327
- config: STATEMENT_OF_CASH_FLOW_ROWS,
28328
- stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashFlowTable
28480
+ startDate: dateRange.startDate,
28481
+ endDate: dateRange.endDate
28329
28482
  }
28330
- )
28483
+ ) })
28484
+ ] }) });
28485
+ }, [dateRange.startDate, dateRange.endDate, dateSelectionMode, view]);
28486
+ return /* @__PURE__ */ jsxRuntime.jsx(TableProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(View, { type: "panel", header, children: !data || isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: `Layer__${COMPONENT_NAME$7}__loader-container`, children: /* @__PURE__ */ jsxRuntime.jsx(Loader, {}) }) : /* @__PURE__ */ jsxRuntime.jsx(
28487
+ StatementOfCashFlowTable,
28488
+ {
28489
+ data,
28490
+ config: STATEMENT_OF_CASH_FLOW_ROWS,
28491
+ stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashFlowTable
28331
28492
  }
28332
- ) });
28493
+ ) }) });
28333
28494
  };
28334
28495
  const LEDGER_BALANCES_TAG_KEY = "#ledger-balances";
28335
28496
  class LedgerBalancesSWRResponse {
@@ -40110,19 +40271,15 @@ function UnifiedReportDownloadButton() {
40110
40271
  onSuccess: ({ presignedUrl }) => triggerInvisibleDownload({ url: presignedUrl })
40111
40272
  });
40112
40273
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
40113
- /* @__PURE__ */ jsxRuntime.jsxs(
40114
- Button,
40274
+ /* @__PURE__ */ jsxRuntime.jsx(
40275
+ DownloadButton$1,
40115
40276
  {
40116
- variant: "outlined",
40117
- onPress: () => {
40277
+ iconOnly: true,
40278
+ onClick: () => {
40118
40279
  void trigger();
40119
40280
  },
40120
- isPending: isMutating,
40121
- isDisabled: isMutating,
40122
- children: [
40123
- isError ? "Retry" : "Download",
40124
- isError ? /* @__PURE__ */ jsxRuntime.jsx(RefreshCcw, { size: 12 }) : /* @__PURE__ */ jsxRuntime.jsx(DownloadCloud, { size: 16 })
40125
- ]
40281
+ isDownloading: isMutating,
40282
+ requestFailed: isError
40126
40283
  }
40127
40284
  ),
40128
40285
  /* @__PURE__ */ jsxRuntime.jsx(InvisibleDownload, { ref: invisibleDownloadRef })
@@ -45052,6 +45209,83 @@ const ProjectProfitabilityView = ({
45052
45209
  }
45053
45210
  );
45054
45211
  };
45212
+ const ReportsSelector = ({
45213
+ options: options2,
45214
+ selected,
45215
+ onChange,
45216
+ view = "mobile"
45217
+ }) => {
45218
+ const [isDrawerOpen, setIsDrawerOpen] = react.useState(false);
45219
+ const selectedOption = options2.find((opt) => opt.value === selected);
45220
+ if (view === "mobile") {
45221
+ return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { children: [
45222
+ /* @__PURE__ */ jsxRuntime.jsxs(
45223
+ "button",
45224
+ {
45225
+ className: "Layer__reports-selector",
45226
+ onClick: () => setIsDrawerOpen(true),
45227
+ type: "button",
45228
+ children: [
45229
+ /* @__PURE__ */ jsxRuntime.jsx(Span, { size: "lg", weight: "bold", children: selectedOption == null ? void 0 : selectedOption.label }),
45230
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronDown, { size: 20, className: "Layer__reports-selector__chevron" })
45231
+ ]
45232
+ }
45233
+ ),
45234
+ /* @__PURE__ */ jsxRuntime.jsx(
45235
+ Drawer,
45236
+ {
45237
+ isOpen: isDrawerOpen,
45238
+ onOpenChange: setIsDrawerOpen,
45239
+ variant: "mobile-drawer",
45240
+ isDismissable: true,
45241
+ "aria-label": "Select report type",
45242
+ children: ({ close: close2 }) => /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "Layer__reports-selector-drawer", children: [
45243
+ /* @__PURE__ */ jsxRuntime.jsx(
45244
+ HStack,
45245
+ {
45246
+ justify: "center",
45247
+ pb: "md",
45248
+ className: "Layer__reports-selector-drawer__header",
45249
+ children: /* @__PURE__ */ jsxRuntime.jsx(Span, { size: "lg", weight: "bold", children: "Select Report" })
45250
+ }
45251
+ ),
45252
+ /* @__PURE__ */ jsxRuntime.jsx(VStack, { className: "Layer__reports-selector-drawer__options", children: options2.map((option) => {
45253
+ const isSelected = option.value === selected;
45254
+ const optionClassName = classNames(
45255
+ "Layer__reports-selector-drawer__option",
45256
+ {
45257
+ "Layer__reports-selector-drawer__option--selected": isSelected
45258
+ }
45259
+ );
45260
+ return /* @__PURE__ */ jsxRuntime.jsx(
45261
+ "button",
45262
+ {
45263
+ className: optionClassName,
45264
+ onClick: () => {
45265
+ onChange(option.value);
45266
+ close2();
45267
+ },
45268
+ type: "button",
45269
+ children: /* @__PURE__ */ jsxRuntime.jsx(Span, { size: "md", weight: isSelected ? "bold" : "normal", children: option.label })
45270
+ },
45271
+ option.value
45272
+ );
45273
+ }) })
45274
+ ] })
45275
+ }
45276
+ )
45277
+ ] });
45278
+ }
45279
+ return /* @__PURE__ */ jsxRuntime.jsx(
45280
+ Toggle,
45281
+ {
45282
+ name: "reports-tabs",
45283
+ options: options2,
45284
+ selected,
45285
+ onChange: (e) => onChange(e.target.value)
45286
+ }
45287
+ );
45288
+ };
45055
45289
  const getOptions = (enabledReports) => {
45056
45290
  return [
45057
45291
  enabledReports.includes("profitAndLoss") ? {
@@ -45090,12 +45324,12 @@ const Reports = ({
45090
45324
  showHeader: showTitle,
45091
45325
  children: [
45092
45326
  enabledReports.length > 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "Layer__component Layer__header__actions", children: /* @__PURE__ */ jsxRuntime.jsx(
45093
- Toggle,
45327
+ ReportsSelector,
45094
45328
  {
45095
- name: "reports-tabs",
45096
45329
  options: options2,
45097
45330
  selected: activeTab,
45098
- onChange: (opt) => setActiveTab(opt.target.value)
45331
+ onChange: setActiveTab,
45332
+ view
45099
45333
  }
45100
45334
  ) }),
45101
45335
  /* @__PURE__ */ jsxRuntime.jsx(Container, { name: "reports", ref: containerRef, children: /* @__PURE__ */ jsxRuntime.jsx(ProfitAndLoss, { asContainer: false, comparisonConfig, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -45134,7 +45368,8 @@ const ReportsPanel = ({
45134
45368
  openReport === "statementOfCashFlow" && /* @__PURE__ */ jsxRuntime.jsx(
45135
45369
  StatementOfCashFlow,
45136
45370
  __spreadValues({
45137
- stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashflow
45371
+ stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashflow,
45372
+ view
45138
45373
  }, statementOfCashFlowConfig)
45139
45374
  )
45140
45375
  ] });
@@ -202,7 +202,7 @@ class ErrorHandlerClass {
202
202
  }
203
203
  const errorHandler = new ErrorHandlerClass();
204
204
  const reportError = (payload) => errorHandler.onError(payload);
205
- const version = "0.1.116-alpha.1";
205
+ const version = "0.1.117-alpha";
206
206
  const pkg = {
207
207
  version
208
208
  };
@@ -9853,7 +9853,7 @@ function BankTransactionsActions({ children }) {
9853
9853
  const BulkActionsModule = ({ slots }) => {
9854
9854
  const { count } = useCountSelectedIds();
9855
9855
  const { clearSelection } = useBulkSelectionActions();
9856
- return /* @__PURE__ */ jsxs(HStack, { slot: "toggle", justify: "space-between", align: "center", gap: "xs", children: [
9856
+ return /* @__PURE__ */ jsxs(HStack, { slot: "toggle", justify: "space-between", align: "center", gap: "xs", className: "Layer__BulkActionsModule", children: [
9857
9857
  /* @__PURE__ */ jsxs(HStack, { justify: "space-between", align: "center", pis: "sm", pie: "3xs", gap: "3xs", className: "Layer__BulkActionsModule__SelectedItemsContainer", children: [
9858
9858
  /* @__PURE__ */ jsx(Span, { noWrap: true, children: `${count} selected` }),
9859
9859
  /* @__PURE__ */ jsx(
@@ -10499,7 +10499,7 @@ const BankTransactionsHeader = ({
10499
10499
  )
10500
10500
  ] }),
10501
10501
  /* @__PURE__ */ jsx(TransactionsSearch, { slot: "search", isDisabled: showBulkActions }),
10502
- /* @__PURE__ */ jsxs(HStack, { slot: "download-upload", justify: "center", gap: "xs", children: [
10502
+ showBulkActions ? null : /* @__PURE__ */ jsxs(HStack, { slot: "download-upload", justify: "center", gap: "xs", children: [
10503
10503
  /* @__PURE__ */ jsx(
10504
10504
  DownloadButton,
10505
10505
  {
@@ -17059,8 +17059,8 @@ const BankTransactionsMobileBulkActionsHeader = ({
17059
17059
  HStack,
17060
17060
  {
17061
17061
  gap: "md",
17062
- pi: "lg",
17063
- pbs: "md",
17062
+ pi: "xs",
17063
+ pbs: "sm",
17064
17064
  justify: "space-between",
17065
17065
  align: "center",
17066
17066
  children: [
@@ -24824,11 +24824,10 @@ const ProfitAndLossFullReportDownloadButton = ({
24824
24824
  };
24825
24825
  function ProfitAndLossDownloadButton({
24826
24826
  stringOverrides,
24827
- moneyFormat
24827
+ moneyFormat,
24828
+ iconOnly
24828
24829
  }) {
24829
24830
  const { selectedLineItem } = useContext(ProfitAndLossContext);
24830
- const { value } = useSizeClass();
24831
- const iconOnly = value !== "desktop";
24832
24831
  if (selectedLineItem) {
24833
24832
  return /* @__PURE__ */ jsx(
24834
24833
  ProfitAndLossDetailLinesDownloadButton,
@@ -24888,6 +24887,71 @@ const ProfitAndLossHeader = ({
24888
24887
  ] })
24889
24888
  ] });
24890
24889
  };
24890
+ const DateRangePickers = ({ minDate, maxDate }) => {
24891
+ const { startDate: globalStartDate, endDate: globalEndDate } = useGlobalDateRange({ displayMode: "full" });
24892
+ const { setDateRange: setGlobalDateRange } = useGlobalDateRangeActions();
24893
+ const {
24894
+ localDate: localStartDate,
24895
+ onChange: onChangeStartDate,
24896
+ minDateZdt: minStartDate,
24897
+ maxDateZdt: maxStartDate,
24898
+ isInvalid: startDateInvalid,
24899
+ errorText: startDateErrorText,
24900
+ onBlur: onBlurStartDate
24901
+ } = useDatePickerState({
24902
+ date: globalStartDate,
24903
+ minDate,
24904
+ maxDate
24905
+ });
24906
+ const {
24907
+ localDate: localEndDate,
24908
+ onChange: onChangeEndDate,
24909
+ minDateZdt: minEndDate,
24910
+ maxDateZdt: maxEndDate,
24911
+ isInvalid: endDateInvalid,
24912
+ errorText: endDateErrorText,
24913
+ onBlur: onBlurEndDate
24914
+ } = useDatePickerState({
24915
+ date: globalEndDate,
24916
+ minDate,
24917
+ maxDate
24918
+ });
24919
+ useEffect(() => {
24920
+ if (startDateInvalid || endDateInvalid || !localStartDate || !localEndDate) return;
24921
+ const next = { startDate: localStartDate.toDate(), endDate: localEndDate.toDate() };
24922
+ setGlobalDateRange(next);
24923
+ }, [startDateInvalid, endDateInvalid, localStartDate, localEndDate, setGlobalDateRange]);
24924
+ return /* @__PURE__ */ jsxs(HStack, { gap: "md", pb: "md", children: [
24925
+ /* @__PURE__ */ jsx(
24926
+ DatePicker,
24927
+ {
24928
+ label: "Start Date",
24929
+ showLabel: true,
24930
+ date: localStartDate,
24931
+ onChange: onChangeStartDate,
24932
+ minDate: minStartDate,
24933
+ maxDate: maxStartDate,
24934
+ isInvalid: startDateInvalid,
24935
+ errorText: startDateErrorText,
24936
+ onBlur: onBlurStartDate
24937
+ }
24938
+ ),
24939
+ /* @__PURE__ */ jsx(
24940
+ DatePicker,
24941
+ {
24942
+ label: "End Date",
24943
+ showLabel: true,
24944
+ date: localEndDate,
24945
+ onChange: onChangeEndDate,
24946
+ minDate: minEndDate,
24947
+ maxDate: maxEndDate,
24948
+ isInvalid: endDateInvalid,
24949
+ errorText: endDateErrorText,
24950
+ onBlur: onBlurEndDate
24951
+ }
24952
+ )
24953
+ ] });
24954
+ };
24891
24955
  const MultiSelect = ({
24892
24956
  name,
24893
24957
  options: options2,
@@ -25617,6 +25681,25 @@ const ProfitAndLossReport = ({
25617
25681
  const useComparisonPnl = !!comparisonConfig;
25618
25682
  const header = useMemo(() => {
25619
25683
  if (hideHeader) return null;
25684
+ const isMobile = view !== "desktop";
25685
+ const isFullDateMode = dateSelectionMode === "full";
25686
+ if (isMobile && isFullDateMode) {
25687
+ return /* @__PURE__ */ jsxs(Header, { children: [
25688
+ /* @__PURE__ */ jsxs(HeaderRow, { children: [
25689
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(DateSelectionComboBox, {}) }),
25690
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsx(
25691
+ ProfitAndLossDownloadButton,
25692
+ {
25693
+ stringOverrides: stringOverrides == null ? void 0 : stringOverrides.downloadButton,
25694
+ moneyFormat: csvMoneyFormat,
25695
+ iconOnly: true
25696
+ }
25697
+ ) })
25698
+ ] }),
25699
+ /* @__PURE__ */ jsx(HeaderRow, { children: /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(DateRangePickers, {}) }) }),
25700
+ useComparisonPnl && /* @__PURE__ */ jsx(HeaderRow, { children: /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(ProfitAndLossCompareOptions, {}) }) })
25701
+ ] });
25702
+ }
25620
25703
  return /* @__PURE__ */ jsxs(Header, { children: [
25621
25704
  /* @__PURE__ */ jsxs(HeaderRow, { children: [
25622
25705
  /* @__PURE__ */ jsxs(HeaderCol, { children: [
@@ -25627,7 +25710,8 @@ const ProfitAndLossReport = ({
25627
25710
  ProfitAndLossDownloadButton,
25628
25711
  {
25629
25712
  stringOverrides: stringOverrides == null ? void 0 : stringOverrides.downloadButton,
25630
- moneyFormat: csvMoneyFormat
25713
+ moneyFormat: csvMoneyFormat,
25714
+ iconOnly: true
25631
25715
  }
25632
25716
  ) })
25633
25717
  ] }),
@@ -26494,6 +26578,36 @@ const CombinedDateSelection = ({ mode }) => {
26494
26578
  }
26495
26579
  return /* @__PURE__ */ jsx(DateSelection, {});
26496
26580
  };
26581
+ const LabeledGlobalDatePicker = () => {
26582
+ const { date } = useGlobalDate();
26583
+ const { setDate: setGlobalDate } = useGlobalDateActions();
26584
+ const rawActivationDate = useBusinessActivationDate();
26585
+ const activationDate = useMemo(() => rawActivationDate ? startOfDay(rawActivationDate) : null, [rawActivationDate]);
26586
+ const maxDate = useMemo(() => endOfDay(/* @__PURE__ */ new Date()), []);
26587
+ const setDate = useCallback((date2) => {
26588
+ setGlobalDate({ date: date2 });
26589
+ }, [setGlobalDate]);
26590
+ const { localDate, onChange, minDateZdt, maxDateZdt, errorText, onBlur, isInvalid } = useDatePickerState({
26591
+ date,
26592
+ setDate,
26593
+ minDate: activationDate,
26594
+ maxDate
26595
+ });
26596
+ return /* @__PURE__ */ jsx(
26597
+ DatePicker,
26598
+ {
26599
+ label: "Effective Date",
26600
+ showLabel: true,
26601
+ date: localDate,
26602
+ onChange,
26603
+ minDate: minDateZdt,
26604
+ maxDate: maxDateZdt,
26605
+ isInvalid,
26606
+ errorText,
26607
+ onBlur
26608
+ }
26609
+ );
26610
+ };
26497
26611
  const COMPONENT_NAME$8 = "balance-sheet";
26498
26612
  const BalanceSheet = (props) => {
26499
26613
  return /* @__PURE__ */ jsx(
@@ -26513,16 +26627,63 @@ const BalanceSheetView = ({
26513
26627
  const { date: effectiveDate } = useGlobalDate();
26514
26628
  const { data, isLoading } = useBalanceSheet({ effectiveDate });
26515
26629
  const { view, containerRef } = useElementViewSize();
26630
+ const isMobile = view !== "desktop";
26631
+ const isFullDateMode = dateSelectionMode === "full";
26632
+ const widgetHeader = useMemo(() => {
26633
+ if (isMobile && isFullDateMode) {
26634
+ return /* @__PURE__ */ jsxs(Header, { children: [
26635
+ /* @__PURE__ */ jsx(HeaderRow, { children: /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(DateSelectionComboBox, {}) }) }),
26636
+ /* @__PURE__ */ jsxs(HeaderRow, { className: "Layer__Reports__header-row", children: [
26637
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(LabeledGlobalDatePicker, {}) }),
26638
+ withExpandAllButton && /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsx(BalanceSheetExpandAllButton, { view }) })
26639
+ ] })
26640
+ ] });
26641
+ }
26642
+ return /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(HeaderRow, { children: [
26643
+ /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
26644
+ withExpandAllButton && /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(BalanceSheetExpandAllButton, { view }) })
26645
+ ] }) });
26646
+ }, [dateSelectionMode, isMobile, isFullDateMode, view, withExpandAllButton]);
26647
+ const header = useMemo(() => {
26648
+ if (isMobile && isFullDateMode) {
26649
+ return /* @__PURE__ */ jsxs(Header, { children: [
26650
+ /* @__PURE__ */ jsxs(HeaderRow, { children: [
26651
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(DateSelectionComboBox, {}) }),
26652
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsx(
26653
+ BalanceSheetDownloadButton,
26654
+ {
26655
+ effectiveDate,
26656
+ iconOnly: true
26657
+ }
26658
+ ) })
26659
+ ] }),
26660
+ /* @__PURE__ */ jsxs(HeaderRow, { className: "Layer__Reports__header-row", children: [
26661
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(LabeledGlobalDatePicker, {}) }),
26662
+ withExpandAllButton && /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsx(BalanceSheetExpandAllButton, { view }) })
26663
+ ] })
26664
+ ] });
26665
+ }
26666
+ return /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(HeaderRow, { children: [
26667
+ /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
26668
+ /* @__PURE__ */ jsxs(HeaderCol, { children: [
26669
+ withExpandAllButton && /* @__PURE__ */ jsx(BalanceSheetExpandAllButton, { view }),
26670
+ /* @__PURE__ */ jsx(
26671
+ BalanceSheetDownloadButton,
26672
+ {
26673
+ effectiveDate,
26674
+ iconOnly: true
26675
+ }
26676
+ )
26677
+ ] })
26678
+ ] }) });
26679
+ }, [dateSelectionMode, effectiveDate, isMobile, isFullDateMode, view, withExpandAllButton]);
26516
26680
  if (asWidget) {
26517
26681
  return /* @__PURE__ */ jsx(TableProvider, { children: /* @__PURE__ */ jsx(Container, { name: COMPONENT_NAME$8, asWidget: true, children: /* @__PURE__ */ jsx(
26518
26682
  View,
26519
26683
  {
26520
26684
  type: "panel",
26521
26685
  ref: containerRef,
26522
- header: /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(HeaderRow, { children: [
26523
- /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
26524
- withExpandAllButton && /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(BalanceSheetExpandAllButton, { view }) })
26525
- ] }) }),
26686
+ header: widgetHeader,
26526
26687
  children: !data || isLoading ? /* @__PURE__ */ jsx("div", { className: `Layer__${COMPONENT_NAME$8}__loader-container`, children: /* @__PURE__ */ jsx(Loader, {}) }) : /* @__PURE__ */ jsx(
26527
26688
  BalanceSheetTable,
26528
26689
  {
@@ -26539,19 +26700,7 @@ const BalanceSheetView = ({
26539
26700
  {
26540
26701
  type: "panel",
26541
26702
  ref: containerRef,
26542
- header: /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(HeaderRow, { children: [
26543
- /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(CombinedDateSelection, { mode: dateSelectionMode }) }),
26544
- /* @__PURE__ */ jsxs(HeaderCol, { children: [
26545
- withExpandAllButton && /* @__PURE__ */ jsx(BalanceSheetExpandAllButton, { view }),
26546
- /* @__PURE__ */ jsx(
26547
- BalanceSheetDownloadButton,
26548
- {
26549
- effectiveDate,
26550
- iconOnly: view === "mobile"
26551
- }
26552
- )
26553
- ] })
26554
- ] }) }),
26703
+ header,
26555
26704
  children: !data || isLoading ? /* @__PURE__ */ jsx("div", { className: `Layer__${COMPONENT_NAME$8}__loader-container`, children: /* @__PURE__ */ jsx(Loader, {}) }) : /* @__PURE__ */ jsx(
26556
26705
  BalanceSheetTable,
26557
26706
  {
@@ -26823,37 +26972,49 @@ const StatementOfCashFlow = (props) => {
26823
26972
  };
26824
26973
  const StatementOfCashFlowView = ({
26825
26974
  stringOverrides,
26826
- dateSelectionMode = "full"
26975
+ dateSelectionMode = "full",
26976
+ view
26827
26977
  }) => {
26828
26978
  const dateRange = useGlobalDateRange({ displayMode: dateSelectionMode });
26829
26979
  const { data, isLoading } = useStatementOfCashFlow(dateRange);
26830
- const { view, containerRef } = useElementViewSize();
26831
- return /* @__PURE__ */ jsx(TableProvider, { children: /* @__PURE__ */ jsx(
26832
- View,
26833
- {
26834
- type: "panel",
26835
- ref: containerRef,
26836
- header: /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(HeaderRow, { children: [
26837
- /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(CombinedDateRangeSelection, { mode: dateSelectionMode }) }),
26838
- /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(
26839
- CashflowStatementDownloadButton,
26840
- {
26841
- startDate: dateRange.startDate,
26842
- endDate: dateRange.endDate,
26843
- iconOnly: view === "mobile"
26844
- }
26845
- ) })
26846
- ] }) }),
26847
- children: !data || isLoading ? /* @__PURE__ */ jsx("div", { className: `Layer__${COMPONENT_NAME$7}__loader-container`, children: /* @__PURE__ */ jsx(Loader, {}) }) : /* @__PURE__ */ jsx(
26848
- StatementOfCashFlowTable,
26980
+ const header = useMemo(() => {
26981
+ const isMobile = view !== "desktop";
26982
+ const isFullDateMode = dateSelectionMode === "full";
26983
+ if (isMobile && isFullDateMode) {
26984
+ return /* @__PURE__ */ jsxs(Header, { children: [
26985
+ /* @__PURE__ */ jsxs(HeaderRow, { children: [
26986
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 1 }, children: /* @__PURE__ */ jsx(DateSelectionComboBox, {}) }),
26987
+ /* @__PURE__ */ jsx(HeaderCol, { style: { flex: 0 }, children: /* @__PURE__ */ jsx(
26988
+ CashflowStatementDownloadButton,
26989
+ {
26990
+ startDate: dateRange.startDate,
26991
+ endDate: dateRange.endDate,
26992
+ iconOnly: isMobile
26993
+ }
26994
+ ) })
26995
+ ] }),
26996
+ /* @__PURE__ */ jsx(HeaderRow, { children: /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(DateRangePickers, {}) }) })
26997
+ ] });
26998
+ }
26999
+ return /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(HeaderRow, { children: [
27000
+ /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(CombinedDateRangeSelection, { mode: dateSelectionMode }) }),
27001
+ /* @__PURE__ */ jsx(HeaderCol, { children: /* @__PURE__ */ jsx(
27002
+ CashflowStatementDownloadButton,
26849
27003
  {
26850
- data,
26851
- config: STATEMENT_OF_CASH_FLOW_ROWS,
26852
- stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashFlowTable
27004
+ startDate: dateRange.startDate,
27005
+ endDate: dateRange.endDate
26853
27006
  }
26854
- )
27007
+ ) })
27008
+ ] }) });
27009
+ }, [dateRange.startDate, dateRange.endDate, dateSelectionMode, view]);
27010
+ return /* @__PURE__ */ jsx(TableProvider, { children: /* @__PURE__ */ jsx(View, { type: "panel", header, children: !data || isLoading ? /* @__PURE__ */ jsx("div", { className: `Layer__${COMPONENT_NAME$7}__loader-container`, children: /* @__PURE__ */ jsx(Loader, {}) }) : /* @__PURE__ */ jsx(
27011
+ StatementOfCashFlowTable,
27012
+ {
27013
+ data,
27014
+ config: STATEMENT_OF_CASH_FLOW_ROWS,
27015
+ stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashFlowTable
26855
27016
  }
26856
- ) });
27017
+ ) }) });
26857
27018
  };
26858
27019
  const LEDGER_BALANCES_TAG_KEY = "#ledger-balances";
26859
27020
  class LedgerBalancesSWRResponse {
@@ -38634,19 +38795,15 @@ function UnifiedReportDownloadButton() {
38634
38795
  onSuccess: ({ presignedUrl }) => triggerInvisibleDownload({ url: presignedUrl })
38635
38796
  });
38636
38797
  return /* @__PURE__ */ jsxs(Fragment, { children: [
38637
- /* @__PURE__ */ jsxs(
38638
- Button,
38798
+ /* @__PURE__ */ jsx(
38799
+ DownloadButton$1,
38639
38800
  {
38640
- variant: "outlined",
38641
- onPress: () => {
38801
+ iconOnly: true,
38802
+ onClick: () => {
38642
38803
  void trigger();
38643
38804
  },
38644
- isPending: isMutating,
38645
- isDisabled: isMutating,
38646
- children: [
38647
- isError ? "Retry" : "Download",
38648
- isError ? /* @__PURE__ */ jsx(RefreshCcw, { size: 12 }) : /* @__PURE__ */ jsx(DownloadCloud, { size: 16 })
38649
- ]
38805
+ isDownloading: isMutating,
38806
+ requestFailed: isError
38650
38807
  }
38651
38808
  ),
38652
38809
  /* @__PURE__ */ jsx(InvisibleDownload, { ref: invisibleDownloadRef })
@@ -43576,6 +43733,83 @@ const ProjectProfitabilityView = ({
43576
43733
  }
43577
43734
  );
43578
43735
  };
43736
+ const ReportsSelector = ({
43737
+ options: options2,
43738
+ selected,
43739
+ onChange,
43740
+ view = "mobile"
43741
+ }) => {
43742
+ const [isDrawerOpen, setIsDrawerOpen] = useState(false);
43743
+ const selectedOption = options2.find((opt) => opt.value === selected);
43744
+ if (view === "mobile") {
43745
+ return /* @__PURE__ */ jsxs(HStack, { children: [
43746
+ /* @__PURE__ */ jsxs(
43747
+ "button",
43748
+ {
43749
+ className: "Layer__reports-selector",
43750
+ onClick: () => setIsDrawerOpen(true),
43751
+ type: "button",
43752
+ children: [
43753
+ /* @__PURE__ */ jsx(Span, { size: "lg", weight: "bold", children: selectedOption == null ? void 0 : selectedOption.label }),
43754
+ /* @__PURE__ */ jsx(ChevronDown, { size: 20, className: "Layer__reports-selector__chevron" })
43755
+ ]
43756
+ }
43757
+ ),
43758
+ /* @__PURE__ */ jsx(
43759
+ Drawer,
43760
+ {
43761
+ isOpen: isDrawerOpen,
43762
+ onOpenChange: setIsDrawerOpen,
43763
+ variant: "mobile-drawer",
43764
+ isDismissable: true,
43765
+ "aria-label": "Select report type",
43766
+ children: ({ close: close2 }) => /* @__PURE__ */ jsxs(VStack, { className: "Layer__reports-selector-drawer", children: [
43767
+ /* @__PURE__ */ jsx(
43768
+ HStack,
43769
+ {
43770
+ justify: "center",
43771
+ pb: "md",
43772
+ className: "Layer__reports-selector-drawer__header",
43773
+ children: /* @__PURE__ */ jsx(Span, { size: "lg", weight: "bold", children: "Select Report" })
43774
+ }
43775
+ ),
43776
+ /* @__PURE__ */ jsx(VStack, { className: "Layer__reports-selector-drawer__options", children: options2.map((option) => {
43777
+ const isSelected = option.value === selected;
43778
+ const optionClassName = classNames(
43779
+ "Layer__reports-selector-drawer__option",
43780
+ {
43781
+ "Layer__reports-selector-drawer__option--selected": isSelected
43782
+ }
43783
+ );
43784
+ return /* @__PURE__ */ jsx(
43785
+ "button",
43786
+ {
43787
+ className: optionClassName,
43788
+ onClick: () => {
43789
+ onChange(option.value);
43790
+ close2();
43791
+ },
43792
+ type: "button",
43793
+ children: /* @__PURE__ */ jsx(Span, { size: "md", weight: isSelected ? "bold" : "normal", children: option.label })
43794
+ },
43795
+ option.value
43796
+ );
43797
+ }) })
43798
+ ] })
43799
+ }
43800
+ )
43801
+ ] });
43802
+ }
43803
+ return /* @__PURE__ */ jsx(
43804
+ Toggle,
43805
+ {
43806
+ name: "reports-tabs",
43807
+ options: options2,
43808
+ selected,
43809
+ onChange: (e) => onChange(e.target.value)
43810
+ }
43811
+ );
43812
+ };
43579
43813
  const getOptions = (enabledReports) => {
43580
43814
  return [
43581
43815
  enabledReports.includes("profitAndLoss") ? {
@@ -43614,12 +43848,12 @@ const Reports = ({
43614
43848
  showHeader: showTitle,
43615
43849
  children: [
43616
43850
  enabledReports.length > 1 && /* @__PURE__ */ jsx("div", { className: "Layer__component Layer__header__actions", children: /* @__PURE__ */ jsx(
43617
- Toggle,
43851
+ ReportsSelector,
43618
43852
  {
43619
- name: "reports-tabs",
43620
43853
  options: options2,
43621
43854
  selected: activeTab,
43622
- onChange: (opt) => setActiveTab(opt.target.value)
43855
+ onChange: setActiveTab,
43856
+ view
43623
43857
  }
43624
43858
  ) }),
43625
43859
  /* @__PURE__ */ jsx(Container, { name: "reports", ref: containerRef, children: /* @__PURE__ */ jsx(ProfitAndLoss, { asContainer: false, comparisonConfig, children: /* @__PURE__ */ jsx(
@@ -43658,7 +43892,8 @@ const ReportsPanel = ({
43658
43892
  openReport === "statementOfCashFlow" && /* @__PURE__ */ jsx(
43659
43893
  StatementOfCashFlow,
43660
43894
  __spreadValues({
43661
- stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashflow
43895
+ stringOverrides: stringOverrides == null ? void 0 : stringOverrides.statementOfCashflow,
43896
+ view
43662
43897
  }, statementOfCashFlowConfig)
43663
43898
  )
43664
43899
  ] });
package/dist/index.css CHANGED
@@ -3742,6 +3742,8 @@ tbody .Layer__table__empty-row:first-child {
3742
3742
  position: sticky;
3743
3743
  z-index: 2;
3744
3744
  top: 0;
3745
+ padding-right: 0;
3746
+ padding-left: 0;
3745
3747
  border-top-left-radius: var(--border-radius-sm);
3746
3748
  border-top-right-radius: var(--border-radius-sm);
3747
3749
  box-shadow: 0 -1px 0 0 rgba(23, 51, 45, 0.16) inset;
@@ -4194,11 +4196,11 @@ tbody .Layer__table__empty-row:first-child {
4194
4196
  }
4195
4197
  .Layer__bank-transaction-mobile-list-item {
4196
4198
  box-sizing: border-box;
4197
- width: 95%;
4199
+ width: 100%;
4198
4200
  padding: 0;
4199
4201
  border-radius: var(--border-radius-sm);
4200
4202
  border: 1px solid var(--border-color);
4201
- margin: var(--spacing-2xs) var(--spacing-md);
4203
+ margin: var(--spacing-2xs) 0;
4202
4204
  background: var(--color-base-0);
4203
4205
  cursor: pointer;
4204
4206
  user-select: none;
@@ -8245,7 +8247,12 @@ header.Layer__profit-and-loss-detailed-charts__header--tablet {
8245
8247
  }
8246
8248
  .Layer__BankTransactionsActions > [slot=download-upload] {
8247
8249
  grid-area: download-upload;
8248
- }.Layer__BulkActionsModule__SelectedItemsContainer {
8250
+ }.Layer__BulkActionsModule {
8251
+ max-width: 100%;
8252
+ }
8253
+
8254
+ .Layer__BulkActionsModule__SelectedItemsContainer {
8255
+ flex-shrink: 0;
8249
8256
  height: 2.25rem;
8250
8257
  border-radius: var(--border-radius-2xs);
8251
8258
  border: 1px solid var(--color-base-300);
@@ -10469,6 +10476,66 @@ header.Layer__profit-and-loss-detailed-charts__header--tablet {
10469
10476
  }
10470
10477
  .Layer__project-view .Layer__select__menu {
10471
10478
  z-index: 2;
10479
+ }.Layer__reports-selector {
10480
+ display: flex;
10481
+ gap: var(--spacing-xs);
10482
+ align-items: center;
10483
+ padding: var(--spacing-sm) var(--spacing-md);
10484
+ border-radius: var(--border-radius-2xs);
10485
+ border: none;
10486
+ background-color: transparent;
10487
+ cursor: pointer;
10488
+ color: var(--color-base-1000);
10489
+ transition: background-color 0.2s;
10490
+ }
10491
+ .Layer__reports-selector__chevron {
10492
+ color: var(--color-base-700);
10493
+ }
10494
+
10495
+ .Layer__reports-selector-drawer {
10496
+ height: 100%;
10497
+ }
10498
+ .Layer__reports-selector-drawer__header {
10499
+ border-bottom: 1px solid var(--color-base-200);
10500
+ }
10501
+ .Layer__reports-selector-drawer__options {
10502
+ flex: 1;
10503
+ overflow-y: auto;
10504
+ }
10505
+ .Layer__reports-selector-drawer__option {
10506
+ display: flex;
10507
+ align-items: center;
10508
+ min-height: 56px;
10509
+ width: 100%;
10510
+ padding: var(--spacing-md) var(--spacing-lg);
10511
+ border: none;
10512
+ border-bottom: 1px solid var(--color-base-100);
10513
+ background: var(--color-base-0);
10514
+ cursor: pointer;
10515
+ text-align: left;
10516
+ color: var(--color-base-1000);
10517
+ transition: background-color 0.2s;
10518
+ }
10519
+ .Layer__reports-selector-drawer__option:hover {
10520
+ background: var(--color-base-50);
10521
+ }
10522
+ .Layer__reports-selector-drawer__option:active {
10523
+ background: var(--color-base-100);
10524
+ }
10525
+ .Layer__reports-selector-drawer__option--selected {
10526
+ background: var(--color-primary-50);
10527
+ color: var(--color-primary-900);
10528
+ }
10529
+ .Layer__reports-selector-drawer__option--selected:hover {
10530
+ background: var(--color-primary-100);
10531
+ }
10532
+ .Layer__reports-selector-drawer__option--selected:active {
10533
+ background: var(--color-primary-150);
10534
+ }
10535
+
10536
+ .Layer__Reports__header-row {
10537
+ padding-block-start: 0.5rem;
10538
+ padding-block-end: 0.75rem;
10472
10539
  }.Layer__toasts-container {
10473
10540
  position: fixed;
10474
10541
  z-index: 1000;
package/dist/index.d.ts CHANGED
@@ -1035,6 +1035,7 @@ export declare const StatementOfCashFlow: (props: StatementOfCashFlowProps) => J
1035
1035
 
1036
1036
  declare type StatementOfCashFlowProps = TimeRangePickerConfig & {
1037
1037
  stringOverrides?: StatementOfCashFlowStringOverrides;
1038
+ view?: ViewBreakpoint_2;
1038
1039
  };
1039
1040
 
1040
1041
  declare interface StatementOfCashFlowStringOverrides {
@@ -1296,6 +1297,8 @@ declare type View = 'mobile' | 'tablet' | 'desktop';
1296
1297
 
1297
1298
  declare type ViewBreakpoint = View | undefined;
1298
1299
 
1300
+ declare type ViewBreakpoint_2 = View | undefined;
1301
+
1299
1302
  export { }
1300
1303
 
1301
1304
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerfi/components",
3
- "version": "0.1.116-alpha.1",
3
+ "version": "0.1.117-alpha",
4
4
  "description": "Layer React Components",
5
5
  "main": "dist/cjs/index.cjs",
6
6
  "module": "dist/esm/index.mjs",