@datarecce/ui 0.1.30 → 0.1.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 (622) hide show
  1. package/dist/{state-lPCQsWy5.js → RecceCheckContext-BOGmP80K.js} +4367 -5089
  2. package/dist/RecceCheckContext-BOGmP80K.js.map +1 -0
  3. package/dist/{state-B9yzhuKs.mjs → RecceCheckContext-CwUCo6AW.mjs} +4273 -4541
  4. package/dist/RecceCheckContext-CwUCo6AW.mjs.map +1 -0
  5. package/dist/{state-DOUPNifc.css → RecceCheckContext-DPnWB_aU.css} +57 -57
  6. package/dist/RecceCheckContext-DPnWB_aU.css.map +1 -0
  7. package/dist/{state-IA7HWYOs.css → RecceCheckContext-DyxOeUsX.css} +57 -57
  8. package/dist/RecceCheckContext-DyxOeUsX.css.map +1 -0
  9. package/dist/api.d.mts +1 -1
  10. package/dist/api.d.ts +1 -1
  11. package/dist/api.js +65 -26
  12. package/dist/api.js.map +1 -0
  13. package/dist/api.mjs +44 -5
  14. package/dist/api.mjs.map +1 -0
  15. package/dist/{components-DCOI1YlQ.mjs → components-DQUwJlNQ.mjs} +20 -21
  16. package/dist/{components-DCOI1YlQ.mjs.map → components-DQUwJlNQ.mjs.map} +1 -1
  17. package/dist/{components-B-YxuuPz.js → components-uVp0e4cH.js} +231 -241
  18. package/dist/{components-B-YxuuPz.js.map → components-uVp0e4cH.js.map} +1 -1
  19. package/dist/components.d.mts +1 -1
  20. package/dist/components.d.ts +1 -1
  21. package/dist/components.js +38 -38
  22. package/dist/components.mjs +5 -5
  23. package/dist/{urls-B1Ymdoz-.mjs → const-CaIm1Z8g.mjs} +2 -6
  24. package/dist/const-CaIm1Z8g.mjs.map +1 -0
  25. package/dist/{urls-C4eAc82S.js → const-CvdZO0FN.js} +1 -11
  26. package/dist/const-CvdZO0FN.js.map +1 -0
  27. package/dist/global-styles.css +84 -0
  28. package/dist/global-styles.css.map +1 -0
  29. package/dist/global-styles.js +1 -0
  30. package/dist/global-styles.mjs +1 -0
  31. package/dist/{hooks-DjBNmTdh.mjs → hooks-C6Kma5ld.mjs} +2 -3
  32. package/dist/{hooks-DjBNmTdh.mjs.map → hooks-C6Kma5ld.mjs.map} +1 -1
  33. package/dist/hooks-CfZ4UBBF.js +40 -0
  34. package/dist/{hooks-B9hsc1oD.js.map → hooks-CfZ4UBBF.js.map} +1 -1
  35. package/dist/hooks.d.mts +1 -1
  36. package/dist/hooks.d.ts +1 -1
  37. package/dist/hooks.js +26 -26
  38. package/dist/hooks.mjs +4 -4
  39. package/dist/{html2canvas-pro.esm-WJxOmKlq.js → html2canvas-pro.esm-CsuSOHXp.js} +1 -1
  40. package/dist/{html2canvas-pro.esm-WJxOmKlq.js.map → html2canvas-pro.esm-CsuSOHXp.js.map} +1 -1
  41. package/dist/{html2canvas-pro.esm-BInzOtWO.mjs → html2canvas-pro.esm-E7kpobrC.mjs} +1 -1
  42. package/dist/{html2canvas-pro.esm-BInzOtWO.mjs.map → html2canvas-pro.esm-E7kpobrC.mjs.map} +1 -1
  43. package/dist/{index-BNUP2V_N.d.ts → index-B9lSPJTi.d.ts} +184 -2
  44. package/dist/index-B9lSPJTi.d.ts.map +1 -0
  45. package/dist/{index-DOPZuhD8.d.mts → index-DsCU2oGL.d.mts} +259 -77
  46. package/dist/index-DsCU2oGL.d.mts.map +1 -0
  47. package/dist/index.d.mts +2 -2
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.js +92 -84
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.mjs +12 -10
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/{mui-theme-B2wm_cvZ.js → mui-theme-iBHkjXJq.js} +2 -2
  54. package/dist/{mui-theme-B2wm_cvZ.js.map → mui-theme-iBHkjXJq.js.map} +1 -1
  55. package/dist/state-CTITyT0R.js +795 -0
  56. package/dist/state-CTITyT0R.js.map +1 -0
  57. package/dist/state-Sc2b4jri.mjs +382 -0
  58. package/dist/state-Sc2b4jri.mjs.map +1 -0
  59. package/dist/styles.css +5 -0
  60. package/dist/theme.d.mts +2 -185
  61. package/dist/theme.d.ts +2 -185
  62. package/dist/theme.js +1 -1
  63. package/dist/{tooltipMessage-DosF13kZ.js → tooltipMessage-BC5W7H3X.js} +1 -1
  64. package/dist/{tooltipMessage-DosF13kZ.js.map → tooltipMessage-BC5W7H3X.js.map} +1 -1
  65. package/dist/{tooltipMessage-B--I3p1V.mjs → tooltipMessage-B_xMIKWL.mjs} +1 -1
  66. package/dist/{tooltipMessage-B--I3p1V.mjs.map → tooltipMessage-B_xMIKWL.mjs.map} +1 -1
  67. package/dist/types.d.mts +1 -1
  68. package/dist/types.d.ts +1 -1
  69. package/dist/types.js +5 -4
  70. package/dist/types.mjs +3 -2
  71. package/dist/urls-BQW5wjg-.js +13 -0
  72. package/dist/urls-BQW5wjg-.js.map +1 -0
  73. package/dist/urls-DT7FVEcS.mjs +7 -0
  74. package/dist/urls-DT7FVEcS.mjs.map +1 -0
  75. package/dist/version-B9s8yne-.js +300 -0
  76. package/dist/version-B9s8yne-.js.map +1 -0
  77. package/dist/version-DP1kU_7v.mjs +162 -0
  78. package/dist/version-DP1kU_7v.mjs.map +1 -0
  79. package/package.json +5 -3
  80. package/recce-source/.editorconfig +26 -0
  81. package/recce-source/.flake8 +37 -0
  82. package/recce-source/.github/ISSUE_TEMPLATE/bug_report.yml +67 -0
  83. package/recce-source/.github/ISSUE_TEMPLATE/custom.md +10 -0
  84. package/recce-source/.github/ISSUE_TEMPLATE/feature_request.yml +42 -0
  85. package/recce-source/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  86. package/recce-source/.github/copilot-instructions.md +331 -0
  87. package/recce-source/.github/instructions/backend-instructions.md +541 -0
  88. package/recce-source/.github/instructions/frontend-instructions.md +317 -0
  89. package/recce-source/.github/workflows/build-statics.yaml +72 -0
  90. package/recce-source/.github/workflows/bump.yaml +48 -0
  91. package/recce-source/.github/workflows/integration-tests-cloud.yaml +92 -0
  92. package/recce-source/.github/workflows/integration-tests-sqlmesh.yaml +33 -0
  93. package/recce-source/.github/workflows/integration-tests.yaml +52 -0
  94. package/recce-source/.github/workflows/nightly.yaml +246 -0
  95. package/recce-source/.github/workflows/release.yaml +196 -0
  96. package/recce-source/.github/workflows/tests-js.yaml +58 -0
  97. package/recce-source/.github/workflows/tests-python.yaml +128 -0
  98. package/recce-source/.pre-commit-config.yaml +26 -0
  99. package/recce-source/CLAUDE.md +483 -0
  100. package/recce-source/CODE_OF_CONDUCT.md +128 -0
  101. package/recce-source/CONTRIBUTING.md +107 -0
  102. package/recce-source/LICENSE +201 -0
  103. package/recce-source/Makefile +126 -0
  104. package/recce-source/README.md +182 -0
  105. package/recce-source/RECCE_CLOUD.md +81 -0
  106. package/recce-source/SECURITY.md +25 -0
  107. package/recce-source/docs/PACKAGING.md +340 -0
  108. package/recce-source/docs/README.md +1 -0
  109. package/recce-source/integration_tests/dbt/dbt_project.yml +26 -0
  110. package/recce-source/integration_tests/dbt/models/customers.sql +69 -0
  111. package/recce-source/integration_tests/dbt/models/docs.md +14 -0
  112. package/recce-source/integration_tests/dbt/models/orders.sql +56 -0
  113. package/recce-source/integration_tests/dbt/models/schema.yml +82 -0
  114. package/recce-source/integration_tests/dbt/models/staging/schema.yml +31 -0
  115. package/recce-source/integration_tests/dbt/models/staging/stg_customers.sql +22 -0
  116. package/recce-source/integration_tests/dbt/models/staging/stg_orders.sql +23 -0
  117. package/recce-source/integration_tests/dbt/models/staging/stg_payments.sql +25 -0
  118. package/recce-source/integration_tests/dbt/packages.yml +7 -0
  119. package/recce-source/integration_tests/dbt/profiles.yml +8 -0
  120. package/recce-source/integration_tests/dbt/seeds/raw_customers.csv +101 -0
  121. package/recce-source/integration_tests/dbt/seeds/raw_orders.csv +100 -0
  122. package/recce-source/integration_tests/dbt/seeds/raw_payments.csv +114 -0
  123. package/recce-source/integration_tests/dbt/seeds/raw_statuses.csv +5 -0
  124. package/recce-source/integration_tests/dbt/smoke_test.sh +72 -0
  125. package/recce-source/integration_tests/dbt/smoke_test_cloud.sh +71 -0
  126. package/recce-source/integration_tests/sqlmesh/__init__.py +0 -0
  127. package/recce-source/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +9 -0
  128. package/recce-source/integration_tests/sqlmesh/audits/items.sql +7 -0
  129. package/recce-source/integration_tests/sqlmesh/audits/order_items.sql +7 -0
  130. package/recce-source/integration_tests/sqlmesh/config.py +171 -0
  131. package/recce-source/integration_tests/sqlmesh/helper.py +20 -0
  132. package/recce-source/integration_tests/sqlmesh/hooks/__init__.py +0 -0
  133. package/recce-source/integration_tests/sqlmesh/macros/__init__.py +0 -0
  134. package/recce-source/integration_tests/sqlmesh/macros/macros.py +8 -0
  135. package/recce-source/integration_tests/sqlmesh/macros/macros.sql +8 -0
  136. package/recce-source/integration_tests/sqlmesh/macros/utils.py +11 -0
  137. package/recce-source/integration_tests/sqlmesh/metrics/metrics.sql +25 -0
  138. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +41 -0
  139. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +60 -0
  140. package/recce-source/integration_tests/sqlmesh/models/customers.sql +32 -0
  141. package/recce-source/integration_tests/sqlmesh/models/items.py +95 -0
  142. package/recce-source/integration_tests/sqlmesh/models/marketing.sql +15 -0
  143. package/recce-source/integration_tests/sqlmesh/models/order_items.py +95 -0
  144. package/recce-source/integration_tests/sqlmesh/models/orders.py +70 -0
  145. package/recce-source/integration_tests/sqlmesh/models/raw_marketing.py +62 -0
  146. package/recce-source/integration_tests/sqlmesh/models/top_waiters.sql +23 -0
  147. package/recce-source/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +29 -0
  148. package/recce-source/integration_tests/sqlmesh/models/waiter_names.sql +10 -0
  149. package/recce-source/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +29 -0
  150. package/recce-source/integration_tests/sqlmesh/models/waiters.py +62 -0
  151. package/recce-source/integration_tests/sqlmesh/prep_env.sh +16 -0
  152. package/recce-source/integration_tests/sqlmesh/schema.yaml +5 -0
  153. package/recce-source/integration_tests/sqlmesh/seeds/waiter_names.csv +11 -0
  154. package/recce-source/integration_tests/sqlmesh/test_server.sh +29 -0
  155. package/recce-source/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +63 -0
  156. package/recce-source/integration_tests/sqlmesh/tests/test_order_items.yaml +72 -0
  157. package/recce-source/js/.editorconfig +27 -0
  158. package/recce-source/js/.env.development +5 -0
  159. package/recce-source/js/.husky/pre-commit +29 -0
  160. package/recce-source/js/.nvmrc +1 -0
  161. package/recce-source/js/README.md +39 -0
  162. package/recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx +65 -0
  163. package/recce-source/js/app/(mainComponents)/NavBar.tsx +228 -0
  164. package/recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx +107 -0
  165. package/recce-source/js/app/(mainComponents)/TopBar.tsx +252 -0
  166. package/recce-source/js/app/@lineage/default.tsx +20 -0
  167. package/recce-source/js/app/@lineage/page.tsx +14 -0
  168. package/recce-source/js/app/MainLayout.tsx +170 -0
  169. package/recce-source/js/app/Providers.tsx +49 -0
  170. package/recce-source/js/app/checks/page.tsx +296 -0
  171. package/recce-source/js/app/error.tsx +93 -0
  172. package/recce-source/js/app/favicon.ico +0 -0
  173. package/recce-source/js/app/global-error.tsx +115 -0
  174. package/recce-source/js/app/global.css +82 -0
  175. package/recce-source/js/app/layout.tsx +48 -0
  176. package/recce-source/js/app/lineage/page.tsx +15 -0
  177. package/recce-source/js/app/page.tsx +12 -0
  178. package/recce-source/js/app/query/page.tsx +8 -0
  179. package/recce-source/js/biome.json +313 -0
  180. package/recce-source/js/jest.config.js +34 -0
  181. package/recce-source/js/jest.globals.d.ts +32 -0
  182. package/recce-source/js/jest.setup.js +91 -0
  183. package/recce-source/js/next.config.js +16 -0
  184. package/recce-source/js/package-lock.json +13843 -0
  185. package/recce-source/js/package.json +123 -0
  186. package/recce-source/js/pnpm-lock.yaml +9235 -0
  187. package/recce-source/js/pnpm-workspace.yaml +6 -0
  188. package/recce-source/js/postcss.config.js +5 -0
  189. package/recce-source/js/public/auth_callback.html +68 -0
  190. package/recce-source/js/public/imgs/feedback/thumbs-down.png +0 -0
  191. package/recce-source/js/public/imgs/feedback/thumbs-up.png +0 -0
  192. package/recce-source/js/public/imgs/reload-image.svg +4 -0
  193. package/recce-source/js/public/logo/recce-logo-white.png +0 -0
  194. package/recce-source/js/src/components/AuthModal/AuthModal.tsx +202 -0
  195. package/recce-source/js/src/components/app/AvatarDropdown.tsx +159 -0
  196. package/recce-source/js/src/components/app/EnvInfo.tsx +357 -0
  197. package/recce-source/js/src/components/app/Filename.tsx +388 -0
  198. package/recce-source/js/src/components/app/SetupConnectionPopover.tsx +91 -0
  199. package/recce-source/js/src/components/app/StateExporter.tsx +57 -0
  200. package/recce-source/js/src/components/app/StateImporter.tsx +198 -0
  201. package/recce-source/js/src/components/app/StateSharing.tsx +145 -0
  202. package/recce-source/js/src/components/app/StateSynchronizer.tsx +205 -0
  203. package/recce-source/js/src/components/charts/HistogramChart.tsx +291 -0
  204. package/recce-source/js/src/components/charts/SquareIcon.tsx +51 -0
  205. package/recce-source/js/src/components/charts/TopKSummaryList.tsx +457 -0
  206. package/recce-source/js/src/components/charts/chartTheme.ts +74 -0
  207. package/recce-source/js/src/components/check/CheckBreadcrumb.tsx +97 -0
  208. package/recce-source/js/src/components/check/CheckDescription.tsx +134 -0
  209. package/recce-source/js/src/components/check/CheckDetail.tsx +797 -0
  210. package/recce-source/js/src/components/check/CheckEmptyState.tsx +84 -0
  211. package/recce-source/js/src/components/check/CheckList.tsx +320 -0
  212. package/recce-source/js/src/components/check/LineageDiffView.tsx +32 -0
  213. package/recce-source/js/src/components/check/PresetCheckTemplateView.tsx +48 -0
  214. package/recce-source/js/src/components/check/SchemaDiffView.tsx +290 -0
  215. package/recce-source/js/src/components/check/check.ts +25 -0
  216. package/recce-source/js/src/components/check/timeline/CheckTimeline.tsx +163 -0
  217. package/recce-source/js/src/components/check/timeline/CommentInput.tsx +84 -0
  218. package/recce-source/js/src/components/check/timeline/TimelineEvent.tsx +468 -0
  219. package/recce-source/js/src/components/check/timeline/index.ts +12 -0
  220. package/recce-source/js/src/components/check/utils.ts +12 -0
  221. package/recce-source/js/src/components/data-grid/ScreenshotDataGrid.tsx +333 -0
  222. package/recce-source/js/src/components/data-grid/agGridStyles.css +55 -0
  223. package/recce-source/js/src/components/data-grid/agGridTheme.ts +43 -0
  224. package/recce-source/js/src/components/editor/CodeEditor.tsx +107 -0
  225. package/recce-source/js/src/components/editor/DiffEditor.tsx +162 -0
  226. package/recce-source/js/src/components/editor/index.ts +12 -0
  227. package/recce-source/js/src/components/errorboundary/ErrorBoundary.tsx +87 -0
  228. package/recce-source/js/src/components/histogram/HistogramDiffForm.tsx +147 -0
  229. package/recce-source/js/src/components/histogram/HistogramDiffResultView.tsx +63 -0
  230. package/recce-source/js/src/components/icons/index.tsx +142 -0
  231. package/recce-source/js/src/components/lineage/ActionControl.tsx +63 -0
  232. package/recce-source/js/src/components/lineage/ActionTag.tsx +141 -0
  233. package/recce-source/js/src/components/lineage/ChangeStatusLegend.tsx +46 -0
  234. package/recce-source/js/src/components/lineage/ColumnLevelLineageControl.tsx +327 -0
  235. package/recce-source/js/src/components/lineage/ColumnLevelLineageLegend.tsx +57 -0
  236. package/recce-source/js/src/components/lineage/GraphColumnNode.tsx +199 -0
  237. package/recce-source/js/src/components/lineage/GraphEdge.tsx +59 -0
  238. package/recce-source/js/src/components/lineage/GraphNode.tsx +555 -0
  239. package/recce-source/js/src/components/lineage/LineagePage.tsx +10 -0
  240. package/recce-source/js/src/components/lineage/LineageView.tsx +1384 -0
  241. package/recce-source/js/src/components/lineage/LineageViewContext.tsx +86 -0
  242. package/recce-source/js/src/components/lineage/LineageViewContextMenu.tsx +637 -0
  243. package/recce-source/js/src/components/lineage/LineageViewNotification.tsx +64 -0
  244. package/recce-source/js/src/components/lineage/LineageViewTopBar.tsx +596 -0
  245. package/recce-source/js/src/components/lineage/NodeSqlView.tsx +136 -0
  246. package/recce-source/js/src/components/lineage/NodeTag.tsx +278 -0
  247. package/recce-source/js/src/components/lineage/NodeView.tsx +642 -0
  248. package/recce-source/js/src/components/lineage/SandboxView.tsx +436 -0
  249. package/recce-source/js/src/components/lineage/ServerDisconnectedModalContent.tsx +105 -0
  250. package/recce-source/js/src/components/lineage/SetupConnectionBanner.tsx +52 -0
  251. package/recce-source/js/src/components/lineage/SingleEnvironmentQueryView.tsx +152 -0
  252. package/recce-source/js/src/components/lineage/graph.test.ts +31 -0
  253. package/recce-source/js/src/components/lineage/graph.ts +58 -0
  254. package/recce-source/js/src/components/lineage/lineage.test.ts +169 -0
  255. package/recce-source/js/src/components/lineage/lineage.ts +521 -0
  256. package/recce-source/js/src/components/lineage/styles.css +42 -0
  257. package/recce-source/js/src/components/lineage/styles.tsx +165 -0
  258. package/recce-source/js/src/components/lineage/useMultiNodesAction.ts +352 -0
  259. package/recce-source/js/src/components/lineage/useValueDiffAlertDialog.tsx +108 -0
  260. package/recce-source/js/src/components/onboarding-guide/Notification.tsx +62 -0
  261. package/recce-source/js/src/components/profile/ProfileDiffForm.tsx +134 -0
  262. package/recce-source/js/src/components/profile/ProfileDiffResultView.tsx +245 -0
  263. package/recce-source/js/src/components/query/ChangedOnlyCheckbox.tsx +29 -0
  264. package/recce-source/js/src/components/query/DiffText.tsx +120 -0
  265. package/recce-source/js/src/components/query/QueryDiffResultView.tsx +470 -0
  266. package/recce-source/js/src/components/query/QueryForm.tsx +80 -0
  267. package/recce-source/js/src/components/query/QueryPage.tsx +282 -0
  268. package/recce-source/js/src/components/query/QueryResultView.tsx +180 -0
  269. package/recce-source/js/src/components/query/SetupConnectionGuide.tsx +57 -0
  270. package/recce-source/js/src/components/query/SqlEditor.tsx +245 -0
  271. package/recce-source/js/src/components/query/ToggleSwitch.tsx +84 -0
  272. package/recce-source/js/src/components/query/styles.css +21 -0
  273. package/recce-source/js/src/components/routing/DirectUrlAccess.test.tsx +428 -0
  274. package/recce-source/js/src/components/routing/LineageStatePreservation.test.tsx +311 -0
  275. package/recce-source/js/src/components/routing/Navigation.test.tsx +256 -0
  276. package/recce-source/js/src/components/rowcount/RowCountDiffResultView.tsx +109 -0
  277. package/recce-source/js/src/components/rowcount/delta.ts +11 -0
  278. package/recce-source/js/src/components/run/RunList.tsx +303 -0
  279. package/recce-source/js/src/components/run/RunModal.tsx +191 -0
  280. package/recce-source/js/src/components/run/RunPage.tsx +26 -0
  281. package/recce-source/js/src/components/run/RunResultPane.tsx +454 -0
  282. package/recce-source/js/src/components/run/RunStatusAndDate.tsx +106 -0
  283. package/recce-source/js/src/components/run/RunToolbar.tsx +70 -0
  284. package/recce-source/js/src/components/run/RunView.tsx +196 -0
  285. package/recce-source/js/src/components/run/registry.ts +214 -0
  286. package/recce-source/js/src/components/run/types.ts +14 -0
  287. package/recce-source/js/src/components/schema/ColumnNameCell.test.tsx +169 -0
  288. package/recce-source/js/src/components/schema/ColumnNameCell.tsx +198 -0
  289. package/recce-source/js/src/components/schema/SchemaView.tsx +337 -0
  290. package/recce-source/js/src/components/schema/schemaDiff.ts +32 -0
  291. package/recce-source/js/src/components/schema/style.css +134 -0
  292. package/recce-source/js/src/components/screenshot/ScreenshotBox.tsx +39 -0
  293. package/recce-source/js/src/components/shared/HistoryToggle.tsx +35 -0
  294. package/recce-source/js/src/components/split/Split.tsx +40 -0
  295. package/recce-source/js/src/components/split/styles.css +24 -0
  296. package/recce-source/js/src/components/summary/ChangeSummary.tsx +264 -0
  297. package/recce-source/js/src/components/summary/SchemaSummary.tsx +123 -0
  298. package/recce-source/js/src/components/summary/SummaryView.tsx +29 -0
  299. package/recce-source/js/src/components/timeout/IdleTimeoutBadge.tsx +48 -0
  300. package/recce-source/js/src/components/top-k/TopKDiffForm.tsx +58 -0
  301. package/recce-source/js/src/components/top-k/TopKDiffResultView.tsx +73 -0
  302. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnGroupHeader.tsx +228 -0
  303. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnHeader.tsx +113 -0
  304. package/recce-source/js/src/components/ui/dataGrid/defaultRenderCell.tsx +72 -0
  305. package/recce-source/js/src/components/ui/dataGrid/index.ts +23 -0
  306. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.test.tsx +607 -0
  307. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.tsx +211 -0
  308. package/recce-source/js/src/components/ui/dataGrid/schemaCells.test.tsx +452 -0
  309. package/recce-source/js/src/components/ui/dataGrid/schemaCells.tsx +142 -0
  310. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.test.tsx +178 -0
  311. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.tsx +275 -0
  312. package/recce-source/js/src/components/ui/markdown/ExternalLinkConfirmDialog.tsx +134 -0
  313. package/recce-source/js/src/components/ui/markdown/MarkdownContent.tsx +364 -0
  314. package/recce-source/js/src/components/ui/mui/index.ts +13 -0
  315. package/recce-source/js/src/components/ui/mui-provider.tsx +67 -0
  316. package/recce-source/js/src/components/ui/mui-theme.ts +1039 -0
  317. package/recce-source/js/src/components/ui/mui-utils.ts +113 -0
  318. package/recce-source/js/src/components/ui/toaster.tsx +288 -0
  319. package/recce-source/js/src/components/valuediff/ValueDiffDetailResultView.tsx +217 -0
  320. package/recce-source/js/src/components/valuediff/ValueDiffForm.tsx +246 -0
  321. package/recce-source/js/src/components/valuediff/ValueDiffResultView.tsx +82 -0
  322. package/recce-source/js/src/components/valuediff/shared.ts +33 -0
  323. package/recce-source/js/src/constants/tooltipMessage.ts +3 -0
  324. package/recce-source/js/src/constants/urls.ts +1 -0
  325. package/recce-source/js/src/lib/UrlHash.ts +12 -0
  326. package/recce-source/js/src/lib/api/adhocQuery.ts +70 -0
  327. package/recce-source/js/src/lib/api/axiosClient.ts +9 -0
  328. package/recce-source/js/src/lib/api/cacheKeys.ts +13 -0
  329. package/recce-source/js/src/lib/api/checkEvents.ts +252 -0
  330. package/recce-source/js/src/lib/api/checks.ts +129 -0
  331. package/recce-source/js/src/lib/api/cll.ts +53 -0
  332. package/recce-source/js/src/lib/api/connectToCloud.ts +13 -0
  333. package/recce-source/js/src/lib/api/flag.ts +37 -0
  334. package/recce-source/js/src/lib/api/info.ts +198 -0
  335. package/recce-source/js/src/lib/api/instanceInfo.ts +25 -0
  336. package/recce-source/js/src/lib/api/keepAlive.ts +108 -0
  337. package/recce-source/js/src/lib/api/lineagecheck.ts +35 -0
  338. package/recce-source/js/src/lib/api/localStorageKeys.ts +7 -0
  339. package/recce-source/js/src/lib/api/models.ts +59 -0
  340. package/recce-source/js/src/lib/api/profile.ts +65 -0
  341. package/recce-source/js/src/lib/api/rowcount.ts +19 -0
  342. package/recce-source/js/src/lib/api/runs.ts +174 -0
  343. package/recce-source/js/src/lib/api/schemacheck.ts +31 -0
  344. package/recce-source/js/src/lib/api/select.ts +25 -0
  345. package/recce-source/js/src/lib/api/sessionStorageKeys.ts +8 -0
  346. package/recce-source/js/src/lib/api/state.ts +117 -0
  347. package/recce-source/js/src/lib/api/track.ts +281 -0
  348. package/recce-source/js/src/lib/api/types.ts +284 -0
  349. package/recce-source/js/src/lib/api/user.ts +42 -0
  350. package/recce-source/js/src/lib/api/valuediff.ts +46 -0
  351. package/recce-source/js/src/lib/api/version.ts +40 -0
  352. package/recce-source/js/src/lib/const.ts +9 -0
  353. package/recce-source/js/src/lib/dataGrid/crossFunctionConsistency.test.ts +626 -0
  354. package/recce-source/js/src/lib/dataGrid/dataGridFactory.test.ts +2140 -0
  355. package/recce-source/js/src/lib/dataGrid/dataGridFactory.ts +397 -0
  356. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.test.ts +132 -0
  357. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.ts +126 -0
  358. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.test.ts +1627 -0
  359. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.ts +140 -0
  360. package/recce-source/js/src/lib/dataGrid/generators/toDataGrid.ts +67 -0
  361. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.test.ts +142 -0
  362. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.ts +71 -0
  363. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.test.ts +258 -0
  364. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.ts +153 -0
  365. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.test.ts +951 -0
  366. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.ts +221 -0
  367. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.test.ts +395 -0
  368. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.ts +184 -0
  369. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.test.ts +884 -0
  370. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.ts +113 -0
  371. package/recce-source/js/src/lib/dataGrid/index.ts +51 -0
  372. package/recce-source/js/src/lib/dataGrid/propertyBased.test.ts +858 -0
  373. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.test.ts +482 -0
  374. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.ts +345 -0
  375. package/recce-source/js/src/lib/dataGrid/shared/dataTypeEdgeCases.test.ts +698 -0
  376. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.test.tsx +820 -0
  377. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.tsx +277 -0
  378. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.test.ts +785 -0
  379. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.ts +370 -0
  380. package/recce-source/js/src/lib/dataGrid/shared/index.ts +81 -0
  381. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.test.ts +909 -0
  382. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.ts +325 -0
  383. package/recce-source/js/src/lib/dataGrid/shared/simpleColumnBuilder.tsx +240 -0
  384. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.test.tsx +719 -0
  385. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.tsx +231 -0
  386. package/recce-source/js/src/lib/dataGrid/shared/validation.test.ts +559 -0
  387. package/recce-source/js/src/lib/dataGrid/shared/validation.ts +367 -0
  388. package/recce-source/js/src/lib/dataGrid/warehouseNamingConventions.test.ts +1117 -0
  389. package/recce-source/js/src/lib/formatSelect.ts +50 -0
  390. package/recce-source/js/src/lib/hooks/ApiConfigContext.tsx +181 -0
  391. package/recce-source/js/src/lib/hooks/IdleTimeoutContext.tsx +177 -0
  392. package/recce-source/js/src/lib/hooks/LineageGraphContext.tsx +512 -0
  393. package/recce-source/js/src/lib/hooks/RecceActionContext.tsx +269 -0
  394. package/recce-source/js/src/lib/hooks/RecceCheckContext.tsx +33 -0
  395. package/recce-source/js/src/lib/hooks/RecceContextProvider.tsx +54 -0
  396. package/recce-source/js/src/lib/hooks/RecceInstanceContext.tsx +129 -0
  397. package/recce-source/js/src/lib/hooks/RecceQueryContext.tsx +98 -0
  398. package/recce-source/js/src/lib/hooks/RecceShareStateContext.tsx +59 -0
  399. package/recce-source/js/src/lib/hooks/ScreenShot.tsx +399 -0
  400. package/recce-source/js/src/lib/hooks/useAppRouter.test.ts +211 -0
  401. package/recce-source/js/src/lib/hooks/useAppRouter.ts +200 -0
  402. package/recce-source/js/src/lib/hooks/useCheckEvents.ts +99 -0
  403. package/recce-source/js/src/lib/hooks/useCheckToast.tsx +14 -0
  404. package/recce-source/js/src/lib/hooks/useClipBoardToast.tsx +27 -0
  405. package/recce-source/js/src/lib/hooks/useCountdownToast.tsx +102 -0
  406. package/recce-source/js/src/lib/hooks/useFeedbackCollectionToast.tsx +130 -0
  407. package/recce-source/js/src/lib/hooks/useGuideToast.tsx +45 -0
  408. package/recce-source/js/src/lib/hooks/useIdleDetection.tsx +185 -0
  409. package/recce-source/js/src/lib/hooks/useModelColumns.tsx +113 -0
  410. package/recce-source/js/src/lib/hooks/useRecceInstanceInfo.tsx +13 -0
  411. package/recce-source/js/src/lib/hooks/useRecceServerFlag.tsx +13 -0
  412. package/recce-source/js/src/lib/hooks/useRun.tsx +89 -0
  413. package/recce-source/js/src/lib/hooks/useThemeColors.ts +115 -0
  414. package/recce-source/js/src/lib/mergeKeys.test.ts +89 -0
  415. package/recce-source/js/src/lib/mergeKeys.ts +86 -0
  416. package/recce-source/js/src/lib/result/ResultErrorFallback.tsx +9 -0
  417. package/recce-source/js/src/lib/utils/formatTime.ts +84 -0
  418. package/recce-source/js/src/lib/utils/urls.ts +16 -0
  419. package/recce-source/js/src/utils/DropdownValuesInput.tsx +297 -0
  420. package/recce-source/js/src/utils/formatters.tsx +237 -0
  421. package/recce-source/js/src/utils/transforms.ts +81 -0
  422. package/recce-source/js/tsconfig.json +47 -0
  423. package/recce-source/macros/README.md +8 -0
  424. package/recce-source/macros/recce_athena.sql +73 -0
  425. package/recce-source/pyproject.toml +109 -0
  426. package/recce-source/recce/VERSION +1 -0
  427. package/recce-source/recce/__init__.py +84 -0
  428. package/recce-source/recce/adapter/__init__.py +0 -0
  429. package/recce-source/recce/adapter/base.py +109 -0
  430. package/recce-source/recce/adapter/dbt_adapter/__init__.py +1699 -0
  431. package/recce-source/recce/adapter/dbt_adapter/dbt_version.py +42 -0
  432. package/recce-source/recce/adapter/sqlmesh_adapter.py +141 -0
  433. package/recce-source/recce/apis/__init__.py +0 -0
  434. package/recce-source/recce/apis/check_api.py +203 -0
  435. package/recce-source/recce/apis/check_events_api.py +353 -0
  436. package/recce-source/recce/apis/check_func.py +130 -0
  437. package/recce-source/recce/apis/run_api.py +130 -0
  438. package/recce-source/recce/apis/run_func.py +258 -0
  439. package/recce-source/recce/artifact.py +266 -0
  440. package/recce-source/recce/cli.py +1846 -0
  441. package/recce-source/recce/config.py +127 -0
  442. package/recce-source/recce/connect_to_cloud.py +138 -0
  443. package/recce-source/recce/core.py +334 -0
  444. package/recce-source/recce/diff.py +26 -0
  445. package/recce-source/recce/event/CONFIG +1 -0
  446. package/recce-source/recce/event/SENTRY_DNS +1 -0
  447. package/recce-source/recce/event/__init__.py +304 -0
  448. package/recce-source/recce/event/collector.py +184 -0
  449. package/recce-source/recce/event/track.py +158 -0
  450. package/recce-source/recce/exceptions.py +21 -0
  451. package/recce-source/recce/git.py +77 -0
  452. package/recce-source/recce/github.py +222 -0
  453. package/recce-source/recce/mcp_server.py +861 -0
  454. package/recce-source/recce/models/__init__.py +6 -0
  455. package/recce-source/recce/models/check.py +473 -0
  456. package/recce-source/recce/models/run.py +46 -0
  457. package/recce-source/recce/models/types.py +218 -0
  458. package/recce-source/recce/pull_request.py +124 -0
  459. package/recce-source/recce/run.py +390 -0
  460. package/recce-source/recce/server.py +877 -0
  461. package/recce-source/recce/state/__init__.py +31 -0
  462. package/recce-source/recce/state/cloud.py +644 -0
  463. package/recce-source/recce/state/const.py +26 -0
  464. package/recce-source/recce/state/local.py +56 -0
  465. package/recce-source/recce/state/state.py +119 -0
  466. package/recce-source/recce/state/state_loader.py +174 -0
  467. package/recce-source/recce/summary.py +575 -0
  468. package/recce-source/recce/tasks/__init__.py +23 -0
  469. package/recce-source/recce/tasks/core.py +134 -0
  470. package/recce-source/recce/tasks/dataframe.py +170 -0
  471. package/recce-source/recce/tasks/histogram.py +433 -0
  472. package/recce-source/recce/tasks/lineage.py +19 -0
  473. package/recce-source/recce/tasks/profile.py +298 -0
  474. package/recce-source/recce/tasks/query.py +450 -0
  475. package/recce-source/recce/tasks/rowcount.py +277 -0
  476. package/recce-source/recce/tasks/schema.py +65 -0
  477. package/recce-source/recce/tasks/top_k.py +172 -0
  478. package/recce-source/recce/tasks/utils.py +147 -0
  479. package/recce-source/recce/tasks/valuediff.py +497 -0
  480. package/recce-source/recce/util/__init__.py +4 -0
  481. package/recce-source/recce/util/api_token.py +80 -0
  482. package/recce-source/recce/util/breaking.py +330 -0
  483. package/recce-source/recce/util/cache.py +25 -0
  484. package/recce-source/recce/util/cll.py +355 -0
  485. package/recce-source/recce/util/cloud/__init__.py +15 -0
  486. package/recce-source/recce/util/cloud/base.py +115 -0
  487. package/recce-source/recce/util/cloud/check_events.py +190 -0
  488. package/recce-source/recce/util/cloud/checks.py +242 -0
  489. package/recce-source/recce/util/io.py +120 -0
  490. package/recce-source/recce/util/lineage.py +83 -0
  491. package/recce-source/recce/util/logger.py +25 -0
  492. package/recce-source/recce/util/onboarding_state.py +45 -0
  493. package/recce-source/recce/util/perf_tracking.py +85 -0
  494. package/recce-source/recce/util/pydantic_model.py +22 -0
  495. package/recce-source/recce/util/recce_cloud.py +454 -0
  496. package/recce-source/recce/util/singleton.py +18 -0
  497. package/recce-source/recce/util/startup_perf.py +121 -0
  498. package/recce-source/recce/yaml/__init__.py +58 -0
  499. package/recce-source/recce_cloud/README.md +780 -0
  500. package/recce-source/recce_cloud/VERSION +1 -0
  501. package/recce-source/recce_cloud/__init__.py +24 -0
  502. package/recce-source/recce_cloud/api/__init__.py +17 -0
  503. package/recce-source/recce_cloud/api/base.py +132 -0
  504. package/recce-source/recce_cloud/api/client.py +186 -0
  505. package/recce-source/recce_cloud/api/exceptions.py +26 -0
  506. package/recce-source/recce_cloud/api/factory.py +63 -0
  507. package/recce-source/recce_cloud/api/github.py +106 -0
  508. package/recce-source/recce_cloud/api/gitlab.py +111 -0
  509. package/recce-source/recce_cloud/artifact.py +57 -0
  510. package/recce-source/recce_cloud/ci_providers/__init__.py +9 -0
  511. package/recce-source/recce_cloud/ci_providers/base.py +82 -0
  512. package/recce-source/recce_cloud/ci_providers/detector.py +147 -0
  513. package/recce-source/recce_cloud/ci_providers/github_actions.py +136 -0
  514. package/recce-source/recce_cloud/ci_providers/gitlab_ci.py +130 -0
  515. package/recce-source/recce_cloud/cli.py +434 -0
  516. package/recce-source/recce_cloud/download.py +230 -0
  517. package/recce-source/recce_cloud/hatch_build.py +20 -0
  518. package/recce-source/recce_cloud/pyproject.toml +49 -0
  519. package/recce-source/recce_cloud/upload.py +214 -0
  520. package/recce-source/test.py +0 -0
  521. package/recce-source/tests/__init__.py +0 -0
  522. package/recce-source/tests/adapter/__init__.py +0 -0
  523. package/recce-source/tests/adapter/dbt_adapter/__init__.py +0 -0
  524. package/recce-source/tests/adapter/dbt_adapter/conftest.py +17 -0
  525. package/recce-source/tests/adapter/dbt_adapter/dbt_test_helper.py +298 -0
  526. package/recce-source/tests/adapter/dbt_adapter/test_dbt_adapter.py +25 -0
  527. package/recce-source/tests/adapter/dbt_adapter/test_dbt_cll.py +717 -0
  528. package/recce-source/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +4 -0
  529. package/recce-source/tests/adapter/dbt_adapter/test_proj/manifest.json +1 -0
  530. package/recce-source/tests/adapter/dbt_adapter/test_proj/package-lock.yml +8 -0
  531. package/recce-source/tests/adapter/dbt_adapter/test_proj/packages.yml +7 -0
  532. package/recce-source/tests/adapter/dbt_adapter/test_proj/profiles.yml +6 -0
  533. package/recce-source/tests/adapter/dbt_adapter/test_selector.py +205 -0
  534. package/recce-source/tests/apis/__init__.py +0 -0
  535. package/recce-source/tests/apis/row_count_diff.json +59 -0
  536. package/recce-source/tests/apis/test_check_events_api.py +615 -0
  537. package/recce-source/tests/apis/test_run_func.py +433 -0
  538. package/recce-source/tests/catalog.json +527 -0
  539. package/recce-source/tests/data/manifest/base/catalog.json +1 -0
  540. package/recce-source/tests/data/manifest/base/manifest.json +1 -0
  541. package/recce-source/tests/data/manifest/pr2/catalog.json +1 -0
  542. package/recce-source/tests/data/manifest/pr2/manifest.json +1 -0
  543. package/recce-source/tests/manifest.json +10655 -0
  544. package/recce-source/tests/models/__init__.py +0 -0
  545. package/recce-source/tests/models/test_check.py +731 -0
  546. package/recce-source/tests/models/test_run_models.py +295 -0
  547. package/recce-source/tests/recce_cloud/__init__.py +0 -0
  548. package/recce-source/tests/recce_cloud/test_ci_providers.py +351 -0
  549. package/recce-source/tests/recce_cloud/test_cli.py +735 -0
  550. package/recce-source/tests/recce_cloud/test_client.py +379 -0
  551. package/recce-source/tests/recce_cloud/test_platform_clients.py +483 -0
  552. package/recce-source/tests/recce_state.json +1 -0
  553. package/recce-source/tests/state/test_cloud.py +719 -0
  554. package/recce-source/tests/state/test_local.py +164 -0
  555. package/recce-source/tests/state/test_state_loader.py +211 -0
  556. package/recce-source/tests/tasks/__init__.py +0 -0
  557. package/recce-source/tests/tasks/conftest.py +4 -0
  558. package/recce-source/tests/tasks/test_histogram.py +129 -0
  559. package/recce-source/tests/tasks/test_lineage.py +55 -0
  560. package/recce-source/tests/tasks/test_preset_checks.py +64 -0
  561. package/recce-source/tests/tasks/test_profile.py +397 -0
  562. package/recce-source/tests/tasks/test_query.py +528 -0
  563. package/recce-source/tests/tasks/test_row_count.py +133 -0
  564. package/recce-source/tests/tasks/test_schema.py +122 -0
  565. package/recce-source/tests/tasks/test_top_k.py +77 -0
  566. package/recce-source/tests/tasks/test_utils.py +439 -0
  567. package/recce-source/tests/tasks/test_valuediff.py +361 -0
  568. package/recce-source/tests/test_cli.py +236 -0
  569. package/recce-source/tests/test_cli_mcp_optional.py +45 -0
  570. package/recce-source/tests/test_cloud_listing_cli.py +324 -0
  571. package/recce-source/tests/test_config.py +43 -0
  572. package/recce-source/tests/test_connect_to_cloud.py +82 -0
  573. package/recce-source/tests/test_core.py +174 -0
  574. package/recce-source/tests/test_dbt.py +36 -0
  575. package/recce-source/tests/test_mcp_server.py +505 -0
  576. package/recce-source/tests/test_pull_request.py +130 -0
  577. package/recce-source/tests/test_server.py +202 -0
  578. package/recce-source/tests/test_server_lifespan.py +138 -0
  579. package/recce-source/tests/test_summary.py +73 -0
  580. package/recce-source/tests/util/__init__.py +0 -0
  581. package/recce-source/tests/util/cloud/__init__.py +0 -0
  582. package/recce-source/tests/util/cloud/test_check_events.py +255 -0
  583. package/recce-source/tests/util/cloud/test_checks.py +204 -0
  584. package/recce-source/tests/util/test_api_token.py +119 -0
  585. package/recce-source/tests/util/test_breaking.py +1427 -0
  586. package/recce-source/tests/util/test_cll.py +706 -0
  587. package/recce-source/tests/util/test_lineage.py +122 -0
  588. package/recce-source/tests/util/test_onboarding_state.py +84 -0
  589. package/recce-source/tests/util/test_recce_cloud.py +231 -0
  590. package/recce-source/tox.ini +40 -0
  591. package/recce-source/uv.lock +3928 -0
  592. package/src/api/index.ts +32 -0
  593. package/src/components/index.ts +154 -0
  594. package/src/global-styles.css +81 -0
  595. package/src/global.d.ts +14 -0
  596. package/src/hooks/index.ts +56 -0
  597. package/src/index.ts +17 -0
  598. package/src/lib/hooks/RouteConfigContext.ts +139 -0
  599. package/src/lib/hooks/useAppRouter.ts +240 -0
  600. package/src/mui-augmentation.d.ts +139 -0
  601. package/src/theme/index.ts +13 -0
  602. package/src/theme.ts +23 -0
  603. package/src/types/index.ts +23 -0
  604. package/dist/RecceCheckContext-DPpu9nG5.js +0 -303
  605. package/dist/RecceCheckContext-DPpu9nG5.js.map +0 -1
  606. package/dist/RecceCheckContext-bXdfQLGG.mjs +0 -229
  607. package/dist/RecceCheckContext-bXdfQLGG.mjs.map +0 -1
  608. package/dist/hooks-B9hsc1oD.js +0 -40
  609. package/dist/index-BNUP2V_N.d.ts.map +0 -1
  610. package/dist/index-DOPZuhD8.d.mts.map +0 -1
  611. package/dist/state-B9yzhuKs.mjs.map +0 -1
  612. package/dist/state-DOUPNifc.css.map +0 -1
  613. package/dist/state-IA7HWYOs.css.map +0 -1
  614. package/dist/state-lPCQsWy5.js.map +0 -1
  615. package/dist/theme.d.mts.map +0 -1
  616. package/dist/theme.d.ts.map +0 -1
  617. package/dist/urls-B1Ymdoz-.mjs.map +0 -1
  618. package/dist/urls-C4eAc82S.js.map +0 -1
  619. package/dist/version-Dh8sZhvs.js +0 -147
  620. package/dist/version-Dh8sZhvs.js.map +0 -1
  621. package/dist/version-OnOKzBeQ.mjs +0 -93
  622. package/dist/version-OnOKzBeQ.mjs.map +0 -1
@@ -0,0 +1,325 @@
1
+ /**
2
+ * @file rowBuilders.ts
3
+ * @description Shared row building utilities for diff grids
4
+ *
5
+ * Provides unified row generation logic for both querydiff (dual DataFrames)
6
+ * and valuediff (joined DataFrame with in_a/in_b) scenarios.
7
+ */
8
+
9
+ import _ from "lodash";
10
+ import { DataFrame, RowObjectType } from "@/lib/api/types";
11
+ import { mergeKeysWithStatus } from "@/lib/mergeKeys";
12
+ import { keyToNumber } from "@/utils/transforms";
13
+ import { ColumnMapEntry, MergeColumnMapEntry, RowStats } from "./gridUtils";
14
+
15
+ // ============================================================================
16
+ // Types
17
+ // ============================================================================
18
+
19
+ /**
20
+ * Union type for column map entries (supports both querydiff and valuediff)
21
+ */
22
+ export type DiffColumnMapEntry = ColumnMapEntry | MergeColumnMapEntry;
23
+
24
+ /**
25
+ * Type guard to check if entry is a MergeColumnMapEntry (has separate base/current keys)
26
+ */
27
+ function isMergeColumnMapEntry(
28
+ entry: DiffColumnMapEntry,
29
+ ): entry is MergeColumnMapEntry {
30
+ return "baseColumnKey" in entry && "currentColumnKey" in entry;
31
+ }
32
+
33
+ /**
34
+ * Configuration for building diff rows
35
+ */
36
+ export interface BuildDiffRowsConfig {
37
+ /**
38
+ * Map of primary key values to base row data
39
+ * Keys should already be normalized (e.g., lowercased if case-insensitive)
40
+ */
41
+ baseMap: Record<string, RowObjectType | undefined>;
42
+
43
+ /**
44
+ * Map of primary key values to current row data
45
+ * Keys should already be normalized (e.g., lowercased if case-insensitive)
46
+ */
47
+ currentMap: Record<string, RowObjectType | undefined>;
48
+
49
+ /**
50
+ * Column definitions for base data
51
+ * Used to iterate and extract values from base rows
52
+ */
53
+ baseColumns: DataFrame["columns"];
54
+
55
+ /**
56
+ * Column definitions for current data
57
+ * Used to iterate and extract values from current rows
58
+ * For joined data (valuediff), this is the same as baseColumns
59
+ */
60
+ currentColumns: DataFrame["columns"];
61
+
62
+ /**
63
+ * Column map for tracking column metadata and status
64
+ * This object WILL BE MUTATED to update column.status when modifications are detected
65
+ */
66
+ columnMap: Record<string, DiffColumnMapEntry>;
67
+
68
+ /**
69
+ * List of primary key column names
70
+ * These columns are stored directly on the row (not prefixed with base__/current__)
71
+ */
72
+ primaryKeys: string[];
73
+
74
+ /**
75
+ * Whether to filter out unchanged rows
76
+ * When true, only rows with status "added", "removed", or "modified" are returned
77
+ */
78
+ changedOnly?: boolean;
79
+ }
80
+
81
+ /**
82
+ * Result from building diff rows
83
+ */
84
+ export interface BuildDiffRowsResult {
85
+ /** The generated rows with __status and prefixed column values */
86
+ rows: RowObjectType[];
87
+
88
+ /** Statistics about row changes */
89
+ rowStats: RowStats;
90
+ }
91
+
92
+ // ============================================================================
93
+ // Helper Functions
94
+ // ============================================================================
95
+
96
+ /**
97
+ * Checks if a column name is a primary key (exact matching)
98
+ */
99
+ function isPrimaryKey(columnName: string, primaryKeys: string[]): boolean {
100
+ return primaryKeys.includes(columnName);
101
+ }
102
+
103
+ /**
104
+ * Gets the column key to use for value comparison
105
+ * For MergeColumnMapEntry, uses baseColumnKey/currentColumnKey
106
+ * For ColumnMapEntry, uses the single key
107
+ */
108
+ function getComparisonKeys(entry: DiffColumnMapEntry): {
109
+ baseKey: string;
110
+ currentKey: string;
111
+ } {
112
+ if (isMergeColumnMapEntry(entry)) {
113
+ return {
114
+ baseKey: entry.baseColumnKey,
115
+ currentKey: entry.currentColumnKey,
116
+ };
117
+ }
118
+ return {
119
+ baseKey: entry.key,
120
+ currentKey: entry.key,
121
+ };
122
+ }
123
+
124
+ /**
125
+ * Populates row values from a source row for the given columns
126
+ *
127
+ * @param targetRow - The row object to populate
128
+ * @param sourceRow - The source row to extract values from
129
+ * @param columns - Column definitions to iterate
130
+ * @param prefix - Prefix to add to column keys (e.g., "base__" or "current__")
131
+ * @param primaryKeys - Primary key column names (stored without prefix)
132
+ */
133
+ function populateRowValues(
134
+ targetRow: RowObjectType,
135
+ sourceRow: RowObjectType,
136
+ columns: DataFrame["columns"],
137
+ prefix: string,
138
+ primaryKeys: string[],
139
+ ): void {
140
+ columns.forEach((col) => {
141
+ const colKey = col.key;
142
+ const isPK = isPrimaryKey(colKey, primaryKeys);
143
+
144
+ if (isPK) {
145
+ // Primary keys stored directly (not prefixed)
146
+ targetRow[String(colKey).toLowerCase()] = sourceRow[colKey];
147
+ } else {
148
+ // Non-PK columns are prefixed
149
+ targetRow[`${prefix}${colKey}`.toLowerCase()] = sourceRow[colKey];
150
+ }
151
+ });
152
+ }
153
+
154
+ /**
155
+ * Detects if a row has been modified by comparing base and current values
156
+ * Also mutates columnMap entries to mark modified columns
157
+ *
158
+ * @returns true if any non-PK column value differs
159
+ */
160
+ function detectModifications(
161
+ baseRow: RowObjectType,
162
+ currentRow: RowObjectType,
163
+ columnMap: Record<string, DiffColumnMapEntry>,
164
+ primaryKeys: string[],
165
+ ): boolean {
166
+ let isModified = false;
167
+
168
+ for (const [name, column] of Object.entries(columnMap)) {
169
+ // Skip index column
170
+ if (name === "index") continue;
171
+
172
+ // Skip primary key columns
173
+ if (isPrimaryKey(name, primaryKeys)) continue;
174
+
175
+ const { baseKey, currentKey } = getComparisonKeys(column);
176
+
177
+ // Skip if either key is unknown (column added/removed in schema)
178
+ if (baseKey === "unknown" || currentKey === "unknown") continue;
179
+
180
+ const baseValue = baseRow[baseKey];
181
+ const currentValue = currentRow[currentKey];
182
+
183
+ if (!_.isEqual(baseValue, currentValue)) {
184
+ isModified = true;
185
+ // Mutate column status to track which columns have modifications
186
+ column.status = "modified";
187
+ }
188
+ }
189
+
190
+ return isModified;
191
+ }
192
+
193
+ // ============================================================================
194
+ // Main Function
195
+ // ============================================================================
196
+
197
+ /**
198
+ * Builds diff rows from base and current row maps
199
+ *
200
+ * @description This function unifies the row generation logic from both
201
+ * `toDataDiffGrid` (querydiff) and `toValueDiffGrid` (valuediff).
202
+ *
203
+ * Key behaviors:
204
+ * - Merges base and current row keys to determine all unique rows
205
+ * - Creates row objects with `_index` and `__status` fields
206
+ * - Prefixes non-PK columns with `base__` or `current__` (lowercased)
207
+ * - Stores PK columns directly without prefix
208
+ * - Detects added/removed/modified status
209
+ * - Mutates columnMap to mark modified columns
210
+ * - Optionally filters to changed rows only
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * // For querydiff (two separate DataFrames)
215
+ * const result = buildDiffRows({
216
+ * baseMap,
217
+ * currentMap,
218
+ * baseColumns: base.columns,
219
+ * currentColumns: current.columns,
220
+ * columnMap: mergedColumnMap,
221
+ * primaryKeys: ["id"],
222
+ * changedOnly: false,
223
+ * });
224
+ *
225
+ * // For valuediff (joined DataFrame)
226
+ * const result = buildDiffRows({
227
+ * baseMap,
228
+ * currentMap,
229
+ * baseColumns: df.columns,
230
+ * currentColumns: df.columns, // Same columns for both
231
+ * columnMap: joinedColumnMap,
232
+ * primaryKeys: ["id"],
233
+ * changedOnly: true,
234
+ * });
235
+ * ```
236
+ */
237
+ export function buildDiffRows(
238
+ config: BuildDiffRowsConfig,
239
+ ): BuildDiffRowsResult {
240
+ const {
241
+ baseMap,
242
+ currentMap,
243
+ baseColumns,
244
+ currentColumns,
245
+ columnMap,
246
+ primaryKeys,
247
+ changedOnly = false,
248
+ } = config;
249
+
250
+ // Merge base and current keys to get all unique row identifiers
251
+ const mergedMap = mergeKeysWithStatus(
252
+ Object.keys(baseMap),
253
+ Object.keys(currentMap),
254
+ );
255
+
256
+ const rowStats: RowStats = {
257
+ added: 0,
258
+ removed: 0,
259
+ modified: 0,
260
+ };
261
+
262
+ // Build rows from merged keys
263
+ let rows = Object.entries(mergedMap).map(([key]) => {
264
+ const baseRow = baseMap[key];
265
+ const currentRow = currentMap[key];
266
+
267
+ // Initialize row with index and undefined status
268
+ const row: RowObjectType = {
269
+ _index: keyToNumber(key),
270
+ __status: undefined,
271
+ };
272
+
273
+ // Populate base values
274
+ if (baseRow) {
275
+ populateRowValues(row, baseRow, baseColumns, "base__", primaryKeys);
276
+ }
277
+
278
+ // Populate current values
279
+ if (currentRow) {
280
+ populateRowValues(
281
+ row,
282
+ currentRow,
283
+ currentColumns,
284
+ "current__",
285
+ primaryKeys,
286
+ );
287
+ }
288
+
289
+ // Determine row status
290
+ if (!baseRow) {
291
+ row.__status = "added";
292
+ rowStats.added++;
293
+ } else if (!currentRow) {
294
+ row.__status = "removed";
295
+ rowStats.removed++;
296
+ } else {
297
+ // Both rows exist - check for modifications
298
+ const isModified = detectModifications(
299
+ baseRow,
300
+ currentRow,
301
+ columnMap,
302
+ primaryKeys,
303
+ );
304
+
305
+ if (isModified) {
306
+ row.__status = "modified";
307
+ rowStats.modified++;
308
+ }
309
+ }
310
+
311
+ return row;
312
+ });
313
+
314
+ // Filter to changed rows if requested
315
+ if (changedOnly) {
316
+ rows = rows.filter(
317
+ (row) =>
318
+ row.__status === "added" ||
319
+ row.__status === "removed" ||
320
+ row.__status === "modified",
321
+ );
322
+ }
323
+
324
+ return { rows, rowStats };
325
+ }
@@ -0,0 +1,240 @@
1
+ /**
2
+ * @file simpleColumnBuilder.tsx
3
+ * @description Builds AG Grid column definitions for simple (non-diff) grids
4
+ *
5
+ * This module transforms the pure data structures from columnBuilders.ts
6
+ * into actual column definitions with React components for headers.
7
+ *
8
+ * Unlike diffColumnBuilder.tsx, this handles simple grids without:
9
+ * - Base/current value comparison
10
+ * - Inline vs side-by-side display modes
11
+ * - Column status (added/removed/modified)
12
+ */
13
+
14
+ import type { ColDef, ColGroupDef } from "ag-grid-community";
15
+ import {
16
+ DataFrameColumnGroupHeader,
17
+ DataFrameColumnHeader,
18
+ defaultRenderCell,
19
+ } from "@/components/ui/dataGrid";
20
+ import { ColumnRenderMode, ColumnType, RowObjectType } from "@/lib/api/types";
21
+ import { ColumnConfig } from "./columnBuilders";
22
+
23
+ // ============================================================================
24
+ // Types
25
+ // ============================================================================
26
+
27
+ /**
28
+ * Custom context data for Recce columns
29
+ * Stored in colDef.context to avoid AG Grid validation warnings
30
+ */
31
+ export interface RecceColumnContext {
32
+ columnType?: ColumnType;
33
+ columnRenderMode?: ColumnRenderMode;
34
+ }
35
+
36
+ /**
37
+ * Extended column type with context metadata
38
+ * Uses context property for custom data per AG Grid best practices
39
+ * Note: Distributed form allows TypeScript to narrow types correctly
40
+ */
41
+ export type SimpleColumnDefinition =
42
+ | (ColDef<RowObjectType> & { context?: RecceColumnContext })
43
+ | (ColGroupDef<RowObjectType> & { context?: RecceColumnContext });
44
+
45
+ /**
46
+ * Configuration for building simple column definitions
47
+ */
48
+ export interface BuildSimpleColumnDefinitionsConfig {
49
+ /**
50
+ * Column configurations from getSimpleDisplayColumns()
51
+ */
52
+ columns: ColumnConfig[];
53
+
54
+ /**
55
+ * Props to pass to column headers
56
+ */
57
+ headerProps: {
58
+ pinnedColumns?: string[];
59
+ onPinnedColumnsChange?: (pinnedColumns: string[]) => void;
60
+ onColumnsRenderModeChanged?: (
61
+ cols: Record<string, ColumnRenderMode>,
62
+ ) => void;
63
+ };
64
+
65
+ /**
66
+ * Whether to add index column when no primary keys exist
67
+ * Only applies when columns array has no isPrimaryKey entries
68
+ * @default true
69
+ */
70
+ allowIndexFallback?: boolean;
71
+ }
72
+
73
+ /**
74
+ * Result from building simple column definitions
75
+ */
76
+ export interface BuildSimpleColumnDefinitionsResult {
77
+ /**
78
+ * The generated column definitions ready for AG Grid
79
+ */
80
+ columns: SimpleColumnDefinition[];
81
+
82
+ /**
83
+ * Whether an index fallback column was added
84
+ */
85
+ usedIndexFallback: boolean;
86
+ }
87
+
88
+ // ============================================================================
89
+ // Helper Functions
90
+ // ============================================================================
91
+
92
+ /**
93
+ * Creates the index fallback column used when no primary keys are specified
94
+ */
95
+ function createIndexColumn(): SimpleColumnDefinition {
96
+ return {
97
+ field: "_index",
98
+ headerName: "",
99
+ width: 50,
100
+ cellClass: "index-column",
101
+ resizable: false,
102
+ pinned: "left",
103
+ };
104
+ }
105
+
106
+ /**
107
+ * Creates a primary key column definition
108
+ *
109
+ * Primary key columns are:
110
+ * - Pinned left (sticky left)
111
+ * - Use DataFrameColumnGroupHeader (with columnStatus="")
112
+ * - Use defaultRenderCell
113
+ */
114
+ function createPrimaryKeyColumn(
115
+ config: ColumnConfig,
116
+ headerProps: BuildSimpleColumnDefinitionsConfig["headerProps"],
117
+ ): SimpleColumnDefinition {
118
+ const { key, name, columnType, columnRenderMode } = config;
119
+
120
+ return {
121
+ field: key,
122
+ headerName: name,
123
+ headerComponent: () => (
124
+ <DataFrameColumnGroupHeader
125
+ name={name}
126
+ columnStatus=""
127
+ columnType={columnType}
128
+ pinnedColumns={headerProps.pinnedColumns}
129
+ onPinnedColumnsChange={headerProps.onPinnedColumnsChange}
130
+ onColumnsRenderModeChanged={headerProps.onColumnsRenderModeChanged}
131
+ />
132
+ ),
133
+ pinned: "left",
134
+ cellRenderer: defaultRenderCell,
135
+ context: { columnType, columnRenderMode },
136
+ };
137
+ }
138
+
139
+ /**
140
+ * Creates a regular (non-PK) column definition
141
+ *
142
+ * Regular columns use DataFrameColumnHeader (simpler, no PK toggle)
143
+ */
144
+ function createRegularColumn(
145
+ config: ColumnConfig,
146
+ headerProps: BuildSimpleColumnDefinitionsConfig["headerProps"],
147
+ ): SimpleColumnDefinition {
148
+ const { key, name, columnType, columnRenderMode } = config;
149
+
150
+ return {
151
+ field: key,
152
+ headerName: name,
153
+ headerComponent: () => (
154
+ <DataFrameColumnHeader
155
+ name={name}
156
+ columnType={columnType}
157
+ pinnedColumns={headerProps.pinnedColumns}
158
+ onPinnedColumnsChange={headerProps.onPinnedColumnsChange}
159
+ onColumnsRenderModeChanged={headerProps.onColumnsRenderModeChanged}
160
+ />
161
+ ),
162
+ cellRenderer: defaultRenderCell,
163
+ context: { columnType, columnRenderMode },
164
+ };
165
+ }
166
+
167
+ // ============================================================================
168
+ // Main Function
169
+ // ============================================================================
170
+
171
+ /**
172
+ * Builds AG Grid column definitions from ColumnConfig array
173
+ *
174
+ * @description Transforms pure column configuration objects into actual
175
+ * column definitions with React JSX headers. Handles:
176
+ *
177
+ * - Primary key columns (pinned, use DataFrameColumnGroupHeader)
178
+ * - Regular columns (use DataFrameColumnHeader)
179
+ * - Index fallback (when no PKs and allowIndexFallback is true)
180
+ *
181
+ * @example
182
+ * ```tsx
183
+ * // Get column configs from shared utility
184
+ * const columnConfigs = getSimpleDisplayColumns({
185
+ * columnMap,
186
+ * primaryKeys,
187
+ * pinnedColumns,
188
+ * columnsRenderMode,
189
+ * });
190
+ *
191
+ * // Build actual column definitions
192
+ * const { columns } = buildSimpleColumnDefinitions({
193
+ * columns: columnConfigs,
194
+ * headerProps: {
195
+ * pinnedColumns,
196
+ * onPinnedColumnsChange,
197
+ * onColumnsRenderModeChanged,
198
+ * },
199
+ * });
200
+ * ```
201
+ */
202
+ export function buildSimpleColumnDefinitions(
203
+ config: BuildSimpleColumnDefinitionsConfig,
204
+ ): BuildSimpleColumnDefinitionsResult {
205
+ const {
206
+ columns: columnConfigs,
207
+ headerProps,
208
+ allowIndexFallback = true,
209
+ } = config;
210
+
211
+ const columns: SimpleColumnDefinition[] = [];
212
+ let usedIndexFallback = false;
213
+
214
+ // Check if we have any primary key columns
215
+ const hasPrimaryKeys = columnConfigs.some((col) => col.isPrimaryKey);
216
+
217
+ // Add index fallback if no PKs and allowed
218
+ if (!hasPrimaryKeys && allowIndexFallback) {
219
+ columns.push(createIndexColumn());
220
+ usedIndexFallback = true;
221
+ }
222
+
223
+ // Build column definitions
224
+ for (const colConfig of columnConfigs) {
225
+ if (colConfig.isPrimaryKey) {
226
+ columns.push(createPrimaryKeyColumn(colConfig, headerProps));
227
+ } else {
228
+ const regularColumn = createRegularColumn(colConfig, headerProps);
229
+
230
+ // Set pinned property - "left" for frozen columns, undefined to explicitly unpin
231
+ // Setting undefined is important to override AG Grid's internal pinned state
232
+ columns.push({
233
+ ...regularColumn,
234
+ pinned: colConfig.frozen ? "left" : undefined,
235
+ });
236
+ }
237
+ }
238
+
239
+ return { columns, usedIndexFallback };
240
+ }