@quillsql/react 2.16.50 → 2.16.52

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.
Files changed (3) hide show
  1. package/dist/index.cjs +114 -437
  2. package/dist/index.js +255 -573
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -20060,27 +20060,6 @@ function parseData(rows, queryType) {
20060
20060
  return rows;
20061
20061
  }
20062
20062
  }
20063
- function isQuillFetchDebugEnabled() {
20064
- if (typeof globalThis !== "undefined") {
20065
- for (const debugFlag of QUILL_FETCH_DEBUG_FLAGS) {
20066
- if (globalThis?.[debugFlag] === true) {
20067
- return true;
20068
- }
20069
- }
20070
- }
20071
- if (typeof process !== "undefined" && typeof process.env !== "undefined") {
20072
- const envCandidates = [
20073
- process?.env?.QUILL_DEBUG_USEFORM_HYDRATION,
20074
- process?.env?.QUILL_DEBUG_USEFORM_FILTERS,
20075
- process?.env?.QUILL_DEBUG_DATA_FETCHER
20076
- ];
20077
- return envCandidates.some((candidate) => {
20078
- const normalized = String(candidate ?? "").trim().toLowerCase();
20079
- return normalized === "1" || normalized === "true";
20080
- });
20081
- }
20082
- return false;
20083
- }
20084
20063
  async function testSqlViewState(client, referencedTables, getToken) {
20085
20064
  let errorMessage = null;
20086
20065
  await Promise.all(
@@ -20566,7 +20545,7 @@ async function fetchRelevantInfoFromState(reportBuilderState, tables, columns, a
20566
20545
  return { error: error.message };
20567
20546
  }
20568
20547
  }
20569
- var QUILL_FETCH_DEBUG_FLAGS, quillFetchDebugSeq, logQuillFetchDebug, quillFetch, parseFetchResponse;
20548
+ var quillFetch, parseFetchResponse;
20570
20549
  var init_dataFetcher = __esm({
20571
20550
  "src/utils/dataFetcher.tsx"() {
20572
20551
  "use strict";
@@ -20575,16 +20554,6 @@ var init_dataFetcher = __esm({
20575
20554
  init_tableProcessing();
20576
20555
  init_dates();
20577
20556
  init_changelogNotify();
20578
- QUILL_FETCH_DEBUG_FLAGS = [
20579
- "__QUILL_DEBUG_USEFORM_HYDRATION__",
20580
- "__QUILL_DEBUG_USEFORM_FILTERS__",
20581
- "__QUILL_DEBUG_DATA_FETCHER__"
20582
- ];
20583
- quillFetchDebugSeq = 0;
20584
- logQuillFetchDebug = (label, payload) => {
20585
- if (!isQuillFetchDebugEnabled()) return;
20586
- console.log(`[quillFetch-debug] ${label}`, payload);
20587
- };
20588
20557
  quillFetch = async ({
20589
20558
  client,
20590
20559
  task,
@@ -20595,24 +20564,7 @@ var init_dataFetcher = __esm({
20595
20564
  urlParameters,
20596
20565
  getToken
20597
20566
  }) => {
20598
- const debugSeq = ++quillFetchDebugSeq;
20599
- const debugStart = Date.now();
20600
- logQuillFetchDebug("request", {
20601
- seq: debugSeq,
20602
- task,
20603
- reportId: metadata?.reportId,
20604
- dashboardItemId: metadata?.dashboardItemId,
20605
- hasPivot: Boolean(metadata?.pivot),
20606
- hasReportBuilderState: Boolean(metadata?.reportBuilderState),
20607
- filtersLength: Array.isArray(metadata?.filters) ? metadata.filters.length : void 0
20608
- });
20609
20567
  const token = await getToken();
20610
- logQuillFetchDebug("token-acquired", {
20611
- seq: debugSeq,
20612
- task,
20613
- ms: Date.now() - debugStart,
20614
- hasToken: Boolean(token)
20615
- });
20616
20568
  const queryString = urlParameters ?? `task=${task}`;
20617
20569
  const endpoint = client.queryEndpoint ? `${client.queryEndpoint}?${queryString}` : `${QUILL_SERVER}${QUILL_QUERY_ENDPOINT}?${queryString}`;
20618
20570
  try {
@@ -20644,17 +20596,6 @@ var init_dataFetcher = __esm({
20644
20596
  if (task !== "fetch-changelog-list" && Array.isArray(normalizedData?.changelogs)) {
20645
20597
  notifyChangelogs(normalizedData.changelogs);
20646
20598
  }
20647
- logQuillFetchDebug("response", {
20648
- seq: debugSeq,
20649
- task,
20650
- ms: Date.now() - debugStart,
20651
- status: result.status,
20652
- error: result.error,
20653
- dataError: normalizedData?.error,
20654
- queryResultRowCounts: Array.isArray(result.queries?.queryResults) ? result.queries.queryResults.map(
20655
- (qr) => Array.isArray(qr?.rows) ? qr.rows.length : null
20656
- ) : void 0
20657
- });
20658
20599
  return {
20659
20600
  data: normalizedData,
20660
20601
  queries: result.queries,
@@ -20663,19 +20604,8 @@ var init_dataFetcher = __esm({
20663
20604
  };
20664
20605
  } catch (e) {
20665
20606
  if (e instanceof Error && e.name === "AbortError") {
20666
- logQuillFetchDebug("aborted", {
20667
- seq: debugSeq,
20668
- task,
20669
- ms: Date.now() - debugStart
20670
- });
20671
20607
  throw e;
20672
20608
  }
20673
- logQuillFetchDebug("threw", {
20674
- seq: debugSeq,
20675
- task,
20676
- ms: Date.now() - debugStart,
20677
- message: e instanceof Error ? e.message : String(e)
20678
- });
20679
20609
  if (task !== "set-section-order") {
20680
20610
  console.error("Failed to fetch:", e);
20681
20611
  }
@@ -21106,7 +21036,7 @@ import {
21106
21036
  useEffect as useEffect19,
21107
21037
  useState as useState26,
21108
21038
  useMemo as useMemo19,
21109
- useRef as useRef16
21039
+ useRef as useRef15
21110
21040
  } from "react";
21111
21041
 
21112
21042
  // src/Chart.tsx
@@ -21115,7 +21045,7 @@ import {
21115
21045
  useEffect as useEffect16,
21116
21046
  useContext as useContext17,
21117
21047
  useMemo as useMemo16,
21118
- useRef as useRef14
21048
+ useRef as useRef13
21119
21049
  } from "react";
21120
21050
 
21121
21051
  // src/utils/csv.ts
@@ -29272,62 +29202,6 @@ function stableColorIndex(field) {
29272
29202
  }
29273
29203
  return hash;
29274
29204
  }
29275
- function assignStableSeriesColors(fields, colors, knownFields = fields) {
29276
- const normalize2 = (values) => [
29277
- ...new Set(
29278
- values.filter((field) => typeof field === "string").map((field) => field.replace("comparison_", ""))
29279
- )
29280
- ];
29281
- const uniqueFields = normalize2(fields);
29282
- const universe = normalize2([...knownFields, ...fields]);
29283
- const result = /* @__PURE__ */ new Map();
29284
- if (universe.length === 0) {
29285
- return result;
29286
- }
29287
- if (!colors.length) {
29288
- for (const field of uniqueFields) {
29289
- result.set(field, "gray");
29290
- }
29291
- return result;
29292
- }
29293
- const palette = colors.length >= universe.length ? colors : generateArrayFromColor(colors, universe.length);
29294
- const ordered = [...universe].sort((a, b) => {
29295
- const diff = stableColorIndex(a) - stableColorIndex(b);
29296
- return diff !== 0 ? diff : a.localeCompare(b);
29297
- });
29298
- const usedIndices = /* @__PURE__ */ new Set();
29299
- const deferred = [];
29300
- const assigned = /* @__PURE__ */ new Map();
29301
- for (const field of ordered) {
29302
- const preferred = stableColorIndex(field) % palette.length;
29303
- if (!usedIndices.has(preferred)) {
29304
- usedIndices.add(preferred);
29305
- assigned.set(field, palette[preferred]);
29306
- } else {
29307
- deferred.push(field);
29308
- }
29309
- }
29310
- for (const field of deferred) {
29311
- const preferred = stableColorIndex(field) % palette.length;
29312
- let found = false;
29313
- for (let offset = 1; offset < palette.length; offset++) {
29314
- const idx = (preferred + offset) % palette.length;
29315
- if (!usedIndices.has(idx)) {
29316
- usedIndices.add(idx);
29317
- assigned.set(field, palette[idx]);
29318
- found = true;
29319
- break;
29320
- }
29321
- }
29322
- if (!found) {
29323
- assigned.set(field, palette[preferred]);
29324
- }
29325
- }
29326
- for (const field of uniqueFields) {
29327
- result.set(field, assigned.get(field));
29328
- }
29329
- return result;
29330
- }
29331
29205
  function selectColor(element, colors, index) {
29332
29206
  if (!element?.field) return "gray";
29333
29207
  const isComparison = element.field.includes("comparison_");
@@ -34287,7 +34161,7 @@ var CustomBar_default = CustomBar;
34287
34161
  // src/components/Chart/BarChart.tsx
34288
34162
  init_columnProcessing();
34289
34163
  init_textProcessing();
34290
- import { useMemo as useMemo8, useRef as useRef6 } from "react";
34164
+ import { useMemo as useMemo8 } from "react";
34291
34165
  import { Fragment as Fragment3, jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
34292
34166
  var CATEGORY_AXIS_WIDTH = 120;
34293
34167
  var VALUE_AXIS_WIDTH = 44;
@@ -34387,21 +34261,6 @@ function BarChart({
34387
34261
  () => stackedMode ? getStackedDomain(data, yAxisFields, comparison) : getDomain(data, yAxisFields, referenceLines),
34388
34262
  [stackedMode, data, yAxisFields, referenceLines, comparison]
34389
34263
  );
34390
- const knownSeriesFieldsRef = useRef6([]);
34391
- const knownColorsKeyRef = useRef6("");
34392
- const seriesColorByField = useMemo8(() => {
34393
- const visibleFields = yAxisFields.filter((field) => comparison || !field.field.startsWith("comparison_")).map((field) => field.field);
34394
- const colorsKey = colors.join("\0");
34395
- if (knownColorsKeyRef.current !== colorsKey) {
34396
- knownSeriesFieldsRef.current = [];
34397
- knownColorsKeyRef.current = colorsKey;
34398
- }
34399
- const knownFields = [
34400
- .../* @__PURE__ */ new Set([...knownSeriesFieldsRef.current, ...visibleFields])
34401
- ];
34402
- knownSeriesFieldsRef.current = knownFields;
34403
- return assignStableSeriesColors(visibleFields, colors, knownFields);
34404
- }, [yAxisFields, colors, comparison]);
34405
34264
  const allowDecimals = useMemo8(
34406
34265
  () => getAllowDecimals(data, yAxisFields, referenceLines),
34407
34266
  [data, yAxisFields, referenceLines]
@@ -34664,15 +34523,7 @@ function BarChart({
34664
34523
  dataKey: elem.field,
34665
34524
  stackId: stackedMode ? "same_id" : isStacked ? elem.field.replace("comparison_", "") : void 0,
34666
34525
  type: "linear",
34667
- fill: getCustomColor(elem.field) ?? selectColor(
34668
- elem,
34669
- [
34670
- seriesColorByField.get(
34671
- elem.field.replace("comparison_", "")
34672
- ) ?? colors[0] ?? "gray"
34673
- ],
34674
- 0
34675
- ),
34526
+ fill: getCustomColor(elem.field) ?? selectColor(elem, colors, stableColorIndex(elem.field)),
34676
34527
  isAnimationActive,
34677
34528
  shape: customBarShape,
34678
34529
  activeBar: customActiveBarShape ?? {
@@ -34866,7 +34717,7 @@ import { useMemo as useMemo12 } from "react";
34866
34717
  import {
34867
34718
  useContext as useContext9,
34868
34719
  useEffect as useEffect10,
34869
- useRef as useRef8,
34720
+ useRef as useRef7,
34870
34721
  useState as useState12
34871
34722
  } from "react";
34872
34723
  import {
@@ -34889,7 +34740,7 @@ import {
34889
34740
  import {
34890
34741
  useContext as useContext8,
34891
34742
  useMemo as useMemo9,
34892
- useRef as useRef7,
34743
+ useRef as useRef6,
34893
34744
  useState as useState11,
34894
34745
  useEffect as useEffect9
34895
34746
  } from "react";
@@ -34908,8 +34759,8 @@ function QuillSelectComponent({
34908
34759
  }) {
34909
34760
  const [theme] = useContext8(ThemeContext);
34910
34761
  const [showModal, setShowModal] = useState11(false);
34911
- const modalRef = useRef7(null);
34912
- const buttonRef = useRef7(null);
34762
+ const modalRef = useRef6(null);
34763
+ const buttonRef = useRef6(null);
34913
34764
  useOnClickOutside_default(
34914
34765
  modalRef,
34915
34766
  (event) => {
@@ -34934,7 +34785,7 @@ function QuillSelectComponent({
34934
34785
  }, [sortedItems]);
34935
34786
  const [popoverPosition, setPopoverPosition] = useState11(void 0);
34936
34787
  const [z, setZ] = useState11(10);
34937
- const scrollableParentRef = useRef7(document.body);
34788
+ const scrollableParentRef = useRef6(document.body);
34938
34789
  const updatePosition = () => {
34939
34790
  if (buttonRef.current) {
34940
34791
  requestAnimationFrame(() => {
@@ -35259,8 +35110,8 @@ function QuillDateRangePicker({
35259
35110
  );
35260
35111
  const [localPreset, setLocalPreset] = useState12(preset);
35261
35112
  const [showModal, setShowModal] = useState12(false);
35262
- const buttonRef = useRef8(null);
35263
- const modalRef = useRef8(null);
35113
+ const buttonRef = useRef7(null);
35114
+ const modalRef = useRef7(null);
35264
35115
  useEffect10(() => {
35265
35116
  setLocalEndDate(dateRange.endDate);
35266
35117
  setLocalStartDate(dateRange.startDate);
@@ -35776,7 +35627,7 @@ import React7, {
35776
35627
  useContext as useContext10,
35777
35628
  useEffect as useEffect11,
35778
35629
  useMemo as useMemo10,
35779
- useRef as useRef9,
35630
+ useRef as useRef8,
35780
35631
  useState as useState13
35781
35632
  } from "react";
35782
35633
  import { createPortal as createPortal3 } from "react-dom";
@@ -35796,15 +35647,15 @@ function QuillMultiSelectComponentWithCombo({
35796
35647
  const [theme] = useContext10(ThemeContext);
35797
35648
  const [selectedOptions, setSelectedOptions] = useState13([]);
35798
35649
  const [showModal, setShowModal] = useState13(false);
35799
- const modalRef = useRef9(null);
35800
- const buttonRef = useRef9(null);
35801
- const debounceTimeoutId = useRef9(null);
35650
+ const modalRef = useRef8(null);
35651
+ const buttonRef = useRef8(null);
35652
+ const debounceTimeoutId = useRef8(null);
35802
35653
  const [searchQuery, setSearchQuery] = React7.useState("");
35803
35654
  const [exceedsLimit, setExceedsLimit] = useState13(false);
35804
35655
  const [popoverPosition, setPopoverPosition] = useState13(void 0);
35805
35656
  const [z, setZ] = useState13(10);
35806
- const scrollableParentRef = useRef9(document.body);
35807
- const selectAllRef = useRef9(null);
35657
+ const scrollableParentRef = useRef8(document.body);
35658
+ const selectAllRef = useRef8(null);
35808
35659
  let CheckboxState;
35809
35660
  ((CheckboxState2) => {
35810
35661
  CheckboxState2[CheckboxState2["SELECTED"] = 0] = "SELECTED";
@@ -36441,7 +36292,7 @@ var ListboxTextInput = ({
36441
36292
  import React8, {
36442
36293
  useContext as useContext11,
36443
36294
  useMemo as useMemo11,
36444
- useRef as useRef10,
36295
+ useRef as useRef9,
36445
36296
  useState as useState14
36446
36297
  } from "react";
36447
36298
  import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
@@ -36458,8 +36309,8 @@ function QuillSelectComponentWithCombo({
36458
36309
  }) {
36459
36310
  const [theme] = useContext11(ThemeContext);
36460
36311
  const [showModal, setShowModal] = useState14(false);
36461
- const modalRef = useRef10(null);
36462
- const buttonRef = useRef10(null);
36312
+ const modalRef = useRef9(null);
36313
+ const buttonRef = useRef9(null);
36463
36314
  const [searchQuery, setSearchQuery] = React8.useState("");
36464
36315
  const filteredItems = React8.useMemo(() => {
36465
36316
  if (searchQuery === "") {
@@ -37416,7 +37267,7 @@ var MetricDisplay = ({
37416
37267
  };
37417
37268
 
37418
37269
  // src/components/Dashboard/DataLoader.tsx
37419
- import { useContext as useContext13, useEffect as useEffect12, useMemo as useMemo13, useRef as useRef11, useState as useState15 } from "react";
37270
+ import { useContext as useContext13, useEffect as useEffect12, useMemo as useMemo13, useRef as useRef10, useState as useState15 } from "react";
37420
37271
  init_paginationProcessing();
37421
37272
  init_tableProcessing();
37422
37273
  import equal2 from "fast-deep-equal";
@@ -37556,17 +37407,17 @@ function DataLoader({
37556
37407
  reportFilters,
37557
37408
  dashboardFilters
37558
37409
  ]);
37559
- const previousFilters = useRef11(filters);
37560
- const previousUserFilters = useRef11(userFilters);
37561
- const previousTenants = useRef11(tenants);
37562
- const previousCustomFields = useRef11(schemaData.customFields);
37410
+ const previousFilters = useRef10(filters);
37411
+ const previousUserFilters = useRef10(userFilters);
37412
+ const previousTenants = useRef10(tenants);
37413
+ const previousCustomFields = useRef10(schemaData.customFields);
37563
37414
  const [rowCountIsLoading, setRowCountIsLoading] = useState15(false);
37564
- const rowsRequestId = useRef11(0);
37565
- const rowsAbortController = useRef11(null);
37566
- const rowCountRequestId = useRef11(0);
37567
- const rowCountAbortController = useRef11(null);
37568
- const updateTableRowsRequestId = useRef11(0);
37569
- const updateTableRowsAbortController = useRef11(null);
37415
+ const rowsRequestId = useRef10(0);
37416
+ const rowsAbortController = useRef10(null);
37417
+ const rowCountRequestId = useRef10(0);
37418
+ const rowCountAbortController = useRef10(null);
37419
+ const updateTableRowsRequestId = useRef10(0);
37420
+ const updateTableRowsAbortController = useRef10(null);
37570
37421
  const fetchRowCount = async (processing) => {
37571
37422
  if (!client || !filters) {
37572
37423
  if (!rowCountAbortController.current) return;
@@ -37966,13 +37817,13 @@ var ChartDataLoader = ({
37966
37817
  const [error, setError] = useState15(void 0);
37967
37818
  const [client] = useContext13(ClientContext);
37968
37819
  const [schemaData] = useContext13(SchemaDataContext);
37969
- const previousFilters = useRef11(filters);
37970
- const previousUserFilters = useRef11(userFilters);
37971
- const previousDateBucket = useRef11(dateBucket);
37972
- const previousTenants = useRef11(tenants);
37973
- const previousCustomFields = useRef11(schemaData.customFields);
37974
- const fetchReportAbortController = useRef11(null);
37975
- const rowsRequestId = useRef11(0);
37820
+ const previousFilters = useRef10(filters);
37821
+ const previousUserFilters = useRef10(userFilters);
37822
+ const previousDateBucket = useRef10(dateBucket);
37823
+ const previousTenants = useRef10(tenants);
37824
+ const previousCustomFields = useRef10(schemaData.customFields);
37825
+ const fetchReportAbortController = useRef10(null);
37826
+ const rowsRequestId = useRef10(0);
37976
37827
  const chartReport = useMemo13(() => {
37977
37828
  const report = dashboardName ? dashboard[item.id] : reports[item.id];
37978
37829
  if (!report) {
@@ -38247,7 +38098,7 @@ var useReportInternal = (reportId) => {
38247
38098
  import equal3 from "fast-deep-equal";
38248
38099
 
38249
38100
  // src/components/Chart/MapChart.tsx
38250
- import { useEffect as useEffect13, useMemo as useMemo15, useRef as useRef12, useState as useState17 } from "react";
38101
+ import { useEffect as useEffect13, useMemo as useMemo15, useRef as useRef11, useState as useState17 } from "react";
38251
38102
  init_valueFormatter();
38252
38103
  import usStates10m from "us-atlas/states-10m.json";
38253
38104
  import worldCountries50m from "world-atlas/countries-50m.json";
@@ -38861,7 +38712,7 @@ function USMap({
38861
38712
  containerStyle
38862
38713
  }) {
38863
38714
  const simpleMaps = useSimpleMapsModule();
38864
- const containerRef = useRef12(null);
38715
+ const containerRef = useRef11(null);
38865
38716
  const [hoveredState, setHoveredState] = useState17(
38866
38717
  void 0
38867
38718
  );
@@ -39057,7 +38908,7 @@ function WorldMap({
39057
38908
  containerStyle
39058
38909
  }) {
39059
38910
  const simpleMaps = useSimpleMapsModule();
39060
- const containerRef = useRef12(null);
38911
+ const containerRef = useRef11(null);
39061
38912
  const [hoveredCountry, setHoveredCountry] = useState17(
39062
38913
  void 0
39063
38914
  );
@@ -39308,7 +39159,7 @@ function MapLayout({
39308
39159
  }
39309
39160
 
39310
39161
  // src/components/Chart/GaugeChart.tsx
39311
- import { useEffect as useEffect14, useRef as useRef13, useState as useState18 } from "react";
39162
+ import { useEffect as useEffect14, useRef as useRef12, useState as useState18 } from "react";
39312
39163
  import { jsx as jsx48 } from "react/jsx-runtime";
39313
39164
  function GaugeChart({
39314
39165
  data,
@@ -39340,15 +39191,15 @@ function D3Gauge({
39340
39191
  colors,
39341
39192
  isAnimationActive
39342
39193
  }) {
39343
- const containerRef = useRef13(null);
39344
- const svgRef = useRef13(null);
39345
- const gaugeGroupRef = useRef13(null);
39346
- const needleRef = useRef13(null);
39347
- const needleOutlineRef = useRef13(null);
39348
- const textRef = useRef13(null);
39349
- const animationFrameRef = useRef13(null);
39350
- const previousPercentageRef = useRef13(0);
39351
- const firstMountRef = useRef13(true);
39194
+ const containerRef = useRef12(null);
39195
+ const svgRef = useRef12(null);
39196
+ const gaugeGroupRef = useRef12(null);
39197
+ const needleRef = useRef12(null);
39198
+ const needleOutlineRef = useRef12(null);
39199
+ const textRef = useRef12(null);
39200
+ const animationFrameRef = useRef12(null);
39201
+ const previousPercentageRef = useRef12(0);
39202
+ const firstMountRef = useRef12(true);
39352
39203
  const startAngle = -(3 * Math.PI) / 4;
39353
39204
  const totalAngle = 3 * Math.PI / 2;
39354
39205
  const [arc, setArc] = useState18(null);
@@ -39885,7 +39736,7 @@ function Chart({
39885
39736
  filters,
39886
39737
  dashboardCustomFilters[allReportsById[reportId]?.dashboardName ?? ""]
39887
39738
  ]);
39888
- const previousFilters = useRef14(void 0);
39739
+ const previousFilters = useRef13(void 0);
39889
39740
  if (!equal3(previousFilters.current, filters)) {
39890
39741
  previousFilters.current = filters;
39891
39742
  }
@@ -40944,7 +40795,7 @@ import {
40944
40795
  useContext as useContext20,
40945
40796
  useEffect as useEffect17,
40946
40797
  useMemo as useMemo17,
40947
- useRef as useRef15,
40798
+ useRef as useRef14,
40948
40799
  useState as useState22
40949
40800
  } from "react";
40950
40801
  init_util();
@@ -41443,7 +41294,7 @@ var FilterPopoverWrapper = ({
41443
41294
  const [isOpen, setIsOpen] = useState22(false);
41444
41295
  const [uniqueValues, setUniqueValues] = useState22(void 0);
41445
41296
  const [uniqueValuesIsLoading, setUniqueValuesIsLoading] = useState22(false);
41446
- const prevFiltersRef = useRef15("");
41297
+ const prevFiltersRef = useRef14("");
41447
41298
  const columnInternals = useMemo17(() => {
41448
41299
  if (!tables) {
41449
41300
  return null;
@@ -42702,7 +42553,7 @@ function DashboardLegacy({
42702
42553
  });
42703
42554
  return map;
42704
42555
  }, [data?.sections, data?.sectionOrder]);
42705
- const mounted = useRef16(false);
42556
+ const mounted = useRef15(false);
42706
42557
  useEffect19(() => {
42707
42558
  if (!mounted.current) {
42708
42559
  mounted.current = true;
@@ -42744,16 +42595,16 @@ function DashboardLegacy({
42744
42595
  ) : defaultOptionsV2;
42745
42596
  }, [populatedDashboardFilters]);
42746
42597
  const [filterValues, setFilterValues] = useState26({});
42747
- const prevNameRef = useRef16(name2);
42748
- const prevFlagsRef = useRef16(flags);
42749
- const prevClientRef = useRef16(client?.id ?? "");
42750
- const addFilterPopoverButtonRef = useRef16(null);
42751
- const viewFiltersPopoverButtonRef = useRef16(null);
42752
- const previousFilters = useRef16(filters);
42598
+ const prevNameRef = useRef15(name2);
42599
+ const prevFlagsRef = useRef15(flags);
42600
+ const prevClientRef = useRef15(client?.id ?? "");
42601
+ const addFilterPopoverButtonRef = useRef15(null);
42602
+ const viewFiltersPopoverButtonRef = useRef15(null);
42603
+ const previousFilters = useRef15(filters);
42753
42604
  if (!equal4(previousFilters.current, filters)) {
42754
42605
  previousFilters.current = filters;
42755
42606
  }
42756
- const isInitialLoadOfDashboardRef = useRef16(false);
42607
+ const isInitialLoadOfDashboardRef = useRef15(false);
42757
42608
  const referencedTables = useMemo19(() => {
42758
42609
  const sections = data?.sections || {};
42759
42610
  const tables2 = Object.values(sections).flatMap(
@@ -42781,7 +42632,7 @@ function DashboardLegacy({
42781
42632
  prevFlagsRef.current = flags;
42782
42633
  });
42783
42634
  }, [name2, isClientLoading]);
42784
- const tenantMounted = useRef16(false);
42635
+ const tenantMounted = useRef15(false);
42785
42636
  useEffect19(() => {
42786
42637
  if (!tenantMounted.current) {
42787
42638
  tenantMounted.current = true;
@@ -44810,7 +44661,7 @@ import {
44810
44661
  useState as useState33,
44811
44662
  useContext as useContext30,
44812
44663
  useEffect as useEffect25,
44813
- useRef as useRef21,
44664
+ useRef as useRef20,
44814
44665
  useMemo as useMemo27,
44815
44666
  useCallback as useCallback4
44816
44667
  } from "react";
@@ -44819,7 +44670,7 @@ import MonacoEditor from "@monaco-editor/react";
44819
44670
  // src/ChartBuilder.tsx
44820
44671
  import {
44821
44672
  useEffect as useEffect23,
44822
- useRef as useRef20,
44673
+ useRef as useRef19,
44823
44674
  useState as useState31,
44824
44675
  useContext as useContext28,
44825
44676
  useMemo as useMemo26,
@@ -44849,7 +44700,7 @@ import {
44849
44700
  useMemo as useMemo23,
44850
44701
  useState as useState28,
44851
44702
  useEffect as useEffect21,
44852
- useRef as useRef17
44703
+ useRef as useRef16
44853
44704
  } from "react";
44854
44705
 
44855
44706
  // src/internals/ReportBuilder/PivotList.tsx
@@ -45324,8 +45175,8 @@ var PivotModal = ({
45324
45175
  const [schemaData] = useContext25(SchemaDataContext);
45325
45176
  const { tenants } = useContext25(TenantContext);
45326
45177
  const { eventTracking } = useContext25(EventTrackingContext);
45327
- const rowFieldRef = useRef17(null);
45328
- const colFieldRef = useRef17(null);
45178
+ const rowFieldRef = useRef16(null);
45179
+ const colFieldRef = useRef16(null);
45329
45180
  const [pivotCardWidth, setPivotCardWidth] = useState28(420);
45330
45181
  const [samplePivotTable, setSamplePivotTable] = useState28(null);
45331
45182
  const [hasNoRecommendedPivots, sethasNoRecommendedPivots] = useState28(false);
@@ -45334,7 +45185,7 @@ var PivotModal = ({
45334
45185
  const [allowedRowFields, setAllowedRowFields] = useState28([]);
45335
45186
  const [allowedValueFields, setAllowedValueFields] = useState28([]);
45336
45187
  const [uniqueValues, setUniqueValues] = useState28(initialUniqueValues);
45337
- const buttonRef = useRef17(null);
45188
+ const buttonRef = useRef16(null);
45338
45189
  const [dateRanges, setDateRanges] = useState28({});
45339
45190
  const [pivotError, setPivotError] = useState28("");
45340
45191
  const [limitInput, setLimitInput] = useState28(
@@ -45353,7 +45204,7 @@ var PivotModal = ({
45353
45204
  const [popoverPosition, setPopoverPosition] = useState28(
45354
45205
  "bottom"
45355
45206
  );
45356
- const popoverRef = useRef17(null);
45207
+ const popoverRef = useRef16(null);
45357
45208
  const columnsToShow = useMemo23(() => {
45358
45209
  return (columns || []).reduce((map, col) => {
45359
45210
  map[col.field] = col.format;
@@ -45682,7 +45533,7 @@ var PivotModal = ({
45682
45533
  };
45683
45534
  fetchPivotTables();
45684
45535
  }, [selectedPivotIndex, data, dateRange, createdPivots]);
45685
- const previousUniqueValuesRef = useRef17();
45536
+ const previousUniqueValuesRef = useRef16();
45686
45537
  useEffect21(() => {
45687
45538
  if (!uniqueValuesIsLoading && !equal5(uniqueValues, previousUniqueValuesRef.current)) {
45688
45539
  previousUniqueValuesRef.current = uniqueValues;
@@ -47094,7 +46945,7 @@ import {
47094
46945
  useEffect as useEffect22,
47095
46946
  useContext as useContext26,
47096
46947
  useMemo as useMemo24,
47097
- useRef as useRef18,
46948
+ useRef as useRef17,
47098
46949
  useLayoutEffect as useLayoutEffect3
47099
46950
  } from "react";
47100
46951
  import { differenceInHours as differenceInHours2 } from "date-fns";
@@ -47216,7 +47067,7 @@ function InternalChart({
47216
47067
  const { dashboardConfig } = useContext26(DashboardConfigContext);
47217
47068
  const { eventTracking } = useContext26(EventTrackingContext);
47218
47069
  const [filtersPopoverOpen, setFiltersPopoverOpen] = useState29(false);
47219
- const filtersButtonRef = useRef18(null);
47070
+ const filtersButtonRef = useRef17(null);
47220
47071
  const currentReportFilters = useMemo24(() => {
47221
47072
  const dashFilters = dashboardConfig[report?.dashboardName ?? ""]?.config.filters;
47222
47073
  if (!dashFilters)
@@ -47245,8 +47096,8 @@ function InternalChart({
47245
47096
  ) : defaultOptionsV2;
47246
47097
  }, [reportDateFilter]);
47247
47098
  const [filterValues, setFilterValues] = useState29({});
47248
- const multiselectDebounceRef = useRef18({});
47249
- const latestMultiselectValueRef = useRef18({});
47099
+ const multiselectDebounceRef = useRef17({});
47100
+ const latestMultiselectValueRef = useRef17({});
47250
47101
  const [lockedFilters, setLockedFilters] = useState29(
47251
47102
  {}
47252
47103
  );
@@ -47408,7 +47259,7 @@ function InternalChart({
47408
47259
  onDashboardFilterChange(filter.label, filterValue);
47409
47260
  };
47410
47261
  const [filtersExpanded, setFiltersExpanded] = useState29(false);
47411
- const filtersContainerRef = useRef18(null);
47262
+ const filtersContainerRef = useRef17(null);
47412
47263
  const [visibleFilters, setVisibleFilters] = useState29([]);
47413
47264
  const filtersOverflowing = useMemo24(() => {
47414
47265
  return visibleFilters.some((visible) => visible);
@@ -47674,7 +47525,7 @@ init_dates();
47674
47525
  import React16, {
47675
47526
  useContext as useContext27,
47676
47527
  useMemo as useMemo25,
47677
- useRef as useRef19,
47528
+ useRef as useRef18,
47678
47529
  useState as useState30
47679
47530
  } from "react";
47680
47531
  import { Fragment as Fragment12, jsx as jsx68, jsxs as jsxs49 } from "react/jsx-runtime";
@@ -47694,9 +47545,9 @@ function QuillMultiSelectSectionList({
47694
47545
  }) {
47695
47546
  const [theme] = useContext27(ThemeContext);
47696
47547
  const [showModal, setShowModal] = useState30(false);
47697
- const modalRef = useRef19(null);
47698
- const buttonRef = useRef19(null);
47699
- const debounceTimeoutId = useRef19(null);
47548
+ const modalRef = useRef18(null);
47549
+ const buttonRef = useRef18(null);
47550
+ const debounceTimeoutId = useRef18(null);
47700
47551
  const [searchQuery, setSearchQuery] = React16.useState("");
47701
47552
  useOnClickOutside_default(
47702
47553
  modalRef,
@@ -48483,7 +48334,7 @@ function createReportFromForm(formData, report, eventTracking, selectedPivotTabl
48483
48334
  return newReport;
48484
48335
  }
48485
48336
  function ChartBuilderWithModal(props) {
48486
- const parentRef = useRef20(null);
48337
+ const parentRef = useRef19(null);
48487
48338
  const [modalWidth, setModalWidth] = useState31(200);
48488
48339
  const [modalHeight, setModalHeight] = useState31(200);
48489
48340
  const { isOpen, setIsOpen, title, isHorizontalView } = props;
@@ -48650,8 +48501,8 @@ function ChartBuilder({
48650
48501
  const MIN_FORM_WIDTH = 700;
48651
48502
  const [pivotCardWidth, setPivotCardWidth] = useState31(MIN_FORM_WIDTH);
48652
48503
  const [formWidth, setFormWidth] = useState31(MIN_FORM_WIDTH);
48653
- const inputRef = useRef20(null);
48654
- const selectRef = useRef20(null);
48504
+ const inputRef = useRef19(null);
48505
+ const selectRef = useRef19(null);
48655
48506
  const processColumns = (columns2) => {
48656
48507
  if (schemaData.schemaWithCustomFields) {
48657
48508
  const newProcessedColumns = columns2?.map((col) => {
@@ -48710,8 +48561,8 @@ function ChartBuilder({
48710
48561
  processColumns(report?.columnInternal ?? [])
48711
48562
  );
48712
48563
  const [currentPage, setCurrentPage] = useState31(0);
48713
- const parentRef = useRef20(null);
48714
- const deleteRef = useRef20(null);
48564
+ const parentRef = useRef19(null);
48565
+ const deleteRef = useRef19(null);
48715
48566
  const modalPadding = 20;
48716
48567
  const deleteButtonMargin = -12;
48717
48568
  const { dashboardFilters } = useContext28(DashboardFiltersContext);
@@ -48764,7 +48615,7 @@ function ChartBuilder({
48764
48615
  abortLoadingFilters
48765
48616
  } = useContext28(ReportFiltersContext);
48766
48617
  const { reportsDispatch } = useContext28(ReportsContext);
48767
- const initialFilters = useRef20(reportFilters[report?.id ?? TEMP_REPORT_ID]);
48618
+ const initialFilters = useRef19(reportFilters[report?.id ?? TEMP_REPORT_ID]);
48768
48619
  const [reportFiltersLoaded, setReportFiltersLoaded] = useState31(!filtersEnabled);
48769
48620
  const hasExistingData = useMemo26(() => {
48770
48621
  return report?.rows && report.rows.length > 0 || report?.pivotRows && report.pivotRows.length > 0;
@@ -49058,7 +48909,7 @@ function ChartBuilder({
49058
48909
  };
49059
48910
  }
49060
48911
  };
49061
- const initializedRef = useRef20(false);
48912
+ const initializedRef = useRef19(false);
49062
48913
  const getCurrentSection = () => {
49063
48914
  let id = report?.id ?? "";
49064
48915
  if (id === "" || id === TEMP_REPORT_ID) {
@@ -49387,7 +49238,7 @@ function ChartBuilder({
49387
49238
  }));
49388
49239
  }
49389
49240
  }, [report?.triggerReload, report?.columns, formData.columns.length]);
49390
- const ranMountQuery = useRef20(false);
49241
+ const ranMountQuery = useRef19(false);
49391
49242
  useEffect23(() => {
49392
49243
  if (runQueryOnMount && reportFiltersLoaded && filtersEnabled && !ranMountQuery.current) {
49393
49244
  ranMountQuery.current = true;
@@ -49624,7 +49475,7 @@ function ChartBuilder({
49624
49475
  return handleRunQuery(baseProcessing, updatedFilters);
49625
49476
  });
49626
49477
  };
49627
- const filtersEnabledRef = useRef20(filtersEnabled);
49478
+ const filtersEnabledRef = useRef19(filtersEnabled);
49628
49479
  useEffect23(() => {
49629
49480
  if (filtersEnabledRef.current !== filtersEnabled) {
49630
49481
  filtersEnabledRef.current = filtersEnabled;
@@ -52629,7 +52480,7 @@ function SQLEditor({
52629
52480
  }) {
52630
52481
  const computedButtonLabel = addToDashboardButtonLabel === "Add to dashboard" ? reportId || report?.id ? "Save changes" : "Add to dashboard" : addToDashboardButtonLabel;
52631
52482
  const [sqlPrompt, setSqlPrompt] = useState33("");
52632
- const sqlPromptFormRef = useRef21(null);
52483
+ const sqlPromptFormRef = useRef20(null);
52633
52484
  const sqlPromptInputWidth = useResponsiveFirstChildWidth_default(sqlPromptFormRef, {
52634
52485
  gap: 12,
52635
52486
  initialWidth: 320,
@@ -52689,7 +52540,7 @@ function SQLEditor({
52689
52540
  };
52690
52541
  return initial;
52691
52542
  });
52692
- const tableRef = useRef21(null);
52543
+ const tableRef = useRef20(null);
52693
52544
  const [cachedHeight, setCachedHeight] = useState33(0);
52694
52545
  const DEFAULT_ROWS_PER_PAGE = 5;
52695
52546
  const ROW_HEIGHT = 37;
@@ -53691,7 +53542,7 @@ var SQLEditorComponent = ({
53691
53542
  }) => {
53692
53543
  const [editorKey, setEditorKey] = useState33(0);
53693
53544
  const { eventTracking } = useContext30(EventTrackingContext);
53694
- const currentProvider = useRef21(null);
53545
+ const currentProvider = useRef20(null);
53695
53546
  useEffect25(() => {
53696
53547
  if (currentProvider.current) {
53697
53548
  currentProvider.current.dispose();
@@ -54163,7 +54014,7 @@ function SchemaItem({
54163
54014
  import {
54164
54015
  useContext as useContext34,
54165
54016
  useEffect as useEffect29,
54166
- useRef as useRef23,
54017
+ useRef as useRef22,
54167
54018
  useState as useState39
54168
54019
  } from "react";
54169
54020
  init_constants();
@@ -55699,7 +55550,7 @@ var useReportBuilder = ({
55699
55550
  init_ReportBuilder();
55700
55551
 
55701
55552
  // src/components/ReportBuilder/AddColumnModal.tsx
55702
- import { useState as useState35, useRef as useRef22, useMemo as useMemo29, useEffect as useEffect27, useContext as useContext32 } from "react";
55553
+ import { useState as useState35, useRef as useRef21, useMemo as useMemo29, useEffect as useEffect27, useContext as useContext32 } from "react";
55703
55554
  import {
55704
55555
  DndContext as DndContext2,
55705
55556
  closestCenter as closestCenter2,
@@ -55740,7 +55591,7 @@ function AddColumnModal({
55740
55591
  const [theme] = useContext32(ThemeContext);
55741
55592
  const [search, setSearch] = useState35("");
55742
55593
  const [initialLoad, setInitialLoad] = useState35(true);
55743
- const textInputContainerRef = useRef22(null);
55594
+ const textInputContainerRef = useRef21(null);
55744
55595
  const [modalSelectedColumns, setModalSelectedColumns] = useState35(
55745
55596
  selectedColumns.map((col) => `${col.table}.${col.field}`)
55746
55597
  );
@@ -58194,8 +58045,8 @@ function ReportBuilder({
58194
58045
  const [theme] = useContext34(ThemeContext);
58195
58046
  const [client] = useContext34(ClientContext);
58196
58047
  const { getToken } = useContext34(FetchContext);
58197
- const parentRef = useRef23(null);
58198
- const askAIFormRef = useRef23(null);
58048
+ const parentRef = useRef22(null);
58049
+ const askAIFormRef = useRef22(null);
58199
58050
  const [isCopying, setIsCopying] = useState39(false);
58200
58051
  const [isChartBuilderOpen, setIsChartBuilderOpen] = useState39(false);
58201
58052
  const [isSaveQueryModalOpen, setIsSaveQueryModalOpen] = useState39(false);
@@ -58702,7 +58553,7 @@ import {
58702
58553
  useContext as useContext35,
58703
58554
  useEffect as useEffect30,
58704
58555
  useMemo as useMemo31,
58705
- useRef as useRef24,
58556
+ useRef as useRef23,
58706
58557
  useState as useState40
58707
58558
  } from "react";
58708
58559
  import { jsx as jsx86 } from "react/jsx-runtime";
@@ -58751,7 +58602,7 @@ function ChartEditor({
58751
58602
  onClickChartElement,
58752
58603
  onClickChartError
58753
58604
  }) {
58754
- const parentRef = useRef24(null);
58605
+ const parentRef = useRef23(null);
58755
58606
  const [modalWidth, setModalWidth] = useState40(200);
58756
58607
  const [modalHeight, setModalHeight] = useState40(200);
58757
58608
  const { allReportsById } = useAllReports();
@@ -58929,7 +58780,7 @@ function ChartEditor({
58929
58780
  }
58930
58781
 
58931
58782
  // src/Chat.tsx
58932
- import { useContext as useContext37, useEffect as useEffect32, useRef as useRef26, useState as useState42 } from "react";
58783
+ import { useContext as useContext37, useEffect as useEffect32, useRef as useRef25, useState as useState42 } from "react";
58933
58784
 
58934
58785
  // src/ChatChartCard.tsx
58935
58786
  import { useMemo as useMemo33 } from "react";
@@ -58944,7 +58795,7 @@ import {
58944
58795
  useLayoutEffect as useLayoutEffect4,
58945
58796
  useMemo as useMemo32,
58946
58797
  useReducer as useReducer2,
58947
- useRef as useRef25,
58798
+ useRef as useRef24,
58948
58799
  useState as useState41
58949
58800
  } from "react";
58950
58801
  import { keepPreviousData, useQuery } from "@tanstack/react-query";
@@ -60131,6 +59982,37 @@ function useFormReducer(state, action) {
60131
59982
  }
60132
59983
  }
60133
59984
 
59985
+ // src/utils/pivotDateBuckets.ts
59986
+ import {
59987
+ eachDayOfInterval as eachDayOfInterval3,
59988
+ eachMonthOfInterval as eachMonthOfInterval2,
59989
+ eachWeekOfInterval as eachWeekOfInterval2,
59990
+ eachYearOfInterval as eachYearOfInterval2
59991
+ } from "date-fns";
59992
+ function buildPivotDateBucketStarts(range, bucket) {
59993
+ const min2 = new Date(range.min);
59994
+ const max2 = new Date(range.max);
59995
+ if (Number.isNaN(min2.getTime()) || Number.isNaN(max2.getTime())) return [];
59996
+ const start = min2 <= max2 ? min2 : max2;
59997
+ const end = min2 <= max2 ? max2 : min2;
59998
+ const asLocalCalendarDate = (date) => new Date(
59999
+ date.getUTCFullYear(),
60000
+ date.getUTCMonth(),
60001
+ date.getUTCDate(),
60002
+ 12
60003
+ );
60004
+ const interval = {
60005
+ start: asLocalCalendarDate(start),
60006
+ end: asLocalCalendarDate(end)
60007
+ };
60008
+ const dates = bucket === "day" ? eachDayOfInterval3(interval) : bucket === "week" ? eachWeekOfInterval2(interval, { weekStartsOn: 1 }) : bucket === "year" ? eachYearOfInterval2(interval) : eachMonthOfInterval2(interval);
60009
+ return dates.map(
60010
+ (date) => new Date(
60011
+ Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())
60012
+ ).toISOString()
60013
+ );
60014
+ }
60015
+
60134
60016
  // src/hooks/useForm.queries.ts
60135
60017
  var QUERY_KEY_UNDEFINED = "__undefined__";
60136
60018
  var QUERY_KEY_FUNCTION = "__function__";
@@ -60308,70 +60190,6 @@ var AXIS_FORMAT_OPTIONS = [
60308
60190
  { value: "MMM_dd_hh:mm_ap_pm", label: "date and time" },
60309
60191
  { value: "hh_ap_pm", label: "hour" }
60310
60192
  ];
60311
- var USEFORM_FILTERS_DEBUG_FLAG = "__QUILL_DEBUG_USEFORM_FILTERS__";
60312
- var USEFORM_REFRESH_DEBUG_FLAG = "__QUILL_DEBUG_USEFORM_REFRESH__";
60313
- var USEFORM_PIVOT_SHAPE_DEBUG_FLAG = "__QUILL_DEBUG_USEFORM_PIVOT_SHAPE__";
60314
- var USEFORM_TASK_DEBUG_FLAG = "__QUILL_DEBUG_USEFORM_TASKS__";
60315
- var isUseFormFiltersDebugEnabled = () => {
60316
- const globalValue = typeof globalThis !== "undefined" ? globalThis?.[USEFORM_FILTERS_DEBUG_FLAG] : void 0;
60317
- if (globalValue === true) {
60318
- return true;
60319
- }
60320
- if (typeof process !== "undefined" && typeof process.env !== "undefined") {
60321
- const envValue = String(
60322
- process?.env?.QUILL_DEBUG_USEFORM_FILTERS ?? ""
60323
- ).trim().toLowerCase();
60324
- return envValue === "1" || envValue === "true";
60325
- }
60326
- return false;
60327
- };
60328
- var isUseFormRefreshDebugEnabled = () => {
60329
- const globalValue = typeof globalThis !== "undefined" ? globalThis?.[USEFORM_REFRESH_DEBUG_FLAG] : void 0;
60330
- if (globalValue === true) {
60331
- return true;
60332
- }
60333
- if (typeof process !== "undefined" && typeof process.env !== "undefined") {
60334
- const envValue = String(
60335
- process?.env?.QUILL_DEBUG_USEFORM_REFRESH ?? ""
60336
- ).trim().toLowerCase();
60337
- return envValue === "1" || envValue === "true";
60338
- }
60339
- return false;
60340
- };
60341
- var isUseFormTaskDebugEnabled = () => {
60342
- const globalValue = typeof globalThis !== "undefined" ? globalThis?.[USEFORM_TASK_DEBUG_FLAG] : void 0;
60343
- if (globalValue === true) {
60344
- return true;
60345
- }
60346
- if (typeof process !== "undefined" && typeof process.env !== "undefined") {
60347
- const envValue = String(
60348
- process?.env?.QUILL_DEBUG_USEFORM_TASKS ?? ""
60349
- ).trim().toLowerCase();
60350
- return envValue === "1" || envValue === "true";
60351
- }
60352
- return false;
60353
- };
60354
- var logUseFormTaskDebug = (label, payload) => {
60355
- if (!isUseFormTaskDebugEnabled()) return;
60356
- console.log(`[useReport][task] ${label}`, payload);
60357
- };
60358
- var isUseFormPivotShapeDebugEnabled = () => {
60359
- const globalValue = typeof globalThis !== "undefined" ? globalThis?.[USEFORM_PIVOT_SHAPE_DEBUG_FLAG] : void 0;
60360
- if (globalValue === true) {
60361
- return true;
60362
- }
60363
- if (typeof process !== "undefined" && typeof process.env !== "undefined") {
60364
- const envValue = String(
60365
- process?.env?.QUILL_DEBUG_USEFORM_PIVOT_SHAPE ?? ""
60366
- ).trim().toLowerCase();
60367
- return envValue === "1" || envValue === "true";
60368
- }
60369
- return false;
60370
- };
60371
- var logUseFormPivotShapeDebug = (label, payload) => {
60372
- if (!isUseFormPivotShapeDebugEnabled()) return;
60373
- console.log(`[useReport][pivot-shape] ${label}`, payload);
60374
- };
60375
60193
  var BOOLEAN_FILTER_VALUE_OPTIONS = [
60376
60194
  { name: "true", label: "True", value: "true" },
60377
60195
  { name: "false", label: "False", value: "false" }
@@ -61263,30 +61081,24 @@ function shouldUsePivotRowFieldAsXAxis(chartType, pivotRowField, rowColumnFormat
61263
61081
  function normalizePivotChartForDisplay(chart) {
61264
61082
  const swapPivotRowsForChartRows = Boolean(chart?.pivot) && Array.isArray(chart?.pivotRows) && chart.pivotRows.length > 0;
61265
61083
  const syntheticAggregationOnlyRows = chart && !swapPivotRowsForChartRows ? buildSyntheticAggregationOnlyDisplayRows(chart) : null;
61084
+ const hasExplicitEmptyGroupedPivot = Boolean(
61085
+ String(chart?.pivot?.rowField ?? "").trim() || String(chart?.pivot?.columnField ?? "").trim()
61086
+ ) && Array.isArray(chart?.pivotRows) && chart.pivotRows.length === 0;
61266
61087
  const detailRowsAreNotPivotBuckets = Boolean(chart) && !swapPivotRowsForChartRows && !syntheticAggregationOnlyRows && chartDetailRowsMissingPivotRowBucket(chart);
61267
- logUseFormPivotShapeDebug("normalizePivotChartForDisplay:gate", {
61268
- hasPivot: Boolean(chart?.pivot),
61269
- pivotRowField: chart?.pivot?.rowField,
61270
- pivotRowsIsArray: Array.isArray(chart?.pivotRows),
61271
- pivotRowsLength: Array.isArray(chart?.pivotRows) ? chart.pivotRows.length : null,
61272
- incomingChartRowsLength: Array.isArray(chart?.rows) ? chart.rows.length : null,
61273
- swapPivotRowsForChartRows
61274
- });
61275
61088
  const config = swapPivotRowsForChartRows ? {
61276
61089
  ...chart,
61277
61090
  rows: chart.pivotRows
61278
61091
  } : syntheticAggregationOnlyRows ? {
61279
61092
  ...chart,
61280
61093
  rows: syntheticAggregationOnlyRows
61094
+ } : hasExplicitEmptyGroupedPivot ? {
61095
+ ...chart,
61096
+ rows: []
61281
61097
  } : detailRowsAreNotPivotBuckets ? {
61282
61098
  ...chart,
61283
61099
  rows: []
61284
61100
  } : chart;
61285
61101
  if (!config) return config;
61286
- logUseFormPivotShapeDebug("normalizePivotChartForDisplay:postGateRows", {
61287
- effectiveRowsLength: Array.isArray(config.rows) ? config.rows.length : null,
61288
- stillUsingDetailRows: Boolean(config.pivot) && !swapPivotRowsForChartRows && Array.isArray(config.rows) && config.rows.length > 0
61289
- });
61290
61102
  if (!config.pivot) return config;
61291
61103
  const pivotRowFieldEarly = String(config.pivot?.rowField ?? "").trim();
61292
61104
  const rowColumn = (config.pivotColumns ?? config.columns ?? []).find(
@@ -62326,7 +62138,8 @@ function mergeDisplayAndSourceForTableFormats(args) {
62326
62138
  effectiveReportBuilderTableNames,
62327
62139
  scopedSchemaColumns,
62328
62140
  displayColumns,
62329
- sourceReport
62141
+ sourceReport,
62142
+ includeSelectedSchemaFallback
62330
62143
  } = args;
62331
62144
  const selectedTableNames = new Set(effectiveReportBuilderTableNames);
62332
62145
  const persistedReportColumns = Array.isArray(sourceReport?.columns) && sourceReport.columns.length > 0 ? sourceReport.columns : null;
@@ -62347,6 +62160,21 @@ function mergeDisplayAndSourceForTableFormats(args) {
62347
62160
  ...tableName ? { table: tableName } : {}
62348
62161
  };
62349
62162
  }).filter((column) => Boolean(column));
62163
+ const normalizedSchemaColumns = includeSelectedSchemaFallback ? scopedSchemaColumns.filter(
62164
+ (column) => selectedTableNames.has(String(column.table ?? "").trim())
62165
+ ).map((column) => {
62166
+ const field = String(column.field ?? "").trim();
62167
+ if (!field) return null;
62168
+ const label = String(column.label ?? "").trim() || field;
62169
+ const format9 = String(column.format ?? "").trim() || "string";
62170
+ const tableName = String(column.table ?? "").trim();
62171
+ return {
62172
+ label,
62173
+ field,
62174
+ format: format9,
62175
+ ...tableName ? { table: tableName } : {}
62176
+ };
62177
+ }).filter((column) => Boolean(column)) : [];
62350
62178
  const normalizedDisplayColumns = (displayColumns ?? []).map((column) => {
62351
62179
  const field = String(column?.field ?? "").trim();
62352
62180
  if (!field) return null;
@@ -62371,7 +62199,10 @@ function mergeDisplayAndSourceForTableFormats(args) {
62371
62199
  sourceColumnsByKey.set(key, [column]);
62372
62200
  }
62373
62201
  };
62374
- for (const sourceColumn of normalizedSourceColumns) {
62202
+ for (const sourceColumn of [
62203
+ ...normalizedSourceColumns,
62204
+ ...normalizedSchemaColumns
62205
+ ]) {
62375
62206
  const tableName = String(sourceColumn.table ?? "").trim();
62376
62207
  addSourceColumnKey(sourceColumn.field, sourceColumn);
62377
62208
  addSourceColumnKey(sourceColumn.label, sourceColumn);
@@ -62929,9 +62760,6 @@ async function loadViaInMemoryEngines({
62929
62760
  pivot,
62930
62761
  reportBuilderState,
62931
62762
  allowReportTaskBootstrap = false,
62932
- debugSource,
62933
- debugRunId,
62934
- debugLoadRequestId,
62935
62763
  draftSessionId
62936
62764
  }) {
62937
62765
  const requestedTask = allowReportTaskBootstrap ? "report" : "item";
@@ -62941,17 +62769,6 @@ async function loadViaInMemoryEngines({
62941
62769
  rowsPerRequest: DEFAULT_USE_REPORT_ROWS_PER_REQUEST
62942
62770
  }
62943
62771
  } : {};
62944
- logUseFormTaskDebug("dispatch fetchReport", {
62945
- reportId,
62946
- task: requestedTask,
62947
- source: debugSource ?? "unknown",
62948
- runId: debugRunId ?? null,
62949
- loadRequestId: debugLoadRequestId ?? null,
62950
- allowReportTaskBootstrap,
62951
- filterCount: internalFilters.length,
62952
- hasPivot: Boolean(pivot),
62953
- hasReportBuilderState: Boolean(reportBuilderState)
62954
- });
62955
62772
  const { report, error } = await fetchReport({
62956
62773
  reportId,
62957
62774
  client,
@@ -63031,9 +62848,6 @@ async function loadViaPivotTemplate({
63031
62848
  reportBuilderState,
63032
62849
  baseReport,
63033
62850
  schema,
63034
- debugSource,
63035
- debugRunId,
63036
- debugLoadRequestId,
63037
62851
  draftSessionId
63038
62852
  }) {
63039
62853
  const pivotForTemplate = enrichPivotRowFieldTypeForTemplate(
@@ -63041,16 +62855,6 @@ async function loadViaPivotTemplate({
63041
62855
  schema,
63042
62856
  baseReport
63043
62857
  );
63044
- logUseFormTaskDebug("dispatch fetchReport", {
63045
- reportId,
63046
- task: "pivot-template",
63047
- source: debugSource ?? "unknown",
63048
- runId: debugRunId ?? null,
63049
- loadRequestId: debugLoadRequestId ?? null,
63050
- filterCount: internalFilters.length,
63051
- hasPivot: Boolean(pivotForTemplate),
63052
- hasReportBuilderState: Boolean(reportBuilderState)
63053
- });
63054
62858
  const { report, error } = await fetchPivotTemplateReportForUseForm({
63055
62859
  reportId,
63056
62860
  client,
@@ -63278,19 +63082,8 @@ async function loadPivotTemplateInParallelWithReportTask({
63278
63082
  customFields,
63279
63083
  dashboardName,
63280
63084
  pivotRefreshOnly = false,
63281
- debugSource,
63282
- debugRunId,
63283
- debugLoadRequestId,
63284
63085
  draftSessionId
63285
63086
  }) {
63286
- logUseFormTaskDebug("parallel loader route", {
63287
- reportId,
63288
- source: debugSource ?? "unknown",
63289
- runId: debugRunId ?? null,
63290
- loadRequestId: debugLoadRequestId ?? null,
63291
- pivotRefreshOnly,
63292
- tasks: pivotRefreshOnly ? ["pivot-template"] : ["report", "pivot-template", "report-builder-state"]
63293
- });
63294
63087
  if (pivotRefreshOnly) {
63295
63088
  const pivotOnlyResult = await loadViaPivotTemplate({
63296
63089
  reportId,
@@ -63303,9 +63096,6 @@ async function loadPivotTemplateInParallelWithReportTask({
63303
63096
  reportBuilderState,
63304
63097
  baseReport,
63305
63098
  schema,
63306
- debugSource,
63307
- debugRunId,
63308
- debugLoadRequestId,
63309
63099
  draftSessionId
63310
63100
  });
63311
63101
  return pivotOnlyResult;
@@ -63321,9 +63111,6 @@ async function loadPivotTemplateInParallelWithReportTask({
63321
63111
  pivot,
63322
63112
  reportBuilderState,
63323
63113
  allowReportTaskBootstrap: true,
63324
- debugSource,
63325
- debugRunId,
63326
- debugLoadRequestId,
63327
63114
  draftSessionId
63328
63115
  }),
63329
63116
  loadViaPivotTemplate({
@@ -63337,9 +63124,6 @@ async function loadPivotTemplateInParallelWithReportTask({
63337
63124
  reportBuilderState,
63338
63125
  baseReport,
63339
63126
  schema,
63340
- debugSource,
63341
- debugRunId,
63342
- debugLoadRequestId,
63343
63127
  draftSessionId
63344
63128
  }),
63345
63129
  fetchReportBuilderStateByReportId({
@@ -63522,9 +63306,6 @@ async function loadReportForUseForm({
63522
63306
  customFields,
63523
63307
  dashboardName,
63524
63308
  useInMemoryEngines,
63525
- debugSource,
63526
- debugRunId,
63527
- debugLoadRequestId,
63528
63309
  draftSessionId
63529
63310
  }) {
63530
63311
  const effectivePivot = pivot ?? initialReportBuilderState?.pivot ?? void 0;
@@ -63533,18 +63314,6 @@ async function loadReportForUseForm({
63533
63314
  ...initialReportBuilderState,
63534
63315
  pivot: effectivePivot ?? initialReportBuilderState.pivot ?? null
63535
63316
  } : void 0;
63536
- logUseFormTaskDebug("resolve loader route", {
63537
- reportId,
63538
- source: debugSource ?? "unknown",
63539
- runId: debugRunId ?? null,
63540
- loadRequestId: debugLoadRequestId ?? null,
63541
- hasPivot,
63542
- hasReportBuilderState: Boolean(reportBuilderStateForLoad),
63543
- allowReportTaskBootstrap,
63544
- includeReportBuilderStateInPivotTask,
63545
- filterCount: internalFilters.length,
63546
- useInMemoryEngines
63547
- });
63548
63317
  if (hasPivot) {
63549
63318
  const pivotResult = await loadPivotTemplateInParallelWithReportTask({
63550
63319
  reportId,
@@ -63560,9 +63329,6 @@ async function loadReportForUseForm({
63560
63329
  customFields,
63561
63330
  dashboardName,
63562
63331
  pivotRefreshOnly: includeReportBuilderStateInPivotTask,
63563
- debugSource,
63564
- debugRunId,
63565
- debugLoadRequestId,
63566
63332
  draftSessionId
63567
63333
  });
63568
63334
  const pivotRows = pivotResult.report?.pivotRows;
@@ -63571,7 +63337,7 @@ async function loadReportForUseForm({
63571
63337
  const hasRowBucketKey = !rowFieldTrimmed || Array.isArray(pivotRows) && pivotRows.some(
63572
63338
  (row) => row && typeof row === "object" && Object.prototype.hasOwnProperty.call(row, rowFieldTrimmed)
63573
63339
  );
63574
- const hasMatchingPivotData = pivotResult.report && !pivotResult.error && Array.isArray(pivotRows) && pivotRows.length > 0 && hasRowBucketKey;
63340
+ const hasMatchingPivotData = pivotResult.report && !pivotResult.error && Array.isArray(pivotRows) && (pivotRows.length === 0 || hasRowBucketKey);
63575
63341
  if (hasMatchingPivotData) {
63576
63342
  return pivotResult;
63577
63343
  }
@@ -63611,25 +63377,12 @@ async function loadReportForUseForm({
63611
63377
  schema,
63612
63378
  customFields,
63613
63379
  dashboardName,
63614
- debugSource,
63615
- debugRunId,
63616
- debugLoadRequestId,
63617
63380
  draftSessionId
63618
63381
  });
63619
63382
  const normalizedBootstrapResult = bootstrapResult.report?.pivot == null ? stripPivotFromResult(bootstrapResult) : bootstrapResult;
63620
63383
  return normalizedBootstrapResult;
63621
63384
  }
63622
63385
  const shouldUseReportTaskForReload = internalFilters.length > 0;
63623
- const resolvedTask = shouldUseReportTaskForReload ? "report" : "item";
63624
- logUseFormTaskDebug("non-bootstrap task route", {
63625
- reportId,
63626
- task: resolvedTask,
63627
- source: debugSource ?? "unknown",
63628
- runId: debugRunId ?? null,
63629
- loadRequestId: debugLoadRequestId ?? null,
63630
- reason: shouldUseReportTaskForReload ? "live internal filters are present" : "no live internal filters are present",
63631
- filterCount: internalFilters.length
63632
- });
63633
63386
  return loadViaInMemoryEngines({
63634
63387
  reportId,
63635
63388
  client,
@@ -63638,9 +63391,6 @@ async function loadReportForUseForm({
63638
63391
  tenants,
63639
63392
  flags,
63640
63393
  allowReportTaskBootstrap: shouldUseReportTaskForReload,
63641
- debugSource,
63642
- debugRunId,
63643
- debugLoadRequestId,
63644
63394
  draftSessionId
63645
63395
  });
63646
63396
  }
@@ -63659,18 +63409,12 @@ async function loadReportForUseForm({
63659
63409
  function generateDraftSessionId() {
63660
63410
  return typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `draft-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
63661
63411
  }
63662
- var nextUseReportDebugRunId = 0;
63663
63412
  function useReport(reportIdArg, options = {}) {
63664
63413
  const propReportId = String(reportIdArg ?? "").trim();
63665
63414
  const [createdReportId, setCreatedReportId] = useState41(null);
63666
63415
  const effectiveReportId = propReportId || createdReportId || "";
63667
63416
  const { eventTracking } = useContext36(EventTrackingContext);
63668
63417
  const [draftSessionId, setDraftSessionId] = useState41(generateDraftSessionId);
63669
- const [taskDebugRunId] = useState41(() => {
63670
- nextUseReportDebugRunId += 1;
63671
- return nextUseReportDebugRunId;
63672
- });
63673
- const taskDebugLoadRequestIdRef = useRef25(0);
63674
63418
  const useInMemoryEngines = options.useInMemoryEngines ?? false;
63675
63419
  const restrictFieldOptionsToSelectedDatasources = options.restrictFieldOptionsToSelectedDatasources ?? true;
63676
63420
  const reportOverride = options.reportOverride ?? null;
@@ -63679,7 +63423,7 @@ function useReport(reportIdArg, options = {}) {
63679
63423
  options.destinationDashboardName ?? ""
63680
63424
  ).trim();
63681
63425
  const controlledPagination = options.state?.pagination;
63682
- const initialPaginationRef = useRef25({
63426
+ const initialPaginationRef = useRef24({
63683
63427
  ...getDefaultPaginationState(),
63684
63428
  ...options.initialState?.pagination ?? {}
63685
63429
  });
@@ -63693,15 +63437,15 @@ function useReport(reportIdArg, options = {}) {
63693
63437
  );
63694
63438
  const pagination = controlledPagination ?? internalPagination;
63695
63439
  const paginationActive = paginationInteracted || Boolean(controlledPagination);
63696
- const paginationRef = useRef25(pagination);
63440
+ const paginationRef = useRef24(pagination);
63697
63441
  paginationRef.current = pagination;
63698
- const onPaginationChangeRef = useRef25(options.onPaginationChange);
63442
+ const onPaginationChangeRef = useRef24(options.onPaginationChange);
63699
63443
  onPaginationChangeRef.current = options.onPaginationChange;
63700
- const controlledPaginationRef = useRef25(Boolean(controlledPagination));
63444
+ const controlledPaginationRef = useRef24(Boolean(controlledPagination));
63701
63445
  controlledPaginationRef.current = Boolean(controlledPagination);
63702
- const autoResetPageIndexRef = useRef25(true);
63446
+ const autoResetPageIndexRef = useRef24(true);
63703
63447
  autoResetPageIndexRef.current = options.autoResetPageIndex ?? true;
63704
- const paginationPageCountRef = useRef25(-1);
63448
+ const paginationPageCountRef = useRef24(-1);
63705
63449
  const applyPaginationUpdate = useCallback5(
63706
63450
  (updater, { activate = true } = {}) => {
63707
63451
  if (activate) {
@@ -63770,13 +63514,13 @@ function useReport(reportIdArg, options = {}) {
63770
63514
  () => setPageIndex(paginationPageCountRef.current - 1),
63771
63515
  [setPageIndex]
63772
63516
  );
63773
- const chartPivotHydratedFromSourceRef = useRef25(false);
63774
- const lastPivotHydrateCompletedSourceIdRef = useRef25(null);
63775
- const groupRowsBySetViaSetReportRef = useRef25(false);
63776
- const groupColumnsBySetViaSetReportRef = useRef25(false);
63777
- const dateBucketSetViaSetReportRef = useRef25(false);
63778
- const aggregationStateSetViaSetReportRef = useRef25(false);
63779
- const prevReportIdForChartPivotHydrationRef = useRef25(effectiveReportId);
63517
+ const chartPivotHydratedFromSourceRef = useRef24(false);
63518
+ const lastPivotHydrateCompletedSourceIdRef = useRef24(null);
63519
+ const groupRowsBySetViaSetReportRef = useRef24(false);
63520
+ const groupColumnsBySetViaSetReportRef = useRef24(false);
63521
+ const dateBucketSetViaSetReportRef = useRef24(false);
63522
+ const aggregationStateSetViaSetReportRef = useRef24(false);
63523
+ const prevReportIdForChartPivotHydrationRef = useRef24(effectiveReportId);
63780
63524
  if (prevReportIdForChartPivotHydrationRef.current !== effectiveReportId) {
63781
63525
  prevReportIdForChartPivotHydrationRef.current = effectiveReportId;
63782
63526
  chartPivotHydratedFromSourceRef.current = false;
@@ -63790,11 +63534,11 @@ function useReport(reportIdArg, options = {}) {
63790
63534
  expandReportBuilderColumnsForFlatTable,
63791
63535
  setExpandReportBuilderColumnsForFlatTable
63792
63536
  ] = useState41(false);
63793
- const prevPivotStateForColumnExpansionRef = useRef25(null);
63537
+ const prevPivotStateForColumnExpansionRef = useRef24(null);
63794
63538
  const [sourceReport, setSourceReport] = useState41(
63795
63539
  null
63796
63540
  );
63797
- const prevSourceReportIdForPivotHydrationRef = useRef25(null);
63541
+ const prevSourceReportIdForPivotHydrationRef = useRef24(null);
63798
63542
  {
63799
63543
  const currentSourceId = sourceReport ? String(
63800
63544
  sourceReport.id ?? sourceReport._id ?? ""
@@ -63809,6 +63553,9 @@ function useReport(reportIdArg, options = {}) {
63809
63553
  const [preserveSchemaWideOptions, setPreserveSchemaWideOptions] = useState41(false);
63810
63554
  const [initialSchemaScopedTableNames, setInitialSchemaScopedTableNames] = useState41(null);
63811
63555
  const [tableColumnsEditedSignature, setTableColumnsEditedSignature] = useState41(null);
63556
+ useEffect31(() => {
63557
+ setTableColumnsEditedSignature(null);
63558
+ }, [effectiveReportId]);
63812
63559
  const [chartAxisEdits, setChartAxisEdits] = useState41({});
63813
63560
  const [chartVisibilityOverrides, setChartVisibilityOverrides] = useState41({});
63814
63561
  const [client] = useContext36(ClientContext);
@@ -63880,12 +63627,10 @@ function useReport(reportIdArg, options = {}) {
63880
63627
  const dashboardNameForNewReport = useMemo32(() => {
63881
63628
  return [clientDefaultDashboardName, destinationDashboardName].map((entry) => String(entry ?? "").trim()).find((entry) => entry.length > 0) ?? "";
63882
63629
  }, [clientDefaultDashboardName, destinationDashboardName]);
63883
- const filterStackRef = useRef25(filterStack);
63630
+ const filterStackRef = useRef24(filterStack);
63884
63631
  filterStackRef.current = filterStack;
63885
63632
  const resolvedGroupRowsBy = decodePivotGroupOptionValue(groupRowsBy);
63886
63633
  const resolvedGroupColumnsBy = decodePivotGroupOptionValue(groupColumnsBy);
63887
- const useFormRefreshDebugEnabled = isUseFormRefreshDebugEnabled();
63888
- const useFormFiltersDebugEnabled = isUseFormFiltersDebugEnabled();
63889
63634
  useEffect31(() => {
63890
63635
  if (propReportId) {
63891
63636
  setCreatedReportId(null);
@@ -63895,8 +63640,8 @@ function useReport(reportIdArg, options = {}) {
63895
63640
  setChartAxisEdits({});
63896
63641
  setChartVisibilityOverrides({});
63897
63642
  }, [effectiveReportId]);
63898
- const bootstrapReportTaskUsedForReportIdRef = useRef25(null);
63899
- const schemaScopeInitializedForReportIdRef = useRef25(null);
63643
+ const bootstrapReportTaskUsedForReportIdRef = useRef24(null);
63644
+ const schemaScopeInitializedForReportIdRef = useRef24(null);
63900
63645
  const initializeSchemaScopeForReport = (report) => {
63901
63646
  if (!report) return;
63902
63647
  if (schemaScopeInitializedForReportIdRef.current === effectiveReportId)
@@ -63924,8 +63669,8 @@ function useReport(reportIdArg, options = {}) {
63924
63669
  }
63925
63670
  return schemaData.schema ?? [];
63926
63671
  }, [schemaData.schema, schemaData.schemaWithCustomFields]);
63927
- const schemaForReportBuilderStateRef = useRef25(schemaForReportBuilderState);
63928
- const customFieldsRef = useRef25(schemaData.customFields);
63672
+ const schemaForReportBuilderStateRef = useRef24(schemaForReportBuilderState);
63673
+ const customFieldsRef = useRef24(schemaData.customFields);
63929
63674
  schemaForReportBuilderStateRef.current = schemaForReportBuilderState;
63930
63675
  customFieldsRef.current = schemaData.customFields;
63931
63676
  const isBoolAggregationField = useCallback5(
@@ -64434,26 +64179,6 @@ function useReport(reportIdArg, options = {}) {
64434
64179
  const filterUniqueValuesEnabled = Boolean(
64435
64180
  client && client?.queryEndpoint && filterUniqueValuesRequest && filterUniqueValuesRequest.stringColumns.length > 0
64436
64181
  );
64437
- useEffect31(() => {
64438
- if (!useFormFiltersDebugEnabled) return;
64439
- const hasClient = Boolean(client);
64440
- const hasQueryEndpoint = Boolean(client?.queryEndpoint);
64441
- const hasRequest = Boolean(filterUniqueValuesRequest);
64442
- const stringColumnsCount = filterUniqueValuesRequest?.stringColumns.length ?? 0;
64443
- const stringColumnsByTableCount = filterUniqueValuesRequest?.stringColumnsByTable.length ?? 0;
64444
- const missingReasons = [];
64445
- if (!hasClient) missingReasons.push("missing-client");
64446
- if (!hasQueryEndpoint) missingReasons.push("missing-query-endpoint");
64447
- if (!hasRequest) missingReasons.push("missing-filterUniqueValuesRequest");
64448
- if (stringColumnsCount === 0) missingReasons.push("no-string-columns");
64449
- }, [
64450
- client,
64451
- filterUniqueValuesEnabled,
64452
- filterUniqueValuesRequest,
64453
- filterUniqueValuesRequestHash,
64454
- effectiveReportId,
64455
- useFormFiltersDebugEnabled
64456
- ]);
64457
64182
  const filterUniqueValuesQuery = useQuery({
64458
64183
  queryKey: [
64459
64184
  "useReport",
@@ -64557,22 +64282,6 @@ function useReport(reportIdArg, options = {}) {
64557
64282
  filterUniqueValuesQuery.data?.uniqueValuesByColumn,
64558
64283
  filterUniqueValuesRequest?.stringColumnsByTable
64559
64284
  ]);
64560
- useEffect31(() => {
64561
- if (!useFormFiltersDebugEnabled) return;
64562
- if (filterUniqueValuesQuery.status !== "success" && filterUniqueValuesQuery.status !== "error") {
64563
- return;
64564
- }
64565
- const uniqueValuesByColumn = filterUniqueValuesQuery.data?.uniqueValuesByColumn ?? {};
64566
- const uniqueValuesByColumnRecord = uniqueValuesByColumn && typeof uniqueValuesByColumn === "object" ? uniqueValuesByColumn : {};
64567
- }, [
64568
- backendUniqueValuesByFieldName,
64569
- filterUniqueValuesEnabled,
64570
- filterUniqueValuesQuery.data,
64571
- filterUniqueValuesQuery.status,
64572
- filterUniqueValuesRequest,
64573
- effectiveReportId,
64574
- useFormFiltersDebugEnabled
64575
- ]);
64576
64285
  const filterValueOptionsByFieldName = useMemo32(() => {
64577
64286
  const optionsByField = /* @__PURE__ */ new Map();
64578
64287
  const selectedMultiselectByField = collectSelectedStringMultiselectValuesByField(queryFilters);
@@ -64740,8 +64449,8 @@ function useReport(reportIdArg, options = {}) {
64740
64449
  queryBuilderFieldConfigByName,
64741
64450
  queryFilters
64742
64451
  ]);
64743
- const filterFieldsStableReportIdRef = useRef25("");
64744
- const filterFieldsStableCacheRef = useRef25([]);
64452
+ const filterFieldsStableReportIdRef = useRef24("");
64453
+ const filterFieldsStableCacheRef = useRef24([]);
64745
64454
  const filterFields = useMemo32(() => {
64746
64455
  const rid = String(effectiveReportId ?? "");
64747
64456
  if (filterFieldsStableReportIdRef.current !== rid) {
@@ -64973,8 +64682,6 @@ function useReport(reportIdArg, options = {}) {
64973
64682
  clientHash
64974
64683
  }),
64975
64684
  queryFn: createUseFormQueryFn(async () => {
64976
- taskDebugLoadRequestIdRef.current += 1;
64977
- const debugLoadRequestId = taskDebugLoadRequestIdRef.current;
64978
64685
  const allowReportTaskBootstrap = !initialReportBuilderState && bootstrapReportTaskUsedForReportIdRef.current !== effectiveReportId;
64979
64686
  const loadTargetId = String(effectiveReportId ?? "").trim();
64980
64687
  const sourceReportIdentity = String(
@@ -64998,9 +64705,6 @@ function useReport(reportIdArg, options = {}) {
64998
64705
  customFields: customFieldsRef.current,
64999
64706
  dashboardName: resolvedSourceDashboardName,
65000
64707
  useInMemoryEngines,
65001
- debugSource: "initial-load",
65002
- debugRunId: taskDebugRunId,
65003
- debugLoadRequestId,
65004
64708
  draftSessionId: draftSessionId || void 0
65005
64709
  });
65006
64710
  return loadResult;
@@ -65340,19 +65044,6 @@ function useReport(reportIdArg, options = {}) {
65340
65044
  resolveCache.set(fieldName, resolved);
65341
65045
  return resolved;
65342
65046
  }
65343
- if (isUseFormFiltersDebugEnabled()) {
65344
- console.error(
65345
- "[useForm-debug] normalizeQueryBuilderFieldNameForConfig ambiguous",
65346
- {
65347
- fieldName,
65348
- candidateKeys: candidates.map(([key]) => key),
65349
- preferredTableNames: Array.from(preferredTableNames),
65350
- primaryTableName,
65351
- effectiveReportBuilderTableNames,
65352
- baseReportBuilderTableNames
65353
- }
65354
- );
65355
- }
65356
65047
  return fieldName;
65357
65048
  };
65358
65049
  }, [
@@ -65630,7 +65321,7 @@ function useReport(reportIdArg, options = {}) {
65630
65321
  () => stableSerializeForQueryKey(effectiveReportBuilderState),
65631
65322
  [effectiveReportBuilderState]
65632
65323
  );
65633
- const prevPaginationResetStateHashRef = useRef25(null);
65324
+ const prevPaginationResetStateHashRef = useRef24(null);
65634
65325
  useEffect31(() => {
65635
65326
  const prevHash = prevPaginationResetStateHashRef.current;
65636
65327
  prevPaginationResetStateHashRef.current = effectiveReportBuilderStateHash;
@@ -65744,8 +65435,7 @@ function useReport(reportIdArg, options = {}) {
65744
65435
  }, [
65745
65436
  effectiveReportId,
65746
65437
  tableRefreshQuery.data,
65747
- tableRefreshQueryEnabled,
65748
- useFormRefreshDebugEnabled
65438
+ tableRefreshQueryEnabled
65749
65439
  ]);
65750
65440
  const chartTypes = useMemo32(() => {
65751
65441
  return getChartTypeOptions2({ pivot: pivotState });
@@ -66308,7 +65998,6 @@ function useReport(reportIdArg, options = {}) {
66308
65998
  ...sourceReport,
66309
65999
  reportBuilderState: effectiveReportBuilderState
66310
66000
  };
66311
- taskDebugLoadRequestIdRef.current += 1;
66312
66001
  const pivotRefreshResult = await loadReportForUseForm({
66313
66002
  reportId: effectiveReportId,
66314
66003
  initialReportBuilderState: effectiveReportBuilderState,
@@ -66324,9 +66013,6 @@ function useReport(reportIdArg, options = {}) {
66324
66013
  customFields: schemaData.customFields,
66325
66014
  dashboardName: resolvedSourceDashboardName,
66326
66015
  useInMemoryEngines,
66327
- debugSource: "pivot-refresh",
66328
- debugRunId: taskDebugRunId,
66329
- debugLoadRequestId: taskDebugLoadRequestIdRef.current,
66330
66016
  draftSessionId: draftSessionId || void 0
66331
66017
  });
66332
66018
  return pivotRefreshResult;
@@ -66490,8 +66176,7 @@ function useReport(reportIdArg, options = {}) {
66490
66176
  pivotTableDataRefreshQuery.data,
66491
66177
  pivotTableDataRefreshQuery.status,
66492
66178
  pivotTableDataRefreshQueryEnabled,
66493
- effectiveReportId,
66494
- useFormRefreshDebugEnabled
66179
+ effectiveReportId
66495
66180
  ]);
66496
66181
  useEffect31(() => {
66497
66182
  if (!pivotRefreshQueryEnabled) return;
@@ -66543,8 +66228,7 @@ function useReport(reportIdArg, options = {}) {
66543
66228
  pivotRefreshQuery.data,
66544
66229
  pivotRefreshQuery.status,
66545
66230
  pivotRefreshQueryEnabled,
66546
- effectiveReportId,
66547
- useFormRefreshDebugEnabled
66231
+ effectiveReportId
66548
66232
  ]);
66549
66233
  const chartData = useMemo32(() => {
66550
66234
  if (!sourceReport) return void 0;
@@ -66552,8 +66236,8 @@ function useReport(reportIdArg, options = {}) {
66552
66236
  const chartPivotForDisplay = nextPivot ?? (!chartPivotHydratedFromSourceRef.current ? sourceReport.pivot ?? null : null);
66553
66237
  const rowCountForChart = chartPivotForDisplay ? sourceReport.pivotRowCount ?? (Array.isArray(sourceReport.pivotRows) ? sourceReport.pivotRows.length : sourceReport.rowCount) : useInMemoryEngines ? rowsForChart.length : sourceReport.rowCount;
66554
66238
  const referencedTablesForChart = effectiveReportBuilderState?.tables.map((table2) => table2.name).filter((name2) => Boolean(name2));
66555
- const pivotRowsForChart = Array.isArray(sourceReport.pivotRows) && sourceReport.pivotRows.length > 0 ? sourceReport.pivotRows : [];
66556
- const rowCountForChartResolved = chartPivotForDisplay ? pivotRowsForChart.length > 0 ? pivotRowsForChart.length : rowCountForChart : rowCountForChart;
66239
+ const pivotRowsForChart = Array.isArray(sourceReport.pivotRows) ? sourceReport.pivotRows : void 0;
66240
+ const rowCountForChartResolved = chartPivotForDisplay ? Array.isArray(pivotRowsForChart) ? pivotRowsForChart.length : rowCountForChart : rowCountForChart;
66557
66241
  const chartDataPayload = {
66558
66242
  ...sourceReport,
66559
66243
  rows: rowsForChart,
@@ -66564,15 +66248,8 @@ function useReport(reportIdArg, options = {}) {
66564
66248
  referencedTables: referencedTablesForChart && referencedTablesForChart.length > 0 ? referencedTablesForChart : sourceReport.referencedTables,
66565
66249
  pivotRows: pivotRowsForChart,
66566
66250
  pivotColumns: sourceReport.pivotColumns,
66567
- pivotRowCount: pivotRowsForChart.length
66251
+ pivotRowCount: Array.isArray(pivotRowsForChart) ? pivotRowsForChart.length : sourceReport.pivotRowCount
66568
66252
  };
66569
- logUseFormPivotShapeDebug("chartData:memo", {
66570
- reportId: sourceReport.id,
66571
- detailRowsLength: rowsForChart.length,
66572
- pivotRowsIsArray: Array.isArray(sourceReport.pivotRows),
66573
- pivotRowsLength: Array.isArray(sourceReport.pivotRows) ? sourceReport.pivotRows.length : null,
66574
- hasNextPivot: Boolean(nextPivot)
66575
- });
66576
66253
  return chartDataPayload;
66577
66254
  }, [
66578
66255
  sourceReport,
@@ -66884,26 +66561,6 @@ function useReport(reportIdArg, options = {}) {
66884
66561
  xAxisLabel: resolvedXAxisLabel
66885
66562
  });
66886
66563
  }
66887
- logUseFormPivotShapeDebug("chart:formatting(yAxis+pivotColumns)", {
66888
- chartType: baseChart.chartType,
66889
- pivotRowField: baseChart.pivot?.rowField,
66890
- xAxisField: resolvedXAxisField,
66891
- xAxisFormat: resolvedXAxisFormat,
66892
- yAxisFieldsForDisplay: (resolvedYAxisFieldsForDisplay ?? []).map((y) => ({
66893
- field: y.field,
66894
- format: y.format,
66895
- label: y.label
66896
- })),
66897
- pivotColumnsSample: (baseChart.pivotColumns ?? []).slice(0, 12).map((c) => ({
66898
- field: c.field,
66899
- format: c.format,
66900
- label: c.label
66901
- })),
66902
- mergedColumnFormatsSample: (columns2 ?? baseChart.columns ?? []).slice(0, 12).map((c) => ({
66903
- field: c.field,
66904
- format: c.format
66905
- }))
66906
- });
66907
66564
  return {
66908
66565
  ...baseChart,
66909
66566
  xAxisField: resolvedXAxisField,
@@ -66919,6 +66576,7 @@ function useReport(reportIdArg, options = {}) {
66919
66576
  resolvedXAxisLabel,
66920
66577
  resolvedYAxisFieldsForDisplay
66921
66578
  ]);
66579
+ const pivotDateFilterRangeCacheRef = useRef24({ key: "", min: null, max: null });
66922
66580
  const filterOptions = useMemo32(() => {
66923
66581
  const out = [];
66924
66582
  for (const [field, values] of filterValueOptionsByFieldName) {
@@ -66934,25 +66592,43 @@ function useReport(reportIdArg, options = {}) {
66934
66592
  if (rowField && isDateType(String(pivot?.rowFieldType ?? ""))) {
66935
66593
  const field = pivot?.rowFieldTable ? `${pivot.rowFieldTable}.${rowField}` : rowField;
66936
66594
  const bucket = dateBucket || pivot?.dateBucket || "month";
66937
- const byRaw = /* @__PURE__ */ new Map();
66595
+ const labelsByRaw = /* @__PURE__ */ new Map();
66596
+ const cacheKey = `${String(effectiveReportId ?? "")}\0${field}\0${bucket}`;
66597
+ if (pivotDateFilterRangeCacheRef.current.key !== cacheKey) {
66598
+ pivotDateFilterRangeCacheRef.current = {
66599
+ key: cacheKey,
66600
+ min: null,
66601
+ max: null
66602
+ };
66603
+ }
66938
66604
  for (const row of chart?.rows ?? []) {
66939
66605
  const record = row;
66940
66606
  const raw = record.__quillRawDate;
66941
66607
  if (raw == null || raw === "") continue;
66942
66608
  const key = String(raw);
66943
- if (!byRaw.has(key)) {
66944
- byRaw.set(key, String(record[rowField] ?? key));
66609
+ const timestamp = new Date(key).getTime();
66610
+ if (Number.isNaN(timestamp)) continue;
66611
+ labelsByRaw.set(key, String(record[rowField] ?? key));
66612
+ const cachedMin = pivotDateFilterRangeCacheRef.current.min;
66613
+ const cachedMax = pivotDateFilterRangeCacheRef.current.max;
66614
+ if (cachedMin == null || timestamp < new Date(cachedMin).getTime()) {
66615
+ pivotDateFilterRangeCacheRef.current.min = key;
66616
+ }
66617
+ if (cachedMax == null || timestamp > new Date(cachedMax).getTime()) {
66618
+ pivotDateFilterRangeCacheRef.current.max = key;
66945
66619
  }
66946
66620
  }
66621
+ const { min: min2, max: max2 } = pivotDateFilterRangeCacheRef.current;
66622
+ const options2 = min2 && max2 ? buildPivotDateBucketStarts({ min: min2, max: max2 }, bucket).map((value) => ({
66623
+ value,
66624
+ label: labelsByRaw.get(value) ?? getDateString(value, void 0, bucket)
66625
+ })) : [];
66947
66626
  out.push({
66948
66627
  field,
66949
66628
  fieldType: "date",
66950
66629
  operator: "inBucket",
66951
66630
  dateBucket: bucket,
66952
- options: [...byRaw.keys()].sort().map((value) => ({
66953
- value,
66954
- label: byRaw.get(value) ?? value
66955
- }))
66631
+ options: options2
66956
66632
  });
66957
66633
  }
66958
66634
  return out;
@@ -66960,6 +66636,7 @@ function useReport(reportIdArg, options = {}) {
66960
66636
  chart?.pivot,
66961
66637
  chart?.rows,
66962
66638
  dateBucket,
66639
+ effectiveReportId,
66963
66640
  filterValueOptionsByFieldName
66964
66641
  ]);
66965
66642
  const chartForUi = useMemo32(() => {
@@ -67189,19 +66866,21 @@ function useReport(reportIdArg, options = {}) {
67189
66866
  xAxisOptions,
67190
66867
  yAxisOptions
67191
66868
  ]);
67192
- const tableFormatCacheRef = useRef25(/* @__PURE__ */ new Map());
66869
+ const tableFormatCacheRef = useRef24(/* @__PURE__ */ new Map());
67193
66870
  const tableFormatMerge = useMemo32(
67194
66871
  () => mergeDisplayAndSourceForTableFormats({
67195
66872
  effectiveReportBuilderTableNames,
67196
66873
  scopedSchemaColumns,
67197
66874
  displayColumns,
67198
- sourceReport
66875
+ sourceReport,
66876
+ includeSelectedSchemaFallback: tableColumnsEditedSignature !== null
67199
66877
  }),
67200
66878
  [
67201
66879
  effectiveReportBuilderTableNames,
67202
66880
  scopedSchemaColumns,
67203
66881
  displayColumns,
67204
- sourceReport
66882
+ sourceReport,
66883
+ tableColumnsEditedSignature
67205
66884
  ]
67206
66885
  );
67207
66886
  const table = useMemo32(() => {
@@ -67211,7 +66890,8 @@ function useReport(reportIdArg, options = {}) {
67211
66890
  effectiveReportBuilderTableNames,
67212
66891
  scopedSchemaColumns,
67213
66892
  displayColumns,
67214
- sourceReport
66893
+ sourceReport,
66894
+ includeSelectedSchemaFallback: tableColumnsEditedSignature !== null
67215
66895
  });
67216
66896
  const pivotRowFieldForTable = String(
67217
66897
  sourceReport?.pivot?.rowField ?? ""
@@ -67312,6 +66992,7 @@ function useReport(reportIdArg, options = {}) {
67312
66992
  resolvedYAxisFieldsForDisplay,
67313
66993
  scopedSchemaColumns,
67314
66994
  sourceReport,
66995
+ tableColumnsEditedSignature,
67315
66996
  pagination,
67316
66997
  paginationActive,
67317
66998
  paginationPageCount,
@@ -67564,7 +67245,7 @@ function useReport(reportIdArg, options = {}) {
67564
67245
  sourceReport?.columns,
67565
67246
  tableFormatMerge
67566
67247
  ]);
67567
- const tableColumnSettingsCoalesceRef = useRef25(
67248
+ const tableColumnSettingsCoalesceRef = useRef24(
67568
67249
  /* @__PURE__ */ new Map()
67569
67250
  );
67570
67251
  useLayoutEffect4(() => {
@@ -67806,6 +67487,17 @@ function useReport(reportIdArg, options = {}) {
67806
67487
  };
67807
67488
  applyReportChange = (nextState) => {
67808
67489
  const effectiveNextState = nextState;
67490
+ const normalizedRequestedDisplayColumns = effectiveNextState.columns === void 0 ? void 0 : normalizeColumnsInput(
67491
+ effectiveNextState.columns,
67492
+ columnIdentifierLookup
67493
+ );
67494
+ const visibleDisplayColumnKeys = new Set(
67495
+ activeTableColumnIds.map((id) => columnIdentifierLookup.get(id)).filter((column) => Boolean(column)).map((column) => toReportBuilderColumnKey(column)).filter(Boolean)
67496
+ );
67497
+ const addedRequestedDisplayColumns = (normalizedRequestedDisplayColumns ?? []).filter((column) => {
67498
+ const key = toReportBuilderColumnKey(column);
67499
+ return Boolean(key) && !visibleDisplayColumnKeys.has(key);
67500
+ });
67809
67501
  if (effectiveNextState.showLegend !== void 0) {
67810
67502
  setChartVisibilityOverrides((previous) => ({
67811
67503
  ...previous,
@@ -67901,7 +67593,7 @@ function useReport(reportIdArg, options = {}) {
67901
67593
  dispatchFormRuntime({
67902
67594
  type: "APPLY_SET_REPORT",
67903
67595
  touchesPivotState: dispatchTouchesPivot,
67904
- shouldRefreshExpandedTableData: shouldRefreshExpandedTableData || isDatasourceUpdate,
67596
+ shouldRefreshExpandedTableData: shouldRefreshExpandedTableData || isDatasourceUpdate || addedRequestedDisplayColumns.length > 0,
67905
67597
  queuePromoteColumnToRow,
67906
67598
  updater: (prev) => {
67907
67599
  const next = {
@@ -67967,19 +67659,8 @@ function useReport(reportIdArg, options = {}) {
67967
67659
  }
67968
67660
  }
67969
67661
  if (effectiveNextState.columns !== void 0) {
67970
- const normalizedDisplayColumns = normalizeColumnsInput(
67971
- effectiveNextState.columns,
67972
- columnIdentifierLookup
67973
- );
67974
- const previousDisplayColumnKeys = new Set(
67975
- next.columns.map((column) => toReportBuilderColumnKey(column)).filter(Boolean)
67976
- );
67977
- const addedDisplayColumns = normalizedDisplayColumns.filter(
67978
- (column) => {
67979
- const key = toReportBuilderColumnKey(column);
67980
- return Boolean(key) && !previousDisplayColumnKeys.has(key);
67981
- }
67982
- );
67662
+ const normalizedDisplayColumns = normalizedRequestedDisplayColumns ?? [];
67663
+ const addedDisplayColumns = addedRequestedDisplayColumns;
67983
67664
  next.columns = normalizedDisplayColumns;
67984
67665
  if (addedDisplayColumns.length > 0) {
67985
67666
  const queryTableNames = new Set(
@@ -68382,6 +68063,7 @@ function useReport(reportIdArg, options = {}) {
68382
68063
  } catch (error) {
68383
68064
  console.error("[useForm] setFilters swallowed error", {
68384
68065
  error: error instanceof Error ? error.message : String(error),
68066
+ stack: error instanceof Error ? error.stack : void 0,
68385
68067
  requestedRules: (resolved?.rules ?? []).map((rule) => ({
68386
68068
  table: rule?.table,
68387
68069
  field: rule?.field,
@@ -68882,9 +68564,9 @@ function Chat({
68882
68564
  const [inputError, setInputError] = useState42("");
68883
68565
  const [isLoading, setIsLoading] = useState42(false);
68884
68566
  const [model, setModel] = useState42("gemini-3-flash-preview");
68885
- const containerRef = useRef26(null);
68886
- const textareaRef = useRef26(null);
68887
- const abortControllerRef = useRef26(null);
68567
+ const containerRef = useRef25(null);
68568
+ const textareaRef = useRef25(null);
68569
+ const abortControllerRef = useRef25(null);
68888
68570
  useEffect32(() => {
68889
68571
  if (!containerRef.current) {
68890
68572
  return;
@@ -69319,7 +69001,7 @@ function Chat({
69319
69001
  }
69320
69002
 
69321
69003
  // src/hooks/useReportFilterDraft.ts
69322
- import { useCallback as useCallback6, useMemo as useMemo34, useRef as useRef27, useState as useState43 } from "react";
69004
+ import { useCallback as useCallback6, useMemo as useMemo34, useRef as useRef26, useState as useState43 } from "react";
69323
69005
  var normalizeOperatorKey = (operator) => String(operator ?? "").trim().toLowerCase().replace(/[_\s]+/g, "");
69324
69006
  var defaultFilterRuleValueForOperator = (operator) => {
69325
69007
  const key = normalizeOperatorKey(operator);
@@ -69358,12 +69040,12 @@ function useReportFilterDraft(args) {
69358
69040
  const committed = queryBuilderFiltersForEditor(
69359
69041
  isQueryBuilderDisplayGroup(committedFilters) ? committedFilters : EMPTY_COMMITTED_FILTERS
69360
69042
  );
69361
- const committedRef = useRef27(committed);
69043
+ const committedRef = useRef26(committed);
69362
69044
  committedRef.current = committed;
69363
- const setFiltersRef = useRef27(setFilters);
69045
+ const setFiltersRef = useRef26(setFilters);
69364
69046
  setFiltersRef.current = setFilters;
69365
- const lastNonEmptyFieldsRef = useRef27([]);
69366
- const prevReportIdForFieldsRef = useRef27(reportId);
69047
+ const lastNonEmptyFieldsRef = useRef26([]);
69048
+ const prevReportIdForFieldsRef = useRef26(reportId);
69367
69049
  if (prevReportIdForFieldsRef.current !== reportId) {
69368
69050
  prevReportIdForFieldsRef.current = reportId;
69369
69051
  lastNonEmptyFieldsRef.current = [];
@@ -69385,7 +69067,7 @@ function useReportFilterDraft(args) {
69385
69067
  const [draftQuery, setDraftQuery] = useState43(committed);
69386
69068
  const [hasUnappliedFilterChanges, setHasUnappliedFilterChanges] = useState43(false);
69387
69069
  const draftResetKey = `${reportId}|${committedSignature}|${resetEpoch}`;
69388
- const prevDraftResetKeyRef = useRef27(draftResetKey);
69070
+ const prevDraftResetKeyRef = useRef26(draftResetKey);
69389
69071
  if (prevDraftResetKeyRef.current !== draftResetKey) {
69390
69072
  prevDraftResetKeyRef.current = draftResetKey;
69391
69073
  setDraftQuery(committed);
@@ -69478,7 +69160,7 @@ function useReportQueryBuilder(args) {
69478
69160
  import {
69479
69161
  useContext as useContext38,
69480
69162
  useLayoutEffect as useLayoutEffect5,
69481
- useRef as useRef28,
69163
+ useRef as useRef27,
69482
69164
  useState as useState44
69483
69165
  } from "react";
69484
69166
  import { jsx as jsx89, jsxs as jsxs66 } from "react/jsx-runtime";
@@ -69579,7 +69261,7 @@ function ReportDetail({
69579
69261
  const isTableChart = type === "table";
69580
69262
  const useDetailTableFromUseForm = isTableChart && !isPivotTableChartConfig(chart);
69581
69263
  const showBottomRawTable = !isTableChart;
69582
- const chartSlotRef = useRef28(null);
69264
+ const chartSlotRef = useRef27(null);
69583
69265
  const [chartHeightPx, setChartHeightPx] = useState44(360);
69584
69266
  useLayoutEffect5(() => {
69585
69267
  const el = chartSlotRef.current;