@quillsql/react 2.10.31 → 2.10.32

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 (607) hide show
  1. package/dist/cjs/BarList.d.ts +22 -0
  2. package/dist/cjs/BarList.d.ts.map +1 -0
  3. package/dist/cjs/BarList.js +286 -0
  4. package/dist/cjs/Chart.d.ts +42 -0
  5. package/dist/cjs/Chart.d.ts.map +1 -0
  6. package/dist/cjs/Chart.js +360 -0
  7. package/dist/cjs/ChartBuilder.d.ts +46 -0
  8. package/dist/cjs/ChartBuilder.d.ts.map +1 -0
  9. package/dist/cjs/ChartBuilder.js +708 -0
  10. package/dist/cjs/ChartEditor.d.ts +27 -0
  11. package/dist/cjs/ChartEditor.d.ts.map +1 -0
  12. package/dist/cjs/ChartEditor.js +78 -0
  13. package/dist/cjs/Context.d.ts +36 -0
  14. package/dist/cjs/Context.d.ts.map +1 -0
  15. package/dist/cjs/Context.js +230 -0
  16. package/dist/cjs/Dashboard.d.ts +178 -0
  17. package/dist/cjs/Dashboard.d.ts.map +1 -0
  18. package/dist/cjs/Dashboard.js +498 -0
  19. package/dist/cjs/DateRangePicker/Calendar.d.ts +17 -0
  20. package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -0
  21. package/dist/cjs/DateRangePicker/Calendar.js +171 -0
  22. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts +39 -0
  23. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -0
  24. package/dist/cjs/DateRangePicker/DateRangePicker.js +150 -0
  25. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +23 -0
  26. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -0
  27. package/dist/cjs/DateRangePicker/DateRangePickerButton.js +138 -0
  28. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +3 -0
  29. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  30. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +260 -0
  31. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +80 -0
  32. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  33. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +549 -0
  34. package/dist/cjs/DateRangePicker/index.d.ts +3 -0
  35. package/dist/cjs/DateRangePicker/index.d.ts.map +1 -0
  36. package/dist/cjs/DateRangePicker/index.js +9 -0
  37. package/dist/cjs/PieChart.d.ts +59 -0
  38. package/dist/cjs/PieChart.d.ts.map +1 -0
  39. package/dist/cjs/PieChart.js +567 -0
  40. package/dist/cjs/QuillProvider.d.ts +58 -0
  41. package/dist/cjs/QuillProvider.d.ts.map +1 -0
  42. package/dist/cjs/QuillProvider.js +34 -0
  43. package/dist/cjs/ReportBuilder.d.ts +41 -0
  44. package/dist/cjs/ReportBuilder.d.ts.map +1 -0
  45. package/dist/cjs/ReportBuilder.js +1004 -0
  46. package/dist/cjs/SQLEditor.d.ts +54 -0
  47. package/dist/cjs/SQLEditor.d.ts.map +1 -0
  48. package/dist/cjs/SQLEditor.js +509 -0
  49. package/dist/cjs/Table.d.ts +26 -0
  50. package/dist/cjs/Table.d.ts.map +1 -0
  51. package/dist/cjs/Table.js +94 -0
  52. package/dist/cjs/TableChart.d.ts +15 -0
  53. package/dist/cjs/TableChart.d.ts.map +1 -0
  54. package/dist/cjs/TableChart.js +317 -0
  55. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts +5 -0
  56. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -0
  57. package/dist/cjs/assets/ArrowDownHeadIcon.js +5 -0
  58. package/dist/cjs/assets/ArrowDownIcon.d.ts +5 -0
  59. package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -0
  60. package/dist/cjs/assets/ArrowDownIcon.js +5 -0
  61. package/dist/cjs/assets/ArrowDownRightIcon.d.ts +5 -0
  62. package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -0
  63. package/dist/cjs/assets/ArrowDownRightIcon.js +5 -0
  64. package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts +5 -0
  65. package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -0
  66. package/dist/cjs/assets/ArrowLeftHeadIcon.js +5 -0
  67. package/dist/cjs/assets/ArrowRightHeadIcon.d.ts +5 -0
  68. package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -0
  69. package/dist/cjs/assets/ArrowRightHeadIcon.js +5 -0
  70. package/dist/cjs/assets/ArrowRightIcon.d.ts +5 -0
  71. package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -0
  72. package/dist/cjs/assets/ArrowRightIcon.js +5 -0
  73. package/dist/cjs/assets/ArrowUpHeadIcon.d.ts +5 -0
  74. package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -0
  75. package/dist/cjs/assets/ArrowUpHeadIcon.js +5 -0
  76. package/dist/cjs/assets/ArrowUpIcon.d.ts +5 -0
  77. package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -0
  78. package/dist/cjs/assets/ArrowUpIcon.js +5 -0
  79. package/dist/cjs/assets/ArrowUpRightIcon.d.ts +5 -0
  80. package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -0
  81. package/dist/cjs/assets/ArrowUpRightIcon.js +5 -0
  82. package/dist/cjs/assets/CalendarIcon.d.ts +5 -0
  83. package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -0
  84. package/dist/cjs/assets/CalendarIcon.js +5 -0
  85. package/dist/cjs/assets/CalendarNormalIcon.d.ts +5 -0
  86. package/dist/cjs/assets/CalendarNormalIcon.d.ts.map +1 -0
  87. package/dist/cjs/assets/CalendarNormalIcon.js +5 -0
  88. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts +5 -0
  89. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -0
  90. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.js +5 -0
  91. package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts +5 -0
  92. package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -0
  93. package/dist/cjs/assets/DoubleArrowRightHeadIcon.js +5 -0
  94. package/dist/cjs/assets/ExclamationFilledIcon.d.ts +5 -0
  95. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -0
  96. package/dist/cjs/assets/ExclamationFilledIcon.js +5 -0
  97. package/dist/cjs/assets/FilterIcon.d.ts +5 -0
  98. package/dist/cjs/assets/FilterIcon.d.ts.map +1 -0
  99. package/dist/cjs/assets/FilterIcon.js +5 -0
  100. package/dist/cjs/assets/LoadingSpinner.d.ts +5 -0
  101. package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -0
  102. package/dist/cjs/assets/LoadingSpinner.js +5 -0
  103. package/dist/cjs/assets/RefreshIcon.d.ts +5 -0
  104. package/dist/cjs/assets/RefreshIcon.d.ts.map +1 -0
  105. package/dist/cjs/assets/RefreshIcon.js +5 -0
  106. package/dist/cjs/assets/SearchIcon.d.ts +5 -0
  107. package/dist/cjs/assets/SearchIcon.d.ts.map +1 -0
  108. package/dist/cjs/assets/SearchIcon.js +5 -0
  109. package/dist/cjs/assets/UpLeftArrowsIcon.d.ts +5 -0
  110. package/dist/cjs/assets/UpLeftArrowsIcon.d.ts.map +1 -0
  111. package/dist/cjs/assets/UpLeftArrowsIcon.js +5 -0
  112. package/dist/cjs/assets/XCircleIcon.d.ts +5 -0
  113. package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -0
  114. package/dist/cjs/assets/XCircleIcon.js +5 -0
  115. package/dist/cjs/assets/XIcon.d.ts +5 -0
  116. package/dist/cjs/assets/XIcon.d.ts.map +1 -0
  117. package/dist/cjs/assets/XIcon.js +5 -0
  118. package/dist/cjs/assets/index.d.ts +22 -0
  119. package/dist/cjs/assets/index.d.ts.map +1 -0
  120. package/dist/cjs/assets/index.js +48 -0
  121. package/dist/cjs/components/Banner/index.d.ts +3 -0
  122. package/dist/cjs/components/Banner/index.d.ts.map +1 -0
  123. package/dist/cjs/components/Banner/index.js +27 -0
  124. package/dist/cjs/components/BigModal/BigModal.d.ts +15 -0
  125. package/dist/cjs/components/BigModal/BigModal.d.ts.map +1 -0
  126. package/dist/cjs/components/BigModal/BigModal.js +87 -0
  127. package/dist/cjs/components/Chart/BarChart.d.ts +18 -0
  128. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -0
  129. package/dist/cjs/components/Chart/BarChart.js +81 -0
  130. package/dist/cjs/components/Chart/ChartError.d.ts +3 -0
  131. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -0
  132. package/dist/cjs/components/Chart/ChartError.js +29 -0
  133. package/dist/cjs/components/Chart/ChartSkeleton.d.ts +6 -0
  134. package/dist/cjs/components/Chart/ChartSkeleton.d.ts.map +1 -0
  135. package/dist/cjs/components/Chart/ChartSkeleton.js +20 -0
  136. package/dist/cjs/components/Chart/ChartTooltip.d.ts +29 -0
  137. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -0
  138. package/dist/cjs/components/Chart/ChartTooltip.js +235 -0
  139. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts +6 -0
  140. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts.map +1 -0
  141. package/dist/cjs/components/Chart/ChartTooltipFrame.js +16 -0
  142. package/dist/cjs/components/Chart/ChartTooltipGroup.d.ts +11 -0
  143. package/dist/cjs/components/Chart/ChartTooltipGroup.d.ts.map +1 -0
  144. package/dist/cjs/components/Chart/ChartTooltipGroup.js +29 -0
  145. package/dist/cjs/components/Chart/ChartTooltipRow.d.ts +8 -0
  146. package/dist/cjs/components/Chart/ChartTooltipRow.d.ts.map +1 -0
  147. package/dist/cjs/components/Chart/ChartTooltipRow.js +44 -0
  148. package/dist/cjs/components/Chart/LineChart.d.ts +16 -0
  149. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -0
  150. package/dist/cjs/components/Chart/LineChart.js +97 -0
  151. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +3 -0
  152. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -0
  153. package/dist/cjs/components/Dashboard/ChartComponent.js +64 -0
  154. package/dist/cjs/components/Dashboard/DashboardSection.d.ts +3 -0
  155. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -0
  156. package/dist/cjs/components/Dashboard/DashboardSection.js +17 -0
  157. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts +3 -0
  158. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -0
  159. package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +13 -0
  160. package/dist/cjs/components/Dashboard/DataLoader.d.ts +3 -0
  161. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -0
  162. package/dist/cjs/components/Dashboard/DataLoader.js +74 -0
  163. package/dist/cjs/components/Dashboard/MetricComponent.d.ts +3 -0
  164. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -0
  165. package/dist/cjs/components/Dashboard/MetricComponent.js +65 -0
  166. package/dist/cjs/components/Dashboard/TableComponent.d.ts +3 -0
  167. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -0
  168. package/dist/cjs/components/Dashboard/TableComponent.js +35 -0
  169. package/dist/cjs/components/Dropdown/Dropdown.d.ts +14 -0
  170. package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -0
  171. package/dist/cjs/components/Dropdown/Dropdown.js +99 -0
  172. package/dist/cjs/components/Dropdown/DropdownItem.d.ts +11 -0
  173. package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -0
  174. package/dist/cjs/components/Dropdown/DropdownItem.js +67 -0
  175. package/dist/cjs/components/Dropdown/index.d.ts +3 -0
  176. package/dist/cjs/components/Dropdown/index.d.ts.map +1 -0
  177. package/dist/cjs/components/Dropdown/index.js +10 -0
  178. package/dist/cjs/components/Modal/Modal.d.ts +15 -0
  179. package/dist/cjs/components/Modal/Modal.d.ts.map +1 -0
  180. package/dist/cjs/components/Modal/Modal.js +90 -0
  181. package/dist/cjs/components/Modal/index.d.ts +2 -0
  182. package/dist/cjs/components/Modal/index.d.ts.map +1 -0
  183. package/dist/cjs/components/Modal/index.js +8 -0
  184. package/dist/cjs/components/QuillCard.d.ts +14 -0
  185. package/dist/cjs/components/QuillCard.d.ts.map +1 -0
  186. package/dist/cjs/components/QuillCard.js +56 -0
  187. package/dist/cjs/components/QuillSelect.d.ts +3 -0
  188. package/dist/cjs/components/QuillSelect.d.ts.map +1 -0
  189. package/dist/cjs/components/QuillSelect.js +128 -0
  190. package/dist/cjs/components/QuillTable.d.ts +3 -0
  191. package/dist/cjs/components/QuillTable.d.ts.map +1 -0
  192. package/dist/cjs/components/QuillTable.js +259 -0
  193. package/dist/cjs/components/UiComponents.d.ts +130 -0
  194. package/dist/cjs/components/UiComponents.d.ts.map +1 -0
  195. package/dist/cjs/components/UiComponents.js +262 -0
  196. package/dist/cjs/components/selectUtils.d.ts +10 -0
  197. package/dist/cjs/components/selectUtils.d.ts.map +1 -0
  198. package/dist/cjs/components/selectUtils.js +47 -0
  199. package/dist/cjs/contexts/BaseColorContext.d.ts +4 -0
  200. package/dist/cjs/contexts/BaseColorContext.d.ts.map +1 -0
  201. package/dist/cjs/contexts/BaseColorContext.js +5 -0
  202. package/dist/cjs/contexts/HoveredValueContext.d.ts +8 -0
  203. package/dist/cjs/contexts/HoveredValueContext.d.ts.map +1 -0
  204. package/dist/cjs/contexts/HoveredValueContext.js +7 -0
  205. package/dist/cjs/contexts/RootStylesContext.d.ts +4 -0
  206. package/dist/cjs/contexts/RootStylesContext.d.ts.map +1 -0
  207. package/dist/cjs/contexts/RootStylesContext.js +5 -0
  208. package/dist/cjs/contexts/SelectedValueContext.d.ts +8 -0
  209. package/dist/cjs/contexts/SelectedValueContext.d.ts.map +1 -0
  210. package/dist/cjs/contexts/SelectedValueContext.js +8 -0
  211. package/dist/cjs/contexts/index.d.ts +5 -0
  212. package/dist/cjs/contexts/index.d.ts.map +1 -0
  213. package/dist/cjs/contexts/index.js +14 -0
  214. package/dist/cjs/hooks/index.d.ts +5 -0
  215. package/dist/cjs/hooks/index.d.ts.map +1 -0
  216. package/dist/cjs/hooks/index.js +14 -0
  217. package/dist/cjs/hooks/useDashboard.d.ts +7 -0
  218. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -0
  219. package/dist/cjs/hooks/useDashboard.js +54 -0
  220. package/dist/cjs/hooks/useExport.d.ts +15 -0
  221. package/dist/cjs/hooks/useExport.d.ts.map +1 -0
  222. package/dist/cjs/hooks/useExport.js +31 -0
  223. package/dist/cjs/hooks/useFormat.d.ts +6 -0
  224. package/dist/cjs/hooks/useFormat.d.ts.map +1 -0
  225. package/dist/cjs/hooks/useFormat.js +25 -0
  226. package/dist/cjs/hooks/useInternalState.d.ts +4 -0
  227. package/dist/cjs/hooks/useInternalState.d.ts.map +1 -0
  228. package/dist/cjs/hooks/useInternalState.js +16 -0
  229. package/dist/cjs/hooks/useOnClickOutside.d.ts +3 -0
  230. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -0
  231. package/dist/cjs/hooks/useOnClickOutside.js +20 -0
  232. package/dist/cjs/hooks/useOnWindowResize.d.ts +5 -0
  233. package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -0
  234. package/dist/cjs/hooks/useOnWindowResize.js +16 -0
  235. package/dist/cjs/hooks/useQuill.d.ts +46 -0
  236. package/dist/cjs/hooks/useQuill.d.ts.map +1 -0
  237. package/dist/cjs/hooks/useQuill.js +94 -0
  238. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts +3 -0
  239. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -0
  240. package/dist/cjs/hooks/useSelectOnKeyDown.js +65 -0
  241. package/dist/cjs/index.d.ts +19 -0
  242. package/dist/cjs/index.d.ts.map +1 -0
  243. package/dist/cjs/index.js +38 -0
  244. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +34 -0
  245. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -0
  246. package/dist/cjs/internals/ReportBuilder/PivotList.js +61 -0
  247. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +62 -0
  248. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -0
  249. package/dist/cjs/internals/ReportBuilder/PivotModal.js +916 -0
  250. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +2 -0
  251. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +1 -0
  252. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +213 -0
  253. package/dist/cjs/lib/font.d.ts +14 -0
  254. package/dist/cjs/lib/font.d.ts.map +1 -0
  255. package/dist/cjs/lib/font.js +16 -0
  256. package/dist/cjs/lib/index.d.ts +4 -0
  257. package/dist/cjs/lib/index.d.ts.map +1 -0
  258. package/dist/cjs/lib/index.js +19 -0
  259. package/dist/cjs/lib/inputTypes.d.ts +21 -0
  260. package/dist/cjs/lib/inputTypes.d.ts.map +1 -0
  261. package/dist/cjs/lib/inputTypes.js +56 -0
  262. package/dist/cjs/lib/utils.d.ts +10 -0
  263. package/dist/cjs/lib/utils.d.ts.map +1 -0
  264. package/dist/cjs/lib/utils.js +45 -0
  265. package/dist/cjs/utils/aggregate.d.ts +4 -0
  266. package/dist/cjs/utils/aggregate.d.ts.map +1 -0
  267. package/dist/cjs/utils/aggregate.js +429 -0
  268. package/dist/cjs/utils/axisFormatter.d.ts +20 -0
  269. package/dist/cjs/utils/axisFormatter.d.ts.map +1 -0
  270. package/dist/cjs/utils/axisFormatter.js +194 -0
  271. package/dist/cjs/utils/color.d.ts +13 -0
  272. package/dist/cjs/utils/color.d.ts.map +1 -0
  273. package/dist/cjs/utils/color.js +251 -0
  274. package/dist/cjs/utils/crypto.d.ts +2 -0
  275. package/dist/cjs/utils/crypto.d.ts.map +1 -0
  276. package/dist/cjs/utils/crypto.js +10 -0
  277. package/dist/cjs/utils/csv.d.ts +6 -0
  278. package/dist/cjs/utils/csv.d.ts.map +1 -0
  279. package/dist/cjs/utils/csv.js +80 -0
  280. package/dist/cjs/utils/dashboard.d.ts +12 -0
  281. package/dist/cjs/utils/dashboard.d.ts.map +1 -0
  282. package/dist/cjs/utils/dashboard.js +174 -0
  283. package/dist/cjs/utils/dataFetcher.d.ts +3 -0
  284. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -0
  285. package/dist/cjs/utils/dataFetcher.js +81 -0
  286. package/dist/cjs/utils/dates.d.ts +10 -0
  287. package/dist/cjs/utils/dates.d.ts.map +1 -0
  288. package/dist/cjs/utils/dates.js +37 -0
  289. package/dist/cjs/utils/getDomain.d.ts +8 -0
  290. package/dist/cjs/utils/getDomain.d.ts.map +1 -0
  291. package/dist/cjs/utils/getDomain.js +31 -0
  292. package/dist/cjs/utils/merge.d.ts +2 -0
  293. package/dist/cjs/utils/merge.d.ts.map +1 -0
  294. package/dist/cjs/utils/merge.js +49 -0
  295. package/dist/cjs/utils/styles.d.ts +17 -0
  296. package/dist/cjs/utils/styles.d.ts.map +1 -0
  297. package/dist/cjs/utils/styles.js +20 -0
  298. package/dist/cjs/utils/valueFormatter.d.ts +27 -0
  299. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -0
  300. package/dist/cjs/utils/valueFormatter.js +252 -0
  301. package/dist/cjs/utils/valueFormatterCSV.d.ts +17 -0
  302. package/dist/cjs/utils/valueFormatterCSV.d.ts.map +1 -0
  303. package/dist/cjs/utils/valueFormatterCSV.js +99 -0
  304. package/dist/esm/BarList.d.ts +22 -0
  305. package/dist/esm/BarList.d.ts.map +1 -0
  306. package/dist/esm/BarList.js +279 -0
  307. package/dist/esm/Chart.d.ts +42 -0
  308. package/dist/esm/Chart.d.ts.map +1 -0
  309. package/dist/esm/Chart.js +353 -0
  310. package/dist/esm/ChartBuilder.d.ts +46 -0
  311. package/dist/esm/ChartBuilder.d.ts.map +1 -0
  312. package/dist/esm/ChartBuilder.js +700 -0
  313. package/dist/esm/ChartEditor.d.ts +27 -0
  314. package/dist/esm/ChartEditor.d.ts.map +1 -0
  315. package/dist/esm/ChartEditor.js +72 -0
  316. package/dist/esm/Context.d.ts +36 -0
  317. package/dist/esm/Context.d.ts.map +1 -0
  318. package/dist/esm/Context.js +223 -0
  319. package/dist/esm/Dashboard.d.ts +178 -0
  320. package/dist/esm/Dashboard.d.ts.map +1 -0
  321. package/dist/esm/Dashboard.js +490 -0
  322. package/dist/esm/DateRangePicker/Calendar.d.ts +17 -0
  323. package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -0
  324. package/dist/esm/DateRangePicker/Calendar.js +167 -0
  325. package/dist/esm/DateRangePicker/DateRangePicker.d.ts +39 -0
  326. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -0
  327. package/dist/esm/DateRangePicker/DateRangePicker.js +122 -0
  328. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +23 -0
  329. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -0
  330. package/dist/esm/DateRangePicker/DateRangePickerButton.js +136 -0
  331. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +3 -0
  332. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  333. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +256 -0
  334. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +80 -0
  335. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  336. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +535 -0
  337. package/dist/esm/DateRangePicker/index.d.ts +3 -0
  338. package/dist/esm/DateRangePicker/index.d.ts.map +1 -0
  339. package/dist/esm/DateRangePicker/index.js +2 -0
  340. package/dist/esm/PieChart.d.ts +59 -0
  341. package/dist/esm/PieChart.d.ts.map +1 -0
  342. package/dist/esm/PieChart.js +533 -0
  343. package/dist/esm/QuillProvider.d.ts +58 -0
  344. package/dist/esm/QuillProvider.d.ts.map +1 -0
  345. package/dist/esm/QuillProvider.js +31 -0
  346. package/dist/esm/ReportBuilder.d.ts +41 -0
  347. package/dist/esm/ReportBuilder.d.ts.map +1 -0
  348. package/dist/esm/ReportBuilder.js +996 -0
  349. package/dist/esm/SQLEditor.d.ts +54 -0
  350. package/dist/esm/SQLEditor.d.ts.map +1 -0
  351. package/dist/esm/SQLEditor.js +500 -0
  352. package/dist/esm/Table.d.ts +26 -0
  353. package/dist/esm/Table.d.ts.map +1 -0
  354. package/dist/esm/Table.js +89 -0
  355. package/dist/esm/TableChart.d.ts +15 -0
  356. package/dist/esm/TableChart.d.ts.map +1 -0
  357. package/dist/esm/TableChart.js +290 -0
  358. package/dist/esm/assets/ArrowDownHeadIcon.d.ts +5 -0
  359. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -0
  360. package/dist/esm/assets/ArrowDownHeadIcon.js +3 -0
  361. package/dist/esm/assets/ArrowDownIcon.d.ts +5 -0
  362. package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -0
  363. package/dist/esm/assets/ArrowDownIcon.js +3 -0
  364. package/dist/esm/assets/ArrowDownRightIcon.d.ts +5 -0
  365. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -0
  366. package/dist/esm/assets/ArrowDownRightIcon.js +3 -0
  367. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts +5 -0
  368. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -0
  369. package/dist/esm/assets/ArrowLeftHeadIcon.js +3 -0
  370. package/dist/esm/assets/ArrowRightHeadIcon.d.ts +5 -0
  371. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -0
  372. package/dist/esm/assets/ArrowRightHeadIcon.js +3 -0
  373. package/dist/esm/assets/ArrowRightIcon.d.ts +5 -0
  374. package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -0
  375. package/dist/esm/assets/ArrowRightIcon.js +3 -0
  376. package/dist/esm/assets/ArrowUpHeadIcon.d.ts +5 -0
  377. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -0
  378. package/dist/esm/assets/ArrowUpHeadIcon.js +3 -0
  379. package/dist/esm/assets/ArrowUpIcon.d.ts +5 -0
  380. package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -0
  381. package/dist/esm/assets/ArrowUpIcon.js +3 -0
  382. package/dist/esm/assets/ArrowUpRightIcon.d.ts +5 -0
  383. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -0
  384. package/dist/esm/assets/ArrowUpRightIcon.js +3 -0
  385. package/dist/esm/assets/CalendarIcon.d.ts +5 -0
  386. package/dist/esm/assets/CalendarIcon.d.ts.map +1 -0
  387. package/dist/esm/assets/CalendarIcon.js +3 -0
  388. package/dist/esm/assets/CalendarNormalIcon.d.ts +5 -0
  389. package/dist/esm/assets/CalendarNormalIcon.d.ts.map +1 -0
  390. package/dist/esm/assets/CalendarNormalIcon.js +3 -0
  391. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts +5 -0
  392. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -0
  393. package/dist/esm/assets/DoubleArrowLeftHeadIcon.js +3 -0
  394. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts +5 -0
  395. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -0
  396. package/dist/esm/assets/DoubleArrowRightHeadIcon.js +3 -0
  397. package/dist/esm/assets/ExclamationFilledIcon.d.ts +5 -0
  398. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -0
  399. package/dist/esm/assets/ExclamationFilledIcon.js +3 -0
  400. package/dist/esm/assets/FilterIcon.d.ts +5 -0
  401. package/dist/esm/assets/FilterIcon.d.ts.map +1 -0
  402. package/dist/esm/assets/FilterIcon.js +3 -0
  403. package/dist/esm/assets/LoadingSpinner.d.ts +5 -0
  404. package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -0
  405. package/dist/esm/assets/LoadingSpinner.js +3 -0
  406. package/dist/esm/assets/RefreshIcon.d.ts +5 -0
  407. package/dist/esm/assets/RefreshIcon.d.ts.map +1 -0
  408. package/dist/esm/assets/RefreshIcon.js +3 -0
  409. package/dist/esm/assets/SearchIcon.d.ts +5 -0
  410. package/dist/esm/assets/SearchIcon.d.ts.map +1 -0
  411. package/dist/esm/assets/SearchIcon.js +3 -0
  412. package/dist/esm/assets/UpLeftArrowsIcon.d.ts +5 -0
  413. package/dist/esm/assets/UpLeftArrowsIcon.d.ts.map +1 -0
  414. package/dist/esm/assets/UpLeftArrowsIcon.js +3 -0
  415. package/dist/esm/assets/XCircleIcon.d.ts +5 -0
  416. package/dist/esm/assets/XCircleIcon.d.ts.map +1 -0
  417. package/dist/esm/assets/XCircleIcon.js +3 -0
  418. package/dist/esm/assets/XIcon.d.ts +5 -0
  419. package/dist/esm/assets/XIcon.d.ts.map +1 -0
  420. package/dist/esm/assets/XIcon.js +3 -0
  421. package/dist/esm/assets/index.d.ts +22 -0
  422. package/dist/esm/assets/index.d.ts.map +1 -0
  423. package/dist/esm/assets/index.js +21 -0
  424. package/dist/esm/components/Banner/index.d.ts +3 -0
  425. package/dist/esm/components/Banner/index.d.ts.map +1 -0
  426. package/dist/esm/components/Banner/index.js +24 -0
  427. package/dist/esm/components/BigModal/BigModal.d.ts +15 -0
  428. package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -0
  429. package/dist/esm/components/BigModal/BigModal.js +62 -0
  430. package/dist/esm/components/Chart/BarChart.d.ts +18 -0
  431. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -0
  432. package/dist/esm/components/Chart/BarChart.js +75 -0
  433. package/dist/esm/components/Chart/ChartError.d.ts +3 -0
  434. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -0
  435. package/dist/esm/components/Chart/ChartError.js +26 -0
  436. package/dist/esm/components/Chart/ChartSkeleton.d.ts +6 -0
  437. package/dist/esm/components/Chart/ChartSkeleton.d.ts.map +1 -0
  438. package/dist/esm/components/Chart/ChartSkeleton.js +17 -0
  439. package/dist/esm/components/Chart/ChartTooltip.d.ts +29 -0
  440. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -0
  441. package/dist/esm/components/Chart/ChartTooltip.js +229 -0
  442. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts +6 -0
  443. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +1 -0
  444. package/dist/esm/components/Chart/ChartTooltipFrame.js +13 -0
  445. package/dist/esm/components/Chart/ChartTooltipGroup.d.ts +11 -0
  446. package/dist/esm/components/Chart/ChartTooltipGroup.d.ts.map +1 -0
  447. package/dist/esm/components/Chart/ChartTooltipGroup.js +23 -0
  448. package/dist/esm/components/Chart/ChartTooltipRow.d.ts +8 -0
  449. package/dist/esm/components/Chart/ChartTooltipRow.d.ts.map +1 -0
  450. package/dist/esm/components/Chart/ChartTooltipRow.js +41 -0
  451. package/dist/esm/components/Chart/LineChart.d.ts +16 -0
  452. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -0
  453. package/dist/esm/components/Chart/LineChart.js +91 -0
  454. package/dist/esm/components/Dashboard/ChartComponent.d.ts +3 -0
  455. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -0
  456. package/dist/esm/components/Dashboard/ChartComponent.js +61 -0
  457. package/dist/esm/components/Dashboard/DashboardSection.d.ts +3 -0
  458. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -0
  459. package/dist/esm/components/Dashboard/DashboardSection.js +14 -0
  460. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts +3 -0
  461. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -0
  462. package/dist/esm/components/Dashboard/DashboardSectionContainer.js +10 -0
  463. package/dist/esm/components/Dashboard/DataLoader.d.ts +3 -0
  464. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -0
  465. package/dist/esm/components/Dashboard/DataLoader.js +71 -0
  466. package/dist/esm/components/Dashboard/MetricComponent.d.ts +3 -0
  467. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -0
  468. package/dist/esm/components/Dashboard/MetricComponent.js +62 -0
  469. package/dist/esm/components/Dashboard/TableComponent.d.ts +3 -0
  470. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -0
  471. package/dist/esm/components/Dashboard/TableComponent.js +29 -0
  472. package/dist/esm/components/Dropdown/Dropdown.d.ts +14 -0
  473. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -0
  474. package/dist/esm/components/Dropdown/Dropdown.js +71 -0
  475. package/dist/esm/components/Dropdown/DropdownItem.d.ts +11 -0
  476. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -0
  477. package/dist/esm/components/Dropdown/DropdownItem.js +42 -0
  478. package/dist/esm/components/Dropdown/index.d.ts +3 -0
  479. package/dist/esm/components/Dropdown/index.d.ts.map +1 -0
  480. package/dist/esm/components/Dropdown/index.js +2 -0
  481. package/dist/esm/components/Modal/Modal.d.ts +15 -0
  482. package/dist/esm/components/Modal/Modal.d.ts.map +1 -0
  483. package/dist/esm/components/Modal/Modal.js +65 -0
  484. package/dist/esm/components/Modal/index.d.ts +2 -0
  485. package/dist/esm/components/Modal/index.d.ts.map +1 -0
  486. package/dist/esm/components/Modal/index.js +1 -0
  487. package/dist/esm/components/QuillCard.d.ts +14 -0
  488. package/dist/esm/components/QuillCard.d.ts.map +1 -0
  489. package/dist/esm/components/QuillCard.js +52 -0
  490. package/dist/esm/components/QuillSelect.d.ts +3 -0
  491. package/dist/esm/components/QuillSelect.d.ts.map +1 -0
  492. package/dist/esm/components/QuillSelect.js +124 -0
  493. package/dist/esm/components/QuillTable.d.ts +3 -0
  494. package/dist/esm/components/QuillTable.d.ts.map +1 -0
  495. package/dist/esm/components/QuillTable.js +256 -0
  496. package/dist/esm/components/UiComponents.d.ts +130 -0
  497. package/dist/esm/components/UiComponents.d.ts.map +1 -0
  498. package/dist/esm/components/UiComponents.js +248 -0
  499. package/dist/esm/components/selectUtils.d.ts +10 -0
  500. package/dist/esm/components/selectUtils.d.ts.map +1 -0
  501. package/dist/esm/components/selectUtils.js +37 -0
  502. package/dist/esm/contexts/BaseColorContext.d.ts +4 -0
  503. package/dist/esm/contexts/BaseColorContext.d.ts.map +1 -0
  504. package/dist/esm/contexts/BaseColorContext.js +3 -0
  505. package/dist/esm/contexts/HoveredValueContext.d.ts +8 -0
  506. package/dist/esm/contexts/HoveredValueContext.d.ts.map +1 -0
  507. package/dist/esm/contexts/HoveredValueContext.js +5 -0
  508. package/dist/esm/contexts/RootStylesContext.d.ts +4 -0
  509. package/dist/esm/contexts/RootStylesContext.d.ts.map +1 -0
  510. package/dist/esm/contexts/RootStylesContext.js +3 -0
  511. package/dist/esm/contexts/SelectedValueContext.d.ts +8 -0
  512. package/dist/esm/contexts/SelectedValueContext.d.ts.map +1 -0
  513. package/dist/esm/contexts/SelectedValueContext.js +6 -0
  514. package/dist/esm/contexts/index.d.ts +5 -0
  515. package/dist/esm/contexts/index.d.ts.map +1 -0
  516. package/dist/esm/contexts/index.js +4 -0
  517. package/dist/esm/hooks/index.d.ts +5 -0
  518. package/dist/esm/hooks/index.d.ts.map +1 -0
  519. package/dist/esm/hooks/index.js +4 -0
  520. package/dist/esm/hooks/useDashboard.d.ts +7 -0
  521. package/dist/esm/hooks/useDashboard.d.ts.map +1 -0
  522. package/dist/esm/hooks/useDashboard.js +50 -0
  523. package/dist/esm/hooks/useExport.d.ts +15 -0
  524. package/dist/esm/hooks/useExport.d.ts.map +1 -0
  525. package/dist/esm/hooks/useExport.js +27 -0
  526. package/dist/esm/hooks/useFormat.d.ts +6 -0
  527. package/dist/esm/hooks/useFormat.d.ts.map +1 -0
  528. package/dist/esm/hooks/useFormat.js +21 -0
  529. package/dist/esm/hooks/useInternalState.d.ts +4 -0
  530. package/dist/esm/hooks/useInternalState.d.ts.map +1 -0
  531. package/dist/esm/hooks/useInternalState.js +14 -0
  532. package/dist/esm/hooks/useOnClickOutside.d.ts +3 -0
  533. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -0
  534. package/dist/esm/hooks/useOnClickOutside.js +18 -0
  535. package/dist/esm/hooks/useOnWindowResize.d.ts +5 -0
  536. package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -0
  537. package/dist/esm/hooks/useOnWindowResize.js +14 -0
  538. package/dist/esm/hooks/useQuill.d.ts +46 -0
  539. package/dist/esm/hooks/useQuill.d.ts.map +1 -0
  540. package/dist/esm/hooks/useQuill.js +90 -0
  541. package/dist/esm/hooks/useSelectOnKeyDown.d.ts +3 -0
  542. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -0
  543. package/dist/esm/hooks/useSelectOnKeyDown.js +63 -0
  544. package/dist/esm/index.d.ts +19 -0
  545. package/dist/esm/index.d.ts.map +1 -0
  546. package/dist/esm/index.js +16 -0
  547. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +34 -0
  548. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -0
  549. package/dist/esm/internals/ReportBuilder/PivotList.js +56 -0
  550. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +62 -0
  551. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -0
  552. package/dist/esm/internals/ReportBuilder/PivotModal.js +909 -0
  553. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +2 -0
  554. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +1 -0
  555. package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +211 -0
  556. package/dist/esm/lib/font.d.ts +14 -0
  557. package/dist/esm/lib/font.d.ts.map +1 -0
  558. package/dist/esm/lib/font.js +13 -0
  559. package/dist/esm/lib/index.d.ts +4 -0
  560. package/dist/esm/lib/index.d.ts.map +1 -0
  561. package/dist/esm/lib/index.js +3 -0
  562. package/dist/esm/lib/inputTypes.d.ts +21 -0
  563. package/dist/esm/lib/inputTypes.d.ts.map +1 -0
  564. package/dist/esm/lib/inputTypes.js +55 -0
  565. package/dist/esm/lib/utils.d.ts +10 -0
  566. package/dist/esm/lib/utils.d.ts.map +1 -0
  567. package/dist/esm/lib/utils.js +35 -0
  568. package/dist/esm/utils/aggregate.d.ts +4 -0
  569. package/dist/esm/utils/aggregate.d.ts.map +1 -0
  570. package/dist/esm/utils/aggregate.js +423 -0
  571. package/dist/esm/utils/axisFormatter.d.ts +20 -0
  572. package/dist/esm/utils/axisFormatter.d.ts.map +1 -0
  573. package/dist/esm/utils/axisFormatter.js +190 -0
  574. package/dist/esm/utils/color.d.ts +13 -0
  575. package/dist/esm/utils/color.d.ts.map +1 -0
  576. package/dist/esm/utils/color.js +247 -0
  577. package/dist/esm/utils/crypto.d.ts +2 -0
  578. package/dist/esm/utils/crypto.d.ts.map +1 -0
  579. package/dist/esm/utils/crypto.js +6 -0
  580. package/dist/esm/utils/csv.d.ts +6 -0
  581. package/dist/esm/utils/csv.d.ts.map +1 -0
  582. package/dist/esm/utils/csv.js +76 -0
  583. package/dist/esm/utils/dashboard.d.ts +12 -0
  584. package/dist/esm/utils/dashboard.d.ts.map +1 -0
  585. package/dist/esm/utils/dashboard.js +170 -0
  586. package/dist/esm/utils/dataFetcher.d.ts +3 -0
  587. package/dist/esm/utils/dataFetcher.d.ts.map +1 -0
  588. package/dist/esm/utils/dataFetcher.js +76 -0
  589. package/dist/esm/utils/dates.d.ts +10 -0
  590. package/dist/esm/utils/dates.d.ts.map +1 -0
  591. package/dist/esm/utils/dates.js +32 -0
  592. package/dist/esm/utils/getDomain.d.ts +8 -0
  593. package/dist/esm/utils/getDomain.d.ts.map +1 -0
  594. package/dist/esm/utils/getDomain.js +28 -0
  595. package/dist/esm/utils/merge.d.ts +2 -0
  596. package/dist/esm/utils/merge.d.ts.map +1 -0
  597. package/dist/esm/utils/merge.js +45 -0
  598. package/dist/esm/utils/styles.d.ts +17 -0
  599. package/dist/esm/utils/styles.d.ts.map +1 -0
  600. package/dist/esm/utils/styles.js +16 -0
  601. package/dist/esm/utils/valueFormatter.d.ts +27 -0
  602. package/dist/esm/utils/valueFormatter.d.ts.map +1 -0
  603. package/dist/esm/utils/valueFormatter.js +246 -0
  604. package/dist/esm/utils/valueFormatterCSV.d.ts +17 -0
  605. package/dist/esm/utils/valueFormatterCSV.d.ts.map +1 -0
  606. package/dist/esm/utils/valueFormatterCSV.js +95 -0
  607. package/package.json +1 -1
@@ -0,0 +1,909 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // @ts-nocheck
3
+ import { useCallback, useContext, useMemo, useState, useEffect, useRef, } from 'react';
4
+ import { ClientContext } from '../../Context';
5
+ import { getDataFromCloud } from '../../utils/dataFetcher';
6
+ import { RefreshIcon } from '../../assets';
7
+ import { PivotList, PivotCard } from './PivotList';
8
+ import { differenceInDays, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, eachYearOfInterval, endOfDay, isWithinInterval, subMilliseconds, min, max, add, } from 'date-fns';
9
+ import { valueFormatter } from '../../utils/valueFormatter';
10
+ import { numberFormatOptions, snakeCaseToTitleCase } from '../../ChartBuilder';
11
+ import { QuillCard } from '../../components/QuillCard';
12
+ const QuillHover = () => {
13
+ return (_jsx("style", { children: `
14
+ .quill-hover {
15
+ background-color: white;
16
+ }
17
+ .quill-hover:hover {
18
+ background-color: rgba(56, 65, 81, 0.05);
19
+ }
20
+ .quill-tab:active {
21
+ background-color: rgba(56, 65, 81, 0.15);
22
+ }
23
+ ` }));
24
+ };
25
+ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, PopoverComponent, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, }) => {
26
+ const [isLoading, setIsLoading] = useState(false);
27
+ // for testing
28
+ // const [createdPivots, setCreatedPivots] = useState<Pivot[]>([
29
+ // {
30
+ // rowField: 'created_at',
31
+ // rowFieldType: 'date',
32
+ // columnField: undefined,
33
+ // columnFieldType: undefined,
34
+ // valueField: 'amount',
35
+ // aggregationType: 'sum',
36
+ // title: 'sum of amount by created_at',
37
+ // },
38
+ // {
39
+ // rowField: 'merchant',
40
+ // rowFieldType: 'varchar',
41
+ // columnField: 'created_at',
42
+ // columnFieldType: 'date',
43
+ // valueField: 'amount',
44
+ // aggregationType: 'sum',
45
+ // title: 'sum of amount by merchant and created_at',
46
+ // },
47
+ // {
48
+ // rowField: 'created_at',
49
+ // rowFieldType: 'date',
50
+ // columnField: 'merchant',
51
+ // columnFieldType: 'varchar',
52
+ // valueField: 'amount',
53
+ // aggregationType: 'sum',
54
+ // title: 'sum of amount by created_at and merchant',
55
+ // },
56
+ // ]);
57
+ const [pivotUpdateIndex, setPivotUpdateIndex] = useState(null);
58
+ const [selectedPivotType, setSelectedPivotType] = useState('recommended');
59
+ const [errors, setErrors] = useState([]);
60
+ const [client] = useContext(ClientContext);
61
+ const [divWidth, setDivWidth] = useState(0);
62
+ const editModalRef = useRef();
63
+ const calculateWidth = () => {
64
+ return editModalRef.current.offsetWidth;
65
+ };
66
+ useEffect(() => {
67
+ // Measure the width of the div and update state
68
+ if (editModalRef.current) {
69
+ setDivWidth(calculateWidth());
70
+ }
71
+ // Optional: Handle window resize
72
+ const handleResize = () => {
73
+ if (editModalRef.current) {
74
+ setDivWidth(calculateWidth());
75
+ }
76
+ };
77
+ window.addEventListener('resize', handleResize);
78
+ // Cleanup listener
79
+ return () => {
80
+ window.removeEventListener('resize', handleResize);
81
+ };
82
+ }, []);
83
+ useEffect(() => {
84
+ // Measure the width of the div and update state
85
+ if (editModalRef.current) {
86
+ setDivWidth(calculateWidth());
87
+ }
88
+ }, [editModalRef.current, showUpdatePivot]);
89
+ useEffect(() => {
90
+ setSelectedPivotIndex(-1);
91
+ setPivotUpdateIndex(null);
92
+ setSelectedPivotType(undefined);
93
+ setPivotRowField(undefined);
94
+ setPivotColumnField(undefined);
95
+ setPivotValueField(undefined);
96
+ setPivotAggregation(undefined);
97
+ setIsOpen(false);
98
+ setErrors([]);
99
+ }, [selectedTable]);
100
+ const columnsToShow = useMemo(() => {
101
+ return (columns || []).reduce((map, col) => {
102
+ // only use columns shown in the report builder's table
103
+ // also filter out id
104
+ if (col.field !== 'id' && !col.field.endsWith('_id')) {
105
+ map[col.field] = col.fieldType;
106
+ }
107
+ return map;
108
+ }, {});
109
+ }, [columns]);
110
+ const selectedPivotTable = useMemo(() => {
111
+ if (selectedPivotIndex === -1) {
112
+ return null;
113
+ }
114
+ const pivot = createdPivots[selectedPivotIndex];
115
+ const { rows, columns } = generatePivotTable(pivot, data, dateRange);
116
+ return {
117
+ pivot: pivot,
118
+ rows: rows,
119
+ columns: columns,
120
+ };
121
+ }, [selectedPivotIndex, data, dateRange, createdPivots]);
122
+ const columnSelectOptions = useMemo(() => {
123
+ return [
124
+ { label: 'Select', value: '' },
125
+ ...Object.keys(columnsToShow).map((key) => {
126
+ return { label: key, value: key };
127
+ }),
128
+ ];
129
+ }, [columnsToShow]);
130
+ const onSelectRecommendedPivot = (pivot, index) => {
131
+ if (showEditOnPivotClick) {
132
+ onEditPivot(pivot, index);
133
+ return;
134
+ }
135
+ if (index === selectedPivotIndex && selectedPivotType === 'recommended') {
136
+ removePivot();
137
+ }
138
+ else {
139
+ selectPivot(pivot, index);
140
+ setSelectedPivotType('recommended');
141
+ }
142
+ setIsOpen(false);
143
+ };
144
+ const onSelectCreatedPivot = (pivot, index) => {
145
+ selectPivot(pivot, index);
146
+ setSelectedPivotType('created');
147
+ setIsOpen(false);
148
+ setPopUpTitle('Add Pivot');
149
+ };
150
+ const onEditPivot = (pivot, index) => {
151
+ setPivotRowField(pivot.rowField);
152
+ setPivotColumnField(pivot.columnField);
153
+ setPivotValueField(pivot.valueField);
154
+ setPivotAggregation(pivot.aggregationType);
155
+ setPivotUpdateIndex(index);
156
+ setShowUpdatePivot(true);
157
+ };
158
+ const onEditRecommendedPivot = (pivot, index) => {
159
+ onEditPivot(pivot, null);
160
+ };
161
+ const refreshPivots = useCallback(async () => {
162
+ if (isLoading || Object.keys(columnsToShow).length === 0) {
163
+ return;
164
+ }
165
+ setIsLoading(true);
166
+ const cloudBody = {
167
+ tableSchema: Object.keys(columnsToShow).reduce(function (map, col) {
168
+ // stop ai from seeing date fields. this is meant to stop the ai
169
+ // pivot tables from extracting month and year from the date
170
+ const fieldType = isDateField(columnsToShow[col])
171
+ ? 'string'
172
+ : columnsToShow[col];
173
+ map[col] = fieldType;
174
+ return map;
175
+ }, {}),
176
+ };
177
+ try {
178
+ const resp = await getDataFromCloud(client, 'pivotai', cloudBody);
179
+ const recommendedPivots = resp?.data?.pivotTables || [];
180
+ // for testing if needed
181
+ // const recommendedPivots = [
182
+ // {
183
+ // title: 'Total Amount by Merchant',
184
+ // rowField: 'merchant',
185
+ // valueField: 'amount',
186
+ // aggregationType: 'sum',
187
+ // },
188
+ // {
189
+ // title: 'Average Amount by User and Category',
190
+ // rowField: 'user_name',
191
+ // columnField: 'category',
192
+ // valueField: 'amount',
193
+ // aggregationType: 'average',
194
+ // },
195
+ // {
196
+ // title: 'Count of Transactions by User and Merchant',
197
+ // rowField: 'user_name',
198
+ // columnField: 'merchant',
199
+ // valueField: 'id',
200
+ // aggregationType: 'count',
201
+ // },
202
+ // {
203
+ // title: 'Total Amount by Merchant and Category',
204
+ // rowField: 'merchant',
205
+ // columnField: 'category',
206
+ // valueField: 'amount',
207
+ // aggregationType: 'sum',
208
+ // },
209
+ // {
210
+ // title: 'Average Amount by Category and Date',
211
+ // rowField: 'category',
212
+ // columnField: 'created_at',
213
+ // valueField: 'amount',
214
+ // aggregationType: 'average',
215
+ // },
216
+ // {
217
+ // title: 'Count of Transactions by Date and Category',
218
+ // rowField: 'created_at',
219
+ // columnField: 'category',
220
+ // valueField: 'id',
221
+ // aggregationType: 'count',
222
+ // },
223
+ // ];
224
+ setRecommendedPivots(recommendedPivots
225
+ .filter((pivot) => pivot.rowField != '')
226
+ .map((pivot) => {
227
+ return {
228
+ ...pivot,
229
+ rowFieldType: columnsToShow[pivot.rowField],
230
+ columnFieldType: columnsToShow[pivot.columnField],
231
+ };
232
+ }));
233
+ // refreshing means the currently selected pivot doesn't exist in the options anymore
234
+ setSelectedPivotIndex(-1);
235
+ }
236
+ catch (e) {
237
+ console.error('Failed parsing pivotai response', e);
238
+ }
239
+ setIsLoading(false);
240
+ }, [selectedTable, data, columnsToShow, isLoading]);
241
+ useEffect(() => {
242
+ if (recommendedPivots.length === 0) {
243
+ refreshPivots();
244
+ }
245
+ }, [refreshPivots]);
246
+ const recommendedPivotTables = useMemo(() => {
247
+ const pts = recommendedPivots.map((p) => {
248
+ const { rows, columns } = generatePivotTable(p, data, dateRange, 6);
249
+ return { pivot: p, rows, columns };
250
+ });
251
+ return pts;
252
+ }, [recommendedPivots, data]);
253
+ const createdPivotTables = useMemo(() => {
254
+ const pts = createdPivots.map((p) => {
255
+ const { rows, columns } = generatePivotTable(p, data, dateRange, 6);
256
+ return { pivot: p, rows, columns };
257
+ });
258
+ return pts;
259
+ }, [createdPivots, data]);
260
+ const samplePivotTable = useMemo(() => {
261
+ if (!pivotAggregation || !pivotRowField) {
262
+ return null;
263
+ }
264
+ const pivot = {
265
+ rowField: pivotRowField || '',
266
+ rowFieldType: columnsToShow[pivotRowField || ''],
267
+ columnField: pivotColumnField,
268
+ columnFieldType: columnsToShow[pivotColumnField || ''],
269
+ valueField: pivotValueField || '',
270
+ aggregationType: pivotAggregation || '',
271
+ };
272
+ const { rows, columns } = generatePivotTable(pivot, data, dateRange);
273
+ return { pivot: pivot, rows, columns };
274
+ }, [
275
+ pivotAggregation,
276
+ pivotValueField,
277
+ pivotRowField,
278
+ pivotColumnField,
279
+ columnsToShow,
280
+ ]);
281
+ return (_jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsxs("div", { style: {
282
+ position: 'relative',
283
+ display: 'inline-block',
284
+ textAlign: 'left',
285
+ }, children: [_jsx("div", { style: {
286
+ display: 'flex',
287
+ flexDirection: 'row',
288
+ alignItems: 'center',
289
+ }, children: selectedPivotIndex !== -1 && (_jsx("span", { style: {
290
+ height: 10,
291
+ width: 10,
292
+ backgroundColor: theme.primaryButtonColor,
293
+ borderRadius: '50%',
294
+ position: 'absolute',
295
+ top: -2,
296
+ right: -2,
297
+ } })) }), _jsx(PopoverComponent, { onClose: () => {
298
+ setShowUpdatePivot(false);
299
+ setPopUpTitle('Add Pivot');
300
+ }, style: rightAlign ? { right: 0 } : {}, parentRef: parentRef, showTrigger: showTrigger, label: triggerButtonText, isOpen: isOpen, setIsOpen: setIsOpen, onClick: () => {
301
+ // table is not loaded yet, so pivot button is not clickable
302
+ if (Object.keys(columnsToShow).length === 0) {
303
+ return;
304
+ }
305
+ if (!isOpen && recommendedPivots.length === 0) {
306
+ refreshPivots();
307
+ }
308
+ setShowUpdatePivot(false);
309
+ }, children: _jsx("div", { children: showUpdatePivot ? (_jsxs("div", { className: "ref-in-use", ref: editModalRef, style: {
310
+ backgroundColor: 'rgb(255, 255, 255)',
311
+ display: 'flex',
312
+ flexDirection: 'column',
313
+ }, children: [_jsx(HeaderComponent, { children: popUpTitle }), _jsx("div", { style: { height: 12 } }), _jsx("div", { style: { width: divWidth }, children: samplePivotTable ? (_jsx("div", { style: {
314
+ marginBottom: 20,
315
+ minHeight: 160,
316
+ }, children: _jsx(PivotCard, { pivotTable: samplePivotTable, theme: theme, index: 0, onSelectPivot: () => { }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, clickable: false, minHeight: 140, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent }) })) : (_jsx("div", { style: { marginBottom: 20, maxWidth: 470 }, children: _jsx(QuillCard, { theme: theme, clickable: false, children: _jsx("div", { style: {
317
+ color: theme.secondaryTextColor,
318
+ }, children: "Select a row field and aggregation type to see a preview" }) }) })) }), _jsxs("div", { style: {
319
+ display: 'flex',
320
+ flexDirection: 'column',
321
+ gap: 10,
322
+ alignItems: 'center',
323
+ justifyContent: 'space-between',
324
+ }, children: [_jsxs("div", { style: {
325
+ display: 'flex',
326
+ flexDirection: 'row',
327
+ gap: 20,
328
+ marginBottom: 5,
329
+ }, children: [_jsxs("div", { children: [_jsx(LabelComponent, { children: "Row Field" }), _jsx(SelectComponent, { label: 'Row Field', id: "pivot-row-field", value: pivotRowField, onChange: (e) => {
330
+ setPivotRowField(e === '' ? undefined : e);
331
+ }, options: columnSelectOptions, theme: theme })] }), _jsxs("div", { children: [_jsx(LabelComponent, { children: "Column Field" }), _jsx(SelectComponent, { label: 'Column Field', id: "pivot-row-field", value: pivotColumnField, onChange: (e) => {
332
+ setPivotColumnField(e === '' ? undefined : e);
333
+ }, options: columnSelectOptions, theme: theme })] })] }), _jsxs("div", { style: {
334
+ display: 'flex',
335
+ flexDirection: 'row',
336
+ gap: 20,
337
+ marginBottom: 20,
338
+ }, children: [_jsxs("div", { children: [_jsx(LabelComponent, { children: "Value Field" }), _jsx(SelectComponent, { label: 'Value Field', id: "pivot-row-field", value: pivotValueField, onChange: (e) => {
339
+ setPivotValueField(e === '' ? undefined : e);
340
+ }, options: pivotAggregation === 'count'
341
+ ? columnSelectOptions
342
+ : columnSelectOptions.filter((option) => {
343
+ return (option.value === '' ||
344
+ numberFormatOptions.includes(columns.find((col) => col.field === option.value)?.format));
345
+ }), theme: theme })] }), _jsxs("div", { children: [_jsx(LabelComponent, { children: "Aggregation Type" }), _jsx(SelectComponent, { label: 'Aggregation Type', id: "pivot-row-field", value: pivotAggregation, theme: theme, onChange: (e) => {
346
+ if (e !== 'count' &&
347
+ pivotValueField &&
348
+ !numberFormatOptions.includes(columns.find((col) => col.field === pivotValueField)?.format)) {
349
+ setPivotValueField(null);
350
+ }
351
+ setPivotAggregation(e === '' ? undefined : e);
352
+ }, options: ['', 'sum', 'average', 'count'].map((option) => {
353
+ return { label: option || 'Select', value: option };
354
+ }) })] })] })] }), _jsx("div", { children: _jsx(ButtonComponent, { id: "custom-button", onClick: () => {
355
+ const errors = [];
356
+ if (!pivotRowField) {
357
+ errors.push('Row field cannot be empty');
358
+ }
359
+ if (!pivotValueField && pivotAggregation !== 'count') {
360
+ errors.push("Value field cannot be empty when aggregation is not 'count'");
361
+ }
362
+ if (!pivotAggregation) {
363
+ errors.push('Aggregation cannot be empty');
364
+ }
365
+ if (errors.length === 0) {
366
+ const pivot = {
367
+ rowField: pivotRowField || '',
368
+ rowFieldType: columnsToShow[pivotRowField || ''],
369
+ columnField: pivotColumnField,
370
+ columnFieldType: columnsToShow[pivotColumnField || ''],
371
+ valueField: pivotValueField || '',
372
+ aggregationType: pivotAggregation || '',
373
+ };
374
+ pivot.title = generatePivotTitle(pivot);
375
+ setIsOpen(false);
376
+ setCreatedPivots([pivot]);
377
+ onSelectCreatedPivot(pivot, 0);
378
+ setPopUpTitle('Add Pivot');
379
+ }
380
+ setErrors(errors);
381
+ }, label: popUpTitle }) }), _jsx("div", { children: errors.length > 0 && (_jsxs("div", { children: [_jsx("div", { style: {
382
+ fontSize: 14,
383
+ marginBottom: '6px',
384
+ marginTop: '12px',
385
+ fontWeight: '600',
386
+ color: theme.secondaryTextColor,
387
+ }, children: "Pivot Errors" }), errors.map((error, index) => (_jsx("div", { style: {
388
+ borderRadius: 8,
389
+ backgroundColor: '#FF9494',
390
+ paddingLeft: '12px',
391
+ paddingRight: '8px',
392
+ height: 30,
393
+ display: 'flex',
394
+ alignItems: 'center',
395
+ fontSize: 13,
396
+ fontWeight: 'bold',
397
+ fontFamily: theme?.fontFamily,
398
+ color: 'white',
399
+ marginBottom: 5,
400
+ }, children: error }, index)))] })) })] })) : (_jsx("div", { style: {
401
+ display: 'flex',
402
+ flexDirection: 'column',
403
+ fontFamily: theme?.fontFamily,
404
+ color: theme?.primaryTextColor,
405
+ width: selectedPivotTable ? 500 : 600,
406
+ maxHeight: 600,
407
+ overflowY: 'scroll',
408
+ }, children: selectedPivotIndex >= 0 ? (_jsx("div", { children: _jsx("div", { onClick: () => {
409
+ setPopUpTitle('Edit Pivot');
410
+ onEditPivot(createdPivots[0], 0);
411
+ }, children: _jsx(PivotCard, { pivotTable: {
412
+ pivot: selectedPivotTable?.pivot,
413
+ rows: selectedPivotTable?.rows,
414
+ columns: selectedPivotTable?.columns,
415
+ }, theme: theme, index: 0, onSelectPivot: () => { }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, onClose: () => {
416
+ removePivot();
417
+ }, clickable: true, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent }) }) })) : (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: {
418
+ fontWeight: '600',
419
+ marginBottom: 5,
420
+ fontSize: 18,
421
+ }, children: "Recommended Pivots" }), _jsx("div", { children: _jsxs("div", { onClick: refreshPivots, style: {
422
+ color: theme?.secondaryTextColor,
423
+ cursor: 'pointer',
424
+ marginTop: 0,
425
+ marginBottom: 12,
426
+ display: 'flex',
427
+ flexDirection: 'row',
428
+ alignItems: 'center',
429
+ width: 'min-content',
430
+ fontSize: 14,
431
+ paddingLeft: 8,
432
+ paddingRight: 6,
433
+ paddingTop: 6,
434
+ paddingBottom: 6,
435
+ borderRadius: 5,
436
+ }, className: "quill-hover", children: [_jsx(QuillHover, {}), _jsx(RefreshIcon, { style: { marginRight: 5 } }), "Refresh"] }) }), isLoading ? (_jsxs("div", { style: {
437
+ background: theme.backgroundColor,
438
+ width: 250,
439
+ minWidth: 250,
440
+ height: '100%',
441
+ paddingLeft: 20,
442
+ paddingRight: 30,
443
+ paddingTop: 40,
444
+ display: 'flex',
445
+ margin: '0px auto',
446
+ justifyContent: 'center',
447
+ }, children: [_jsx("div", { style: { height: 100 } }), _jsxs("svg", { width: "24", height: "24", children: [_jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 6)", stroke: theme?.primaryTextColor || '#364153', fill: "none", transform: "rotate(-90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "-180 12 12", to: "180 12 12", dur: "0.8s", repeatCount: "indefinite" }) }), _jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 1 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", stroke: '#ADB1B9', fill: "none", transform: "rotate(90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "0 12 12", to: "360 12 12", dur: "0.8s", repeatCount: "indefinite" }) })] })] })) : (_jsxs("div", { children: [recommendedPivotTables.length == 0 && (_jsx("div", { style: { marginBottom: 20 }, children: "There are currently no recommended pivots available." })), _jsx(PivotList, { recommendedPivotTables: recommendedPivotTables, createdPivotTables: createdPivotTables, theme: theme, onSelectRecommendedPivot: onSelectRecommendedPivot, onSelectCreatedPivot: onSelectCreatedPivot, selectedPivotIndex: selectedPivotIndex, selectedPivotType: selectedPivotType, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, onEditRecommendedPivot: onEditRecommendedPivot, onEditCreatedPivot: onEditPivot, showCreatePivot: true, showPivotEditButton: showPivotEditButton, LabelComponent: LabelComponent, TextComponent: TextComponent })] }))] })) })) }) })] }) }));
448
+ };
449
+ export function generatePivotTableYAxis(pivot, cols, format) {
450
+ // Use the column field for the field and label if there is one
451
+ if (pivot.columnField) {
452
+ return cols.slice(1).map(({ field, label }) => ({ field, label, format }));
453
+ }
454
+ // For count aggregations, use 'count' for the label
455
+ if (pivot?.aggregationType === 'count') {
456
+ return [{ field: pivot.valueField, label: 'count', format: format }];
457
+ }
458
+ // For average aggregations, use 'average <label>' for the label
459
+ if (pivot?.aggregationType === 'average') {
460
+ const label = `average ${pivot.valueField}`;
461
+ return [{ field: pivot.valueField, label, format: format }];
462
+ }
463
+ // otherwise use the default (ie. the field label)
464
+ return [
465
+ {
466
+ field: pivot.valueField,
467
+ label: '',
468
+ format: format,
469
+ },
470
+ ];
471
+ }
472
+ function generatePivotTitle(pivot) {
473
+ return snakeCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField} by ${pivot.rowField}${pivot.columnField ? ` and ${pivot.columnField}` : ''}`);
474
+ }
475
+ function castValueToDate(value) {
476
+ if (!value) {
477
+ return null;
478
+ }
479
+ if (typeof value === 'object' && value.value) {
480
+ return new Date(value.value);
481
+ }
482
+ return new Date(value);
483
+ }
484
+ function getDateRange(dateRange, column, data) {
485
+ if (!dateRange || !dateRange[0]) {
486
+ if (data.length == 0 || !data[0][column]) {
487
+ return { start: new Date(), end: new Date() };
488
+ }
489
+ const firstDate = castValueToDate(data[0][column]);
490
+ if (data.length == 1) {
491
+ return {
492
+ start: firstDate || new Date(),
493
+ end: firstDate || new Date(),
494
+ };
495
+ }
496
+ let earliestDate = firstDate;
497
+ let lastestDate = firstDate;
498
+ for (let i = 0; i < data.length; i++) {
499
+ if (data[i][column]) {
500
+ const value = castValueToDate(data[i][column]);
501
+ lastestDate = lastestDate === null ? value : max([lastestDate, value]);
502
+ earliestDate =
503
+ earliestDate === null ? value : min([earliestDate, value]);
504
+ }
505
+ }
506
+ return { start: earliestDate, end: lastestDate };
507
+ }
508
+ else {
509
+ return { start: dateRange[0], end: dateRange[1] };
510
+ }
511
+ }
512
+ function getDateBuckets(dateRange, column, data) {
513
+ if (!dateRange || !dateRange[0]) {
514
+ return eachMonthOfInterval(getDateRange(dateRange, column, data));
515
+ }
516
+ const dayDifference = differenceInDays(new Date(dateRange[1]), new Date(dateRange[0]));
517
+ return dayDifferenceToInterval(dayDifference, dateRange);
518
+ }
519
+ function getCompDateBuckets(dateRange, compDateRange, column, data) {
520
+ if (!dateRange || !dateRange[0]) {
521
+ return eachMonthOfInterval(getDateRange(dateRange, column, data));
522
+ }
523
+ const dayDifference = differenceInDays(new Date(dateRange[1]), new Date(dateRange[0]));
524
+ return dayDifferenceToInterval(dayDifference, compDateRange);
525
+ }
526
+ function dayDifferenceToInterval(dayDifference, dateRange) {
527
+ if (dayDifference < 14) {
528
+ return eachDayOfInterval({ start: dateRange[0], end: dateRange[1] });
529
+ }
530
+ else if (dayDifference < 60) {
531
+ return eachWeekOfInterval({ start: dateRange[0], end: dateRange[1] }, { weekStartsOn: 1 });
532
+ }
533
+ else if (dayDifference < 365 * 3) {
534
+ return eachMonthOfInterval({ start: dateRange[0], end: dateRange[1] });
535
+ }
536
+ else {
537
+ return eachYearOfInterval({ start: dateRange[0], end: dateRange[1] });
538
+ }
539
+ }
540
+ function getDateString(value, dateRange) {
541
+ let format;
542
+ if (!dateRange || !dateRange[0]) {
543
+ format = 'MMM_yyyy';
544
+ }
545
+ else {
546
+ const dayDifference = differenceInDays(new Date(dateRange[1]), new Date(dateRange[0]));
547
+ if (dayDifference < 14) {
548
+ format = 'MMM_dd_yyyy';
549
+ }
550
+ else if (dayDifference < 60) {
551
+ format = 'MMM_dd-MMM_dd';
552
+ }
553
+ else if (dayDifference < 365 * 3) {
554
+ format = 'MMM_yyyy';
555
+ }
556
+ else {
557
+ format = 'yyyy';
558
+ }
559
+ }
560
+ return valueFormatter({
561
+ value,
562
+ field: 'date',
563
+ fields: [{ field: 'date', format }],
564
+ });
565
+ }
566
+ export function isDateField(fieldType) {
567
+ return (fieldType === 'date' ||
568
+ fieldType === 'datetime' ||
569
+ fieldType === 'timestamp' ||
570
+ fieldType === 'timestamptz');
571
+ }
572
+ const isNullUndefinedOrInvalidDate = (date) => date === null || date === undefined || isNaN(date.getTime());
573
+ // If the value is an object with key value (ie. a BigQuery date) we will
574
+ // return the inner value, otherwise return passed param as-is.
575
+ const handleBigQueryValue = (value) => {
576
+ if (Boolean(value) &&
577
+ typeof value === 'object' &&
578
+ Object.keys(value).length === 1 &&
579
+ value['value']) {
580
+ return value['value'];
581
+ }
582
+ return value;
583
+ };
584
+ // Process out all the BigQuery dates.
585
+ const fixBigQueryData = (data) => {
586
+ const newData = [];
587
+ for (const row of data) {
588
+ const newRow = {};
589
+ for (const key in row) {
590
+ newRow[key] = handleBigQueryValue(row[key]);
591
+ }
592
+ newData.push(newRow);
593
+ }
594
+ return newData;
595
+ };
596
+ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = null) {
597
+ // Handle edge-case for BigQuery objects.
598
+ data = fixBigQueryData(data);
599
+ if (dateRange[0] === null && dateRange[1] === null) {
600
+ dateRange = [new Date(0), add(new Date(), { years: 5 })];
601
+ }
602
+ if (!compRange ||
603
+ isNullUndefinedOrInvalidDate(compRange[0]) ||
604
+ isNullUndefinedOrInvalidDate(compRange[1])) {
605
+ compRange = null;
606
+ }
607
+ const pivotRows = [];
608
+ const uniqueRows = (isDateField(pivot.rowFieldType)
609
+ ? getDateBuckets(dateRange, pivot.rowField, data)
610
+ : [...new Set(data.map((item) => item[pivot.rowField]))]).filter((row) => Boolean(row));
611
+ const rowDateRange = pivot.rowField
612
+ ? getDateRange(dateRange, pivot.rowField, data)
613
+ : null;
614
+ const columnDateRange = pivot.columnField
615
+ ? getDateRange(dateRange, pivot.columnField, data)
616
+ : null;
617
+ // If columnField is not provided, we will not be using uniqueColumns
618
+ const uniqueColumns = (pivot.columnField && pivot.columnField.trim()
619
+ ? isDateField(pivot.columnFieldType)
620
+ ? getDateBuckets(dateRange, pivot.columnField, data)
621
+ : [...new Set(data.map((item) => item[pivot.columnField || '']))]
622
+ : [pivot.valueField]).filter((col) => Boolean(col));
623
+ // Map from new dates to their corresponding prior dates
624
+ const COL_DATE_MAP = {};
625
+ const ROW_DATE_MAP = {};
626
+ // add in the comparison columns for all columns in the pivot
627
+ let compUniqueRows = [];
628
+ let compRowDateRange = [];
629
+ if (isComparison) {
630
+ if (pivot.columnField) {
631
+ const col = pivot.columnField;
632
+ const row = pivot.rowField;
633
+ const isDateCol = isDateField(pivot.columnFieldType);
634
+ const isDateRow = isDateField(pivot.rowFieldType);
635
+ data.forEach((item) => {
636
+ if (isDateCol) {
637
+ const key = getDateString(item[col], dateRange);
638
+ const value = getDateString(item[`comparison_${col}`], dateRange);
639
+ COL_DATE_MAP[key] = value;
640
+ }
641
+ if (isDateRow) {
642
+ const key = getDateString(item[row], dateRange);
643
+ const value = getDateString(item[`comparison_${row}`], dateRange);
644
+ ROW_DATE_MAP[key] = value;
645
+ }
646
+ });
647
+ }
648
+ else {
649
+ const primaryColumns = [...uniqueColumns];
650
+ for (const primaryKey of primaryColumns) {
651
+ uniqueColumns.push(`comparison_${primaryKey}`);
652
+ }
653
+ }
654
+ compUniqueRows = (isDateField(pivot.rowFieldType)
655
+ ? getCompDateBuckets(dateRange, compRange ?? dateRange, pivot.rowField, data)
656
+ : [...new Set(data.map((item) => item[pivot.rowField]))]).filter((row) => Boolean(row));
657
+ compRowDateRange = pivot.rowField
658
+ ? getDateRange(compRange ?? dateRange, pivot.rowField, data)
659
+ : null;
660
+ }
661
+ const rowsToGenerate = rowLimit !== -1 && rowLimit <= uniqueRows.length
662
+ ? uniqueRows.slice(0, rowLimit + 1)
663
+ : uniqueRows;
664
+ rowsToGenerate.forEach((rowValue, rowIndex) => {
665
+ const row = {
666
+ [pivot.rowField]: isDateField(pivot.rowFieldType)
667
+ ? getDateString(rowValue, dateRange)
668
+ : rowValue === null
669
+ ? 'Null'
670
+ : rowValue === false
671
+ ? 'False'
672
+ : rowValue === true
673
+ ? 'True'
674
+ : rowValue,
675
+ };
676
+ uniqueColumns.forEach((colValue, colIndex) => {
677
+ let comparisonFilteredData = [];
678
+ let filteredData = [];
679
+ let comparisonValue;
680
+ let value;
681
+ const nextRowValue = isDateField(pivot.rowFieldType)
682
+ ? uniqueRows[rowIndex + 1] ?? endOfDay(rowDateRange.end)
683
+ : null;
684
+ const compRowValue = compUniqueRows[rowIndex];
685
+ const compNextRowValue = isDateField(pivot.rowFieldType)
686
+ ? compUniqueRows[rowIndex + 1] ?? endOfDay(compRowDateRange.end)
687
+ : null;
688
+ if (pivot.columnField) {
689
+ const nextColumnValue = isDateField(pivot.columnFieldType)
690
+ ? uniqueColumns[colIndex + 1] || endOfDay(columnDateRange.end)
691
+ : null;
692
+ // If columnField is provided, filter by both rowField and columnField
693
+ if (isDateField(pivot.columnFieldType) &&
694
+ isDateField(pivot.rowFieldType)) {
695
+ filteredData = data.filter((item) => {
696
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
697
+ start: rowValue,
698
+ end: subMilliseconds(nextRowValue, 1),
699
+ }) &&
700
+ isWithinInterval(new Date(item[pivot.columnField]), {
701
+ start: colValue,
702
+ end: subMilliseconds(nextColumnValue, 1),
703
+ }));
704
+ });
705
+ if (isComparison) {
706
+ comparisonFilteredData = data.filter((item) => {
707
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
708
+ start: rowValue,
709
+ end: subMilliseconds(nextRowValue, 1),
710
+ }) &&
711
+ isWithinInterval(new Date(item[pivot.columnField]), {
712
+ start: colValue,
713
+ end: subMilliseconds(nextColumnValue, 1),
714
+ }));
715
+ });
716
+ }
717
+ }
718
+ else if (isDateField(pivot.columnFieldType) &&
719
+ !isDateField(pivot.rowFieldType)) {
720
+ filteredData = data.filter((item) => {
721
+ return (item[pivot.rowField] === rowValue &&
722
+ isWithinInterval(new Date(item[pivot.columnField]), {
723
+ start: colValue,
724
+ end: subMilliseconds(nextColumnValue, 1),
725
+ }));
726
+ });
727
+ if (isComparison) {
728
+ comparisonFilteredData = data.filter((item) => {
729
+ return (item[`comparison_${pivot.rowField}`] === rowValue &&
730
+ isWithinInterval(new Date(item[pivot.columnField]), {
731
+ start: colValue,
732
+ end: subMilliseconds(nextColumnValue, 1),
733
+ }));
734
+ });
735
+ }
736
+ }
737
+ else if (!isDateField(pivot.columnFieldType) &&
738
+ isDateField(pivot.rowFieldType)) {
739
+ filteredData = data.filter((item) => {
740
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
741
+ start: rowValue,
742
+ end: subMilliseconds(nextRowValue, 1),
743
+ }) && item[pivot.columnField || ''] === colValue);
744
+ });
745
+ if (isComparison) {
746
+ comparisonFilteredData = data.filter((item) => {
747
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
748
+ start: rowValue,
749
+ end: subMilliseconds(nextRowValue, 1),
750
+ }) &&
751
+ item[`comparison_${pivot.columnField}` || ''] === colValue);
752
+ });
753
+ }
754
+ }
755
+ else {
756
+ filteredData = data.filter((item) => {
757
+ return (item[pivot.rowField] === rowValue &&
758
+ item[pivot.columnField || ''] === colValue);
759
+ });
760
+ if (isComparison) {
761
+ comparisonFilteredData = data.filter((item) => {
762
+ return (item[`comparison_${pivot.rowField}`] === rowValue &&
763
+ item[`comparison_${pivot.columnField}`] === colValue);
764
+ });
765
+ }
766
+ }
767
+ }
768
+ else {
769
+ // NOTE: For 1D columns, the comparisons are handled inside the colvalue
770
+ // so there is no need to filter for comparisonFilteredData here.
771
+ // If columnField is not provided, filter by rowField only
772
+ if (colValue.startsWith('comparison_')) {
773
+ filteredData = isDateField(pivot.rowFieldType)
774
+ ? data.filter((item) => {
775
+ return (compRowValue &&
776
+ isWithinInterval(new Date(item[`comparison_${pivot.rowField}`]), {
777
+ start: compRowValue,
778
+ end: subMilliseconds(compNextRowValue, 1),
779
+ }));
780
+ })
781
+ : data.filter((item) => item[`comparison_${pivot.rowField}`] === compRowValue);
782
+ }
783
+ else {
784
+ filteredData = isDateField(pivot.rowFieldType)
785
+ ? data.filter((item) => {
786
+ return isWithinInterval(new Date(item[pivot.rowField]), {
787
+ start: rowValue,
788
+ end: subMilliseconds(nextRowValue, 1),
789
+ });
790
+ })
791
+ : data.filter((item) => item[pivot.rowField] === rowValue);
792
+ }
793
+ }
794
+ // Aggregation logic remains the same
795
+ const key = pivot.columnField && pivot.columnField.trim()
796
+ ? pivot.valueField
797
+ : colValue;
798
+ switch (pivot.aggregationType) {
799
+ case 'sum':
800
+ value = filteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0);
801
+ if (isComparison) {
802
+ comparisonValue = comparisonFilteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0);
803
+ }
804
+ break;
805
+ case 'count':
806
+ value = filteredData.length;
807
+ if (isComparison) {
808
+ comparisonValue = comparisonFilteredData.length;
809
+ }
810
+ break;
811
+ case 'average':
812
+ value = filteredData.length
813
+ ? filteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0) / filteredData.length
814
+ : 0;
815
+ if (isComparison) {
816
+ comparisonValue = comparisonFilteredData.length
817
+ ? comparisonFilteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0) / comparisonFilteredData.length
818
+ : 0;
819
+ }
820
+ break;
821
+ // Implement other aggregation types as needed
822
+ default:
823
+ throw new Error('Unsupported aggregation type');
824
+ }
825
+ // Set the value on the row
826
+ // If columnField is not provided, colValue will be valueField
827
+ row[isDateField(pivot.columnFieldType)
828
+ ? getDateString(colValue, dateRange)
829
+ : colValue] = pivot.aggregationType === 'count' ? value : value.toFixed(2);
830
+ if (isComparison && pivot.columnField) {
831
+ if (isDateField(pivot.columnFieldType)) {
832
+ row[`comparison_${getDateString(colValue, dateRange)}`] =
833
+ pivot.aggregationType === 'count'
834
+ ? comparisonValue
835
+ : comparisonValue.toFixed(2);
836
+ }
837
+ else {
838
+ row[`comparison_${colValue}`] =
839
+ pivot.aggregationType === 'count'
840
+ ? comparisonValue
841
+ : comparisonValue.toFixed(2);
842
+ }
843
+ }
844
+ });
845
+ pivotRows.push(row);
846
+ });
847
+ const columns = [
848
+ {
849
+ label: pivot.rowField === null
850
+ ? 'Null'
851
+ : pivot.rowField === false
852
+ ? 'False'
853
+ : snakeCaseToTitleCase(pivot.rowField),
854
+ field: pivot.rowField,
855
+ },
856
+ ...(!pivot.columnField
857
+ ? [
858
+ {
859
+ label: pivot.rowField === null
860
+ ? 'Null'
861
+ : pivot.rowField === false
862
+ ? 'False'
863
+ : `Comparison ${snakeCaseToTitleCase(pivot.rowField)}`,
864
+ field: `comparison_${pivot.rowField}`,
865
+ },
866
+ ]
867
+ : []),
868
+ ...uniqueColumns.map((column, index) => {
869
+ const columnName = isDateField(pivot.columnFieldType)
870
+ ? getDateString(column, dateRange)
871
+ : column;
872
+ return {
873
+ label: column === null
874
+ ? 'Null'
875
+ : column === false
876
+ ? 'False'
877
+ : pivot.aggregationType === 'count' &&
878
+ !pivot.columnField &&
879
+ index === 1
880
+ ? 'Count'
881
+ : snakeCaseToTitleCase(columnName),
882
+ field: columnName,
883
+ };
884
+ }),
885
+ ...(isComparison && pivot.columnField
886
+ ? uniqueColumns.map((column, index) => {
887
+ const columnName = isDateField(pivot.columnFieldType)
888
+ ? getDateString(column, dateRange)
889
+ : column;
890
+ return {
891
+ label: column === null
892
+ ? 'Null'
893
+ : column === false
894
+ ? 'False'
895
+ : pivot.aggregationType === 'count' &&
896
+ !pivot.columnField &&
897
+ index === 1
898
+ ? 'Comparison Count'
899
+ : isDateField(pivot.columnFieldType)
900
+ ? COL_DATE_MAP[getDateString(column, dateRange)] ??
901
+ 'Comparison'
902
+ : `Comparison ${snakeCaseToTitleCase(columnName)}`,
903
+ field: `comparison_${columnName}`,
904
+ };
905
+ })
906
+ : []),
907
+ ];
908
+ return { rows: pivotRows, columns };
909
+ }