@datarecce/ui 0.1.30 → 0.1.31

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 (549) hide show
  1. package/dist/api.d.mts +1 -1
  2. package/dist/api.d.ts +1 -1
  3. package/dist/components.d.mts +1 -1
  4. package/dist/components.d.ts +1 -1
  5. package/dist/hooks.d.mts +1 -1
  6. package/dist/hooks.d.ts +1 -1
  7. package/dist/{index-BNUP2V_N.d.ts → index-B9lSPJTi.d.ts} +184 -2
  8. package/dist/index-B9lSPJTi.d.ts.map +1 -0
  9. package/dist/{index-DOPZuhD8.d.mts → index-IIXVIoOL.d.mts} +253 -71
  10. package/dist/index-IIXVIoOL.d.mts.map +1 -0
  11. package/dist/index.d.mts +2 -2
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +8 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +3 -2
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/styles.css +4 -0
  18. package/dist/theme.d.mts +2 -185
  19. package/dist/theme.d.ts +2 -185
  20. package/dist/types.d.mts +1 -1
  21. package/dist/types.d.ts +1 -1
  22. package/package.json +4 -2
  23. package/recce-source/.editorconfig +26 -0
  24. package/recce-source/.flake8 +37 -0
  25. package/recce-source/.github/ISSUE_TEMPLATE/bug_report.yml +67 -0
  26. package/recce-source/.github/ISSUE_TEMPLATE/custom.md +10 -0
  27. package/recce-source/.github/ISSUE_TEMPLATE/feature_request.yml +42 -0
  28. package/recce-source/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  29. package/recce-source/.github/copilot-instructions.md +331 -0
  30. package/recce-source/.github/instructions/backend-instructions.md +541 -0
  31. package/recce-source/.github/instructions/frontend-instructions.md +317 -0
  32. package/recce-source/.github/workflows/build-statics.yaml +72 -0
  33. package/recce-source/.github/workflows/bump.yaml +48 -0
  34. package/recce-source/.github/workflows/integration-tests-cloud.yaml +92 -0
  35. package/recce-source/.github/workflows/integration-tests-sqlmesh.yaml +33 -0
  36. package/recce-source/.github/workflows/integration-tests.yaml +52 -0
  37. package/recce-source/.github/workflows/nightly.yaml +246 -0
  38. package/recce-source/.github/workflows/release.yaml +196 -0
  39. package/recce-source/.github/workflows/tests-js.yaml +58 -0
  40. package/recce-source/.github/workflows/tests-python.yaml +128 -0
  41. package/recce-source/.pre-commit-config.yaml +26 -0
  42. package/recce-source/CLAUDE.md +483 -0
  43. package/recce-source/CODE_OF_CONDUCT.md +128 -0
  44. package/recce-source/CONTRIBUTING.md +107 -0
  45. package/recce-source/LICENSE +201 -0
  46. package/recce-source/Makefile +126 -0
  47. package/recce-source/README.md +182 -0
  48. package/recce-source/RECCE_CLOUD.md +81 -0
  49. package/recce-source/SECURITY.md +25 -0
  50. package/recce-source/docs/PACKAGING.md +340 -0
  51. package/recce-source/docs/README.md +1 -0
  52. package/recce-source/integration_tests/dbt/dbt_project.yml +26 -0
  53. package/recce-source/integration_tests/dbt/models/customers.sql +69 -0
  54. package/recce-source/integration_tests/dbt/models/docs.md +14 -0
  55. package/recce-source/integration_tests/dbt/models/orders.sql +56 -0
  56. package/recce-source/integration_tests/dbt/models/schema.yml +82 -0
  57. package/recce-source/integration_tests/dbt/models/staging/schema.yml +31 -0
  58. package/recce-source/integration_tests/dbt/models/staging/stg_customers.sql +22 -0
  59. package/recce-source/integration_tests/dbt/models/staging/stg_orders.sql +23 -0
  60. package/recce-source/integration_tests/dbt/models/staging/stg_payments.sql +25 -0
  61. package/recce-source/integration_tests/dbt/packages.yml +7 -0
  62. package/recce-source/integration_tests/dbt/profiles.yml +8 -0
  63. package/recce-source/integration_tests/dbt/seeds/raw_customers.csv +101 -0
  64. package/recce-source/integration_tests/dbt/seeds/raw_orders.csv +100 -0
  65. package/recce-source/integration_tests/dbt/seeds/raw_payments.csv +114 -0
  66. package/recce-source/integration_tests/dbt/seeds/raw_statuses.csv +5 -0
  67. package/recce-source/integration_tests/dbt/smoke_test.sh +72 -0
  68. package/recce-source/integration_tests/dbt/smoke_test_cloud.sh +71 -0
  69. package/recce-source/integration_tests/sqlmesh/__init__.py +0 -0
  70. package/recce-source/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +9 -0
  71. package/recce-source/integration_tests/sqlmesh/audits/items.sql +7 -0
  72. package/recce-source/integration_tests/sqlmesh/audits/order_items.sql +7 -0
  73. package/recce-source/integration_tests/sqlmesh/config.py +171 -0
  74. package/recce-source/integration_tests/sqlmesh/helper.py +20 -0
  75. package/recce-source/integration_tests/sqlmesh/hooks/__init__.py +0 -0
  76. package/recce-source/integration_tests/sqlmesh/macros/__init__.py +0 -0
  77. package/recce-source/integration_tests/sqlmesh/macros/macros.py +8 -0
  78. package/recce-source/integration_tests/sqlmesh/macros/macros.sql +8 -0
  79. package/recce-source/integration_tests/sqlmesh/macros/utils.py +11 -0
  80. package/recce-source/integration_tests/sqlmesh/metrics/metrics.sql +25 -0
  81. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +41 -0
  82. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +60 -0
  83. package/recce-source/integration_tests/sqlmesh/models/customers.sql +32 -0
  84. package/recce-source/integration_tests/sqlmesh/models/items.py +95 -0
  85. package/recce-source/integration_tests/sqlmesh/models/marketing.sql +15 -0
  86. package/recce-source/integration_tests/sqlmesh/models/order_items.py +95 -0
  87. package/recce-source/integration_tests/sqlmesh/models/orders.py +70 -0
  88. package/recce-source/integration_tests/sqlmesh/models/raw_marketing.py +62 -0
  89. package/recce-source/integration_tests/sqlmesh/models/top_waiters.sql +23 -0
  90. package/recce-source/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +29 -0
  91. package/recce-source/integration_tests/sqlmesh/models/waiter_names.sql +10 -0
  92. package/recce-source/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +29 -0
  93. package/recce-source/integration_tests/sqlmesh/models/waiters.py +62 -0
  94. package/recce-source/integration_tests/sqlmesh/prep_env.sh +16 -0
  95. package/recce-source/integration_tests/sqlmesh/schema.yaml +5 -0
  96. package/recce-source/integration_tests/sqlmesh/seeds/waiter_names.csv +11 -0
  97. package/recce-source/integration_tests/sqlmesh/test_server.sh +29 -0
  98. package/recce-source/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +63 -0
  99. package/recce-source/integration_tests/sqlmesh/tests/test_order_items.yaml +72 -0
  100. package/recce-source/js/.editorconfig +27 -0
  101. package/recce-source/js/.env.development +5 -0
  102. package/recce-source/js/.husky/pre-commit +29 -0
  103. package/recce-source/js/.nvmrc +1 -0
  104. package/recce-source/js/README.md +39 -0
  105. package/recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx +65 -0
  106. package/recce-source/js/app/(mainComponents)/NavBar.tsx +228 -0
  107. package/recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx +107 -0
  108. package/recce-source/js/app/(mainComponents)/TopBar.tsx +252 -0
  109. package/recce-source/js/app/@lineage/default.tsx +20 -0
  110. package/recce-source/js/app/@lineage/page.tsx +14 -0
  111. package/recce-source/js/app/MainLayout.tsx +170 -0
  112. package/recce-source/js/app/Providers.tsx +49 -0
  113. package/recce-source/js/app/checks/page.tsx +296 -0
  114. package/recce-source/js/app/error.tsx +93 -0
  115. package/recce-source/js/app/favicon.ico +0 -0
  116. package/recce-source/js/app/global-error.tsx +115 -0
  117. package/recce-source/js/app/global.css +82 -0
  118. package/recce-source/js/app/layout.tsx +48 -0
  119. package/recce-source/js/app/lineage/page.tsx +15 -0
  120. package/recce-source/js/app/page.tsx +12 -0
  121. package/recce-source/js/app/query/page.tsx +8 -0
  122. package/recce-source/js/biome.json +313 -0
  123. package/recce-source/js/jest.config.js +34 -0
  124. package/recce-source/js/jest.globals.d.ts +32 -0
  125. package/recce-source/js/jest.setup.js +91 -0
  126. package/recce-source/js/next.config.js +16 -0
  127. package/recce-source/js/package-lock.json +13843 -0
  128. package/recce-source/js/package.json +123 -0
  129. package/recce-source/js/pnpm-lock.yaml +9235 -0
  130. package/recce-source/js/pnpm-workspace.yaml +6 -0
  131. package/recce-source/js/postcss.config.js +5 -0
  132. package/recce-source/js/public/auth_callback.html +68 -0
  133. package/recce-source/js/public/imgs/feedback/thumbs-down.png +0 -0
  134. package/recce-source/js/public/imgs/feedback/thumbs-up.png +0 -0
  135. package/recce-source/js/public/imgs/reload-image.svg +4 -0
  136. package/recce-source/js/public/logo/recce-logo-white.png +0 -0
  137. package/recce-source/js/src/components/AuthModal/AuthModal.tsx +202 -0
  138. package/recce-source/js/src/components/app/AvatarDropdown.tsx +159 -0
  139. package/recce-source/js/src/components/app/EnvInfo.tsx +357 -0
  140. package/recce-source/js/src/components/app/Filename.tsx +388 -0
  141. package/recce-source/js/src/components/app/SetupConnectionPopover.tsx +91 -0
  142. package/recce-source/js/src/components/app/StateExporter.tsx +57 -0
  143. package/recce-source/js/src/components/app/StateImporter.tsx +198 -0
  144. package/recce-source/js/src/components/app/StateSharing.tsx +145 -0
  145. package/recce-source/js/src/components/app/StateSynchronizer.tsx +205 -0
  146. package/recce-source/js/src/components/charts/HistogramChart.tsx +291 -0
  147. package/recce-source/js/src/components/charts/SquareIcon.tsx +51 -0
  148. package/recce-source/js/src/components/charts/TopKSummaryList.tsx +457 -0
  149. package/recce-source/js/src/components/charts/chartTheme.ts +74 -0
  150. package/recce-source/js/src/components/check/CheckBreadcrumb.tsx +97 -0
  151. package/recce-source/js/src/components/check/CheckDescription.tsx +134 -0
  152. package/recce-source/js/src/components/check/CheckDetail.tsx +797 -0
  153. package/recce-source/js/src/components/check/CheckEmptyState.tsx +84 -0
  154. package/recce-source/js/src/components/check/CheckList.tsx +320 -0
  155. package/recce-source/js/src/components/check/LineageDiffView.tsx +32 -0
  156. package/recce-source/js/src/components/check/PresetCheckTemplateView.tsx +48 -0
  157. package/recce-source/js/src/components/check/SchemaDiffView.tsx +290 -0
  158. package/recce-source/js/src/components/check/check.ts +25 -0
  159. package/recce-source/js/src/components/check/timeline/CheckTimeline.tsx +163 -0
  160. package/recce-source/js/src/components/check/timeline/CommentInput.tsx +84 -0
  161. package/recce-source/js/src/components/check/timeline/TimelineEvent.tsx +468 -0
  162. package/recce-source/js/src/components/check/timeline/index.ts +12 -0
  163. package/recce-source/js/src/components/check/utils.ts +12 -0
  164. package/recce-source/js/src/components/data-grid/ScreenshotDataGrid.tsx +333 -0
  165. package/recce-source/js/src/components/data-grid/agGridStyles.css +55 -0
  166. package/recce-source/js/src/components/data-grid/agGridTheme.ts +43 -0
  167. package/recce-source/js/src/components/editor/CodeEditor.tsx +107 -0
  168. package/recce-source/js/src/components/editor/DiffEditor.tsx +162 -0
  169. package/recce-source/js/src/components/editor/index.ts +12 -0
  170. package/recce-source/js/src/components/errorboundary/ErrorBoundary.tsx +87 -0
  171. package/recce-source/js/src/components/histogram/HistogramDiffForm.tsx +147 -0
  172. package/recce-source/js/src/components/histogram/HistogramDiffResultView.tsx +63 -0
  173. package/recce-source/js/src/components/icons/index.tsx +142 -0
  174. package/recce-source/js/src/components/lineage/ActionControl.tsx +63 -0
  175. package/recce-source/js/src/components/lineage/ActionTag.tsx +141 -0
  176. package/recce-source/js/src/components/lineage/ChangeStatusLegend.tsx +46 -0
  177. package/recce-source/js/src/components/lineage/ColumnLevelLineageControl.tsx +327 -0
  178. package/recce-source/js/src/components/lineage/ColumnLevelLineageLegend.tsx +57 -0
  179. package/recce-source/js/src/components/lineage/GraphColumnNode.tsx +199 -0
  180. package/recce-source/js/src/components/lineage/GraphEdge.tsx +59 -0
  181. package/recce-source/js/src/components/lineage/GraphNode.tsx +555 -0
  182. package/recce-source/js/src/components/lineage/LineagePage.tsx +10 -0
  183. package/recce-source/js/src/components/lineage/LineageView.tsx +1384 -0
  184. package/recce-source/js/src/components/lineage/LineageViewContext.tsx +86 -0
  185. package/recce-source/js/src/components/lineage/LineageViewContextMenu.tsx +637 -0
  186. package/recce-source/js/src/components/lineage/LineageViewNotification.tsx +64 -0
  187. package/recce-source/js/src/components/lineage/LineageViewTopBar.tsx +596 -0
  188. package/recce-source/js/src/components/lineage/NodeSqlView.tsx +136 -0
  189. package/recce-source/js/src/components/lineage/NodeTag.tsx +278 -0
  190. package/recce-source/js/src/components/lineage/NodeView.tsx +642 -0
  191. package/recce-source/js/src/components/lineage/SandboxView.tsx +436 -0
  192. package/recce-source/js/src/components/lineage/ServerDisconnectedModalContent.tsx +105 -0
  193. package/recce-source/js/src/components/lineage/SetupConnectionBanner.tsx +52 -0
  194. package/recce-source/js/src/components/lineage/SingleEnvironmentQueryView.tsx +152 -0
  195. package/recce-source/js/src/components/lineage/graph.test.ts +31 -0
  196. package/recce-source/js/src/components/lineage/graph.ts +58 -0
  197. package/recce-source/js/src/components/lineage/lineage.test.ts +169 -0
  198. package/recce-source/js/src/components/lineage/lineage.ts +521 -0
  199. package/recce-source/js/src/components/lineage/styles.css +42 -0
  200. package/recce-source/js/src/components/lineage/styles.tsx +165 -0
  201. package/recce-source/js/src/components/lineage/useMultiNodesAction.ts +352 -0
  202. package/recce-source/js/src/components/lineage/useValueDiffAlertDialog.tsx +108 -0
  203. package/recce-source/js/src/components/onboarding-guide/Notification.tsx +62 -0
  204. package/recce-source/js/src/components/profile/ProfileDiffForm.tsx +134 -0
  205. package/recce-source/js/src/components/profile/ProfileDiffResultView.tsx +245 -0
  206. package/recce-source/js/src/components/query/ChangedOnlyCheckbox.tsx +29 -0
  207. package/recce-source/js/src/components/query/DiffText.tsx +120 -0
  208. package/recce-source/js/src/components/query/QueryDiffResultView.tsx +470 -0
  209. package/recce-source/js/src/components/query/QueryForm.tsx +80 -0
  210. package/recce-source/js/src/components/query/QueryPage.tsx +282 -0
  211. package/recce-source/js/src/components/query/QueryResultView.tsx +180 -0
  212. package/recce-source/js/src/components/query/SetupConnectionGuide.tsx +57 -0
  213. package/recce-source/js/src/components/query/SqlEditor.tsx +245 -0
  214. package/recce-source/js/src/components/query/ToggleSwitch.tsx +84 -0
  215. package/recce-source/js/src/components/query/styles.css +21 -0
  216. package/recce-source/js/src/components/routing/DirectUrlAccess.test.tsx +428 -0
  217. package/recce-source/js/src/components/routing/LineageStatePreservation.test.tsx +311 -0
  218. package/recce-source/js/src/components/routing/Navigation.test.tsx +256 -0
  219. package/recce-source/js/src/components/rowcount/RowCountDiffResultView.tsx +109 -0
  220. package/recce-source/js/src/components/rowcount/delta.ts +11 -0
  221. package/recce-source/js/src/components/run/RunList.tsx +303 -0
  222. package/recce-source/js/src/components/run/RunModal.tsx +191 -0
  223. package/recce-source/js/src/components/run/RunPage.tsx +26 -0
  224. package/recce-source/js/src/components/run/RunResultPane.tsx +454 -0
  225. package/recce-source/js/src/components/run/RunStatusAndDate.tsx +106 -0
  226. package/recce-source/js/src/components/run/RunToolbar.tsx +70 -0
  227. package/recce-source/js/src/components/run/RunView.tsx +196 -0
  228. package/recce-source/js/src/components/run/registry.ts +214 -0
  229. package/recce-source/js/src/components/run/types.ts +14 -0
  230. package/recce-source/js/src/components/schema/ColumnNameCell.test.tsx +169 -0
  231. package/recce-source/js/src/components/schema/ColumnNameCell.tsx +198 -0
  232. package/recce-source/js/src/components/schema/SchemaView.tsx +337 -0
  233. package/recce-source/js/src/components/schema/schemaDiff.ts +32 -0
  234. package/recce-source/js/src/components/schema/style.css +134 -0
  235. package/recce-source/js/src/components/screenshot/ScreenshotBox.tsx +39 -0
  236. package/recce-source/js/src/components/shared/HistoryToggle.tsx +35 -0
  237. package/recce-source/js/src/components/split/Split.tsx +40 -0
  238. package/recce-source/js/src/components/split/styles.css +24 -0
  239. package/recce-source/js/src/components/summary/ChangeSummary.tsx +264 -0
  240. package/recce-source/js/src/components/summary/SchemaSummary.tsx +123 -0
  241. package/recce-source/js/src/components/summary/SummaryView.tsx +29 -0
  242. package/recce-source/js/src/components/timeout/IdleTimeoutBadge.tsx +48 -0
  243. package/recce-source/js/src/components/top-k/TopKDiffForm.tsx +58 -0
  244. package/recce-source/js/src/components/top-k/TopKDiffResultView.tsx +73 -0
  245. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnGroupHeader.tsx +228 -0
  246. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnHeader.tsx +113 -0
  247. package/recce-source/js/src/components/ui/dataGrid/defaultRenderCell.tsx +72 -0
  248. package/recce-source/js/src/components/ui/dataGrid/index.ts +23 -0
  249. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.test.tsx +607 -0
  250. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.tsx +211 -0
  251. package/recce-source/js/src/components/ui/dataGrid/schemaCells.test.tsx +452 -0
  252. package/recce-source/js/src/components/ui/dataGrid/schemaCells.tsx +142 -0
  253. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.test.tsx +178 -0
  254. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.tsx +275 -0
  255. package/recce-source/js/src/components/ui/markdown/ExternalLinkConfirmDialog.tsx +134 -0
  256. package/recce-source/js/src/components/ui/markdown/MarkdownContent.tsx +364 -0
  257. package/recce-source/js/src/components/ui/mui/index.ts +13 -0
  258. package/recce-source/js/src/components/ui/mui-provider.tsx +67 -0
  259. package/recce-source/js/src/components/ui/mui-theme.ts +1039 -0
  260. package/recce-source/js/src/components/ui/mui-utils.ts +113 -0
  261. package/recce-source/js/src/components/ui/toaster.tsx +288 -0
  262. package/recce-source/js/src/components/valuediff/ValueDiffDetailResultView.tsx +217 -0
  263. package/recce-source/js/src/components/valuediff/ValueDiffForm.tsx +246 -0
  264. package/recce-source/js/src/components/valuediff/ValueDiffResultView.tsx +82 -0
  265. package/recce-source/js/src/components/valuediff/shared.ts +33 -0
  266. package/recce-source/js/src/constants/tooltipMessage.ts +3 -0
  267. package/recce-source/js/src/constants/urls.ts +1 -0
  268. package/recce-source/js/src/lib/UrlHash.ts +12 -0
  269. package/recce-source/js/src/lib/api/adhocQuery.ts +70 -0
  270. package/recce-source/js/src/lib/api/axiosClient.ts +9 -0
  271. package/recce-source/js/src/lib/api/cacheKeys.ts +13 -0
  272. package/recce-source/js/src/lib/api/checkEvents.ts +252 -0
  273. package/recce-source/js/src/lib/api/checks.ts +129 -0
  274. package/recce-source/js/src/lib/api/cll.ts +53 -0
  275. package/recce-source/js/src/lib/api/connectToCloud.ts +13 -0
  276. package/recce-source/js/src/lib/api/flag.ts +37 -0
  277. package/recce-source/js/src/lib/api/info.ts +198 -0
  278. package/recce-source/js/src/lib/api/instanceInfo.ts +25 -0
  279. package/recce-source/js/src/lib/api/keepAlive.ts +108 -0
  280. package/recce-source/js/src/lib/api/lineagecheck.ts +35 -0
  281. package/recce-source/js/src/lib/api/localStorageKeys.ts +7 -0
  282. package/recce-source/js/src/lib/api/models.ts +59 -0
  283. package/recce-source/js/src/lib/api/profile.ts +65 -0
  284. package/recce-source/js/src/lib/api/rowcount.ts +19 -0
  285. package/recce-source/js/src/lib/api/runs.ts +174 -0
  286. package/recce-source/js/src/lib/api/schemacheck.ts +31 -0
  287. package/recce-source/js/src/lib/api/select.ts +25 -0
  288. package/recce-source/js/src/lib/api/sessionStorageKeys.ts +8 -0
  289. package/recce-source/js/src/lib/api/state.ts +117 -0
  290. package/recce-source/js/src/lib/api/track.ts +281 -0
  291. package/recce-source/js/src/lib/api/types.ts +284 -0
  292. package/recce-source/js/src/lib/api/user.ts +42 -0
  293. package/recce-source/js/src/lib/api/valuediff.ts +46 -0
  294. package/recce-source/js/src/lib/api/version.ts +40 -0
  295. package/recce-source/js/src/lib/const.ts +9 -0
  296. package/recce-source/js/src/lib/dataGrid/crossFunctionConsistency.test.ts +626 -0
  297. package/recce-source/js/src/lib/dataGrid/dataGridFactory.test.ts +2140 -0
  298. package/recce-source/js/src/lib/dataGrid/dataGridFactory.ts +397 -0
  299. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.test.ts +132 -0
  300. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.ts +126 -0
  301. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.test.ts +1627 -0
  302. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.ts +140 -0
  303. package/recce-source/js/src/lib/dataGrid/generators/toDataGrid.ts +67 -0
  304. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.test.ts +142 -0
  305. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.ts +71 -0
  306. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.test.ts +258 -0
  307. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.ts +153 -0
  308. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.test.ts +951 -0
  309. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.ts +221 -0
  310. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.test.ts +395 -0
  311. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.ts +184 -0
  312. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.test.ts +884 -0
  313. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.ts +113 -0
  314. package/recce-source/js/src/lib/dataGrid/index.ts +51 -0
  315. package/recce-source/js/src/lib/dataGrid/propertyBased.test.ts +858 -0
  316. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.test.ts +482 -0
  317. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.ts +345 -0
  318. package/recce-source/js/src/lib/dataGrid/shared/dataTypeEdgeCases.test.ts +698 -0
  319. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.test.tsx +820 -0
  320. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.tsx +277 -0
  321. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.test.ts +785 -0
  322. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.ts +370 -0
  323. package/recce-source/js/src/lib/dataGrid/shared/index.ts +81 -0
  324. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.test.ts +909 -0
  325. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.ts +325 -0
  326. package/recce-source/js/src/lib/dataGrid/shared/simpleColumnBuilder.tsx +240 -0
  327. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.test.tsx +719 -0
  328. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.tsx +231 -0
  329. package/recce-source/js/src/lib/dataGrid/shared/validation.test.ts +559 -0
  330. package/recce-source/js/src/lib/dataGrid/shared/validation.ts +367 -0
  331. package/recce-source/js/src/lib/dataGrid/warehouseNamingConventions.test.ts +1117 -0
  332. package/recce-source/js/src/lib/formatSelect.ts +50 -0
  333. package/recce-source/js/src/lib/hooks/ApiConfigContext.tsx +181 -0
  334. package/recce-source/js/src/lib/hooks/IdleTimeoutContext.tsx +177 -0
  335. package/recce-source/js/src/lib/hooks/LineageGraphContext.tsx +512 -0
  336. package/recce-source/js/src/lib/hooks/RecceActionContext.tsx +269 -0
  337. package/recce-source/js/src/lib/hooks/RecceCheckContext.tsx +33 -0
  338. package/recce-source/js/src/lib/hooks/RecceContextProvider.tsx +54 -0
  339. package/recce-source/js/src/lib/hooks/RecceInstanceContext.tsx +129 -0
  340. package/recce-source/js/src/lib/hooks/RecceQueryContext.tsx +98 -0
  341. package/recce-source/js/src/lib/hooks/RecceShareStateContext.tsx +59 -0
  342. package/recce-source/js/src/lib/hooks/ScreenShot.tsx +399 -0
  343. package/recce-source/js/src/lib/hooks/useAppRouter.test.ts +211 -0
  344. package/recce-source/js/src/lib/hooks/useAppRouter.ts +200 -0
  345. package/recce-source/js/src/lib/hooks/useCheckEvents.ts +99 -0
  346. package/recce-source/js/src/lib/hooks/useCheckToast.tsx +14 -0
  347. package/recce-source/js/src/lib/hooks/useClipBoardToast.tsx +27 -0
  348. package/recce-source/js/src/lib/hooks/useCountdownToast.tsx +102 -0
  349. package/recce-source/js/src/lib/hooks/useFeedbackCollectionToast.tsx +130 -0
  350. package/recce-source/js/src/lib/hooks/useGuideToast.tsx +45 -0
  351. package/recce-source/js/src/lib/hooks/useIdleDetection.tsx +185 -0
  352. package/recce-source/js/src/lib/hooks/useModelColumns.tsx +113 -0
  353. package/recce-source/js/src/lib/hooks/useRecceInstanceInfo.tsx +13 -0
  354. package/recce-source/js/src/lib/hooks/useRecceServerFlag.tsx +13 -0
  355. package/recce-source/js/src/lib/hooks/useRun.tsx +89 -0
  356. package/recce-source/js/src/lib/hooks/useThemeColors.ts +115 -0
  357. package/recce-source/js/src/lib/mergeKeys.test.ts +89 -0
  358. package/recce-source/js/src/lib/mergeKeys.ts +86 -0
  359. package/recce-source/js/src/lib/result/ResultErrorFallback.tsx +9 -0
  360. package/recce-source/js/src/lib/utils/formatTime.ts +84 -0
  361. package/recce-source/js/src/lib/utils/urls.ts +16 -0
  362. package/recce-source/js/src/utils/DropdownValuesInput.tsx +297 -0
  363. package/recce-source/js/src/utils/formatters.tsx +237 -0
  364. package/recce-source/js/src/utils/transforms.ts +81 -0
  365. package/recce-source/js/tsconfig.json +47 -0
  366. package/recce-source/macros/README.md +8 -0
  367. package/recce-source/macros/recce_athena.sql +73 -0
  368. package/recce-source/pyproject.toml +109 -0
  369. package/recce-source/recce/VERSION +1 -0
  370. package/recce-source/recce/__init__.py +84 -0
  371. package/recce-source/recce/adapter/__init__.py +0 -0
  372. package/recce-source/recce/adapter/base.py +109 -0
  373. package/recce-source/recce/adapter/dbt_adapter/__init__.py +1699 -0
  374. package/recce-source/recce/adapter/dbt_adapter/dbt_version.py +42 -0
  375. package/recce-source/recce/adapter/sqlmesh_adapter.py +141 -0
  376. package/recce-source/recce/apis/__init__.py +0 -0
  377. package/recce-source/recce/apis/check_api.py +203 -0
  378. package/recce-source/recce/apis/check_events_api.py +353 -0
  379. package/recce-source/recce/apis/check_func.py +130 -0
  380. package/recce-source/recce/apis/run_api.py +130 -0
  381. package/recce-source/recce/apis/run_func.py +258 -0
  382. package/recce-source/recce/artifact.py +266 -0
  383. package/recce-source/recce/cli.py +1846 -0
  384. package/recce-source/recce/config.py +127 -0
  385. package/recce-source/recce/connect_to_cloud.py +138 -0
  386. package/recce-source/recce/core.py +334 -0
  387. package/recce-source/recce/diff.py +26 -0
  388. package/recce-source/recce/event/CONFIG +1 -0
  389. package/recce-source/recce/event/SENTRY_DNS +1 -0
  390. package/recce-source/recce/event/__init__.py +304 -0
  391. package/recce-source/recce/event/collector.py +184 -0
  392. package/recce-source/recce/event/track.py +158 -0
  393. package/recce-source/recce/exceptions.py +21 -0
  394. package/recce-source/recce/git.py +77 -0
  395. package/recce-source/recce/github.py +222 -0
  396. package/recce-source/recce/mcp_server.py +861 -0
  397. package/recce-source/recce/models/__init__.py +6 -0
  398. package/recce-source/recce/models/check.py +473 -0
  399. package/recce-source/recce/models/run.py +46 -0
  400. package/recce-source/recce/models/types.py +218 -0
  401. package/recce-source/recce/pull_request.py +124 -0
  402. package/recce-source/recce/run.py +390 -0
  403. package/recce-source/recce/server.py +877 -0
  404. package/recce-source/recce/state/__init__.py +31 -0
  405. package/recce-source/recce/state/cloud.py +644 -0
  406. package/recce-source/recce/state/const.py +26 -0
  407. package/recce-source/recce/state/local.py +56 -0
  408. package/recce-source/recce/state/state.py +119 -0
  409. package/recce-source/recce/state/state_loader.py +174 -0
  410. package/recce-source/recce/summary.py +575 -0
  411. package/recce-source/recce/tasks/__init__.py +23 -0
  412. package/recce-source/recce/tasks/core.py +134 -0
  413. package/recce-source/recce/tasks/dataframe.py +170 -0
  414. package/recce-source/recce/tasks/histogram.py +433 -0
  415. package/recce-source/recce/tasks/lineage.py +19 -0
  416. package/recce-source/recce/tasks/profile.py +298 -0
  417. package/recce-source/recce/tasks/query.py +450 -0
  418. package/recce-source/recce/tasks/rowcount.py +277 -0
  419. package/recce-source/recce/tasks/schema.py +65 -0
  420. package/recce-source/recce/tasks/top_k.py +172 -0
  421. package/recce-source/recce/tasks/utils.py +147 -0
  422. package/recce-source/recce/tasks/valuediff.py +497 -0
  423. package/recce-source/recce/util/__init__.py +4 -0
  424. package/recce-source/recce/util/api_token.py +80 -0
  425. package/recce-source/recce/util/breaking.py +330 -0
  426. package/recce-source/recce/util/cache.py +25 -0
  427. package/recce-source/recce/util/cll.py +355 -0
  428. package/recce-source/recce/util/cloud/__init__.py +15 -0
  429. package/recce-source/recce/util/cloud/base.py +115 -0
  430. package/recce-source/recce/util/cloud/check_events.py +190 -0
  431. package/recce-source/recce/util/cloud/checks.py +242 -0
  432. package/recce-source/recce/util/io.py +120 -0
  433. package/recce-source/recce/util/lineage.py +83 -0
  434. package/recce-source/recce/util/logger.py +25 -0
  435. package/recce-source/recce/util/onboarding_state.py +45 -0
  436. package/recce-source/recce/util/perf_tracking.py +85 -0
  437. package/recce-source/recce/util/pydantic_model.py +22 -0
  438. package/recce-source/recce/util/recce_cloud.py +454 -0
  439. package/recce-source/recce/util/singleton.py +18 -0
  440. package/recce-source/recce/util/startup_perf.py +121 -0
  441. package/recce-source/recce/yaml/__init__.py +58 -0
  442. package/recce-source/recce_cloud/README.md +780 -0
  443. package/recce-source/recce_cloud/VERSION +1 -0
  444. package/recce-source/recce_cloud/__init__.py +24 -0
  445. package/recce-source/recce_cloud/api/__init__.py +17 -0
  446. package/recce-source/recce_cloud/api/base.py +132 -0
  447. package/recce-source/recce_cloud/api/client.py +186 -0
  448. package/recce-source/recce_cloud/api/exceptions.py +26 -0
  449. package/recce-source/recce_cloud/api/factory.py +63 -0
  450. package/recce-source/recce_cloud/api/github.py +106 -0
  451. package/recce-source/recce_cloud/api/gitlab.py +111 -0
  452. package/recce-source/recce_cloud/artifact.py +57 -0
  453. package/recce-source/recce_cloud/ci_providers/__init__.py +9 -0
  454. package/recce-source/recce_cloud/ci_providers/base.py +82 -0
  455. package/recce-source/recce_cloud/ci_providers/detector.py +147 -0
  456. package/recce-source/recce_cloud/ci_providers/github_actions.py +136 -0
  457. package/recce-source/recce_cloud/ci_providers/gitlab_ci.py +130 -0
  458. package/recce-source/recce_cloud/cli.py +434 -0
  459. package/recce-source/recce_cloud/download.py +230 -0
  460. package/recce-source/recce_cloud/hatch_build.py +20 -0
  461. package/recce-source/recce_cloud/pyproject.toml +49 -0
  462. package/recce-source/recce_cloud/upload.py +214 -0
  463. package/recce-source/test.py +0 -0
  464. package/recce-source/tests/__init__.py +0 -0
  465. package/recce-source/tests/adapter/__init__.py +0 -0
  466. package/recce-source/tests/adapter/dbt_adapter/__init__.py +0 -0
  467. package/recce-source/tests/adapter/dbt_adapter/conftest.py +17 -0
  468. package/recce-source/tests/adapter/dbt_adapter/dbt_test_helper.py +298 -0
  469. package/recce-source/tests/adapter/dbt_adapter/test_dbt_adapter.py +25 -0
  470. package/recce-source/tests/adapter/dbt_adapter/test_dbt_cll.py +717 -0
  471. package/recce-source/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +4 -0
  472. package/recce-source/tests/adapter/dbt_adapter/test_proj/manifest.json +1 -0
  473. package/recce-source/tests/adapter/dbt_adapter/test_proj/package-lock.yml +8 -0
  474. package/recce-source/tests/adapter/dbt_adapter/test_proj/packages.yml +7 -0
  475. package/recce-source/tests/adapter/dbt_adapter/test_proj/profiles.yml +6 -0
  476. package/recce-source/tests/adapter/dbt_adapter/test_selector.py +205 -0
  477. package/recce-source/tests/apis/__init__.py +0 -0
  478. package/recce-source/tests/apis/row_count_diff.json +59 -0
  479. package/recce-source/tests/apis/test_check_events_api.py +615 -0
  480. package/recce-source/tests/apis/test_run_func.py +433 -0
  481. package/recce-source/tests/catalog.json +527 -0
  482. package/recce-source/tests/data/manifest/base/catalog.json +1 -0
  483. package/recce-source/tests/data/manifest/base/manifest.json +1 -0
  484. package/recce-source/tests/data/manifest/pr2/catalog.json +1 -0
  485. package/recce-source/tests/data/manifest/pr2/manifest.json +1 -0
  486. package/recce-source/tests/manifest.json +10655 -0
  487. package/recce-source/tests/models/__init__.py +0 -0
  488. package/recce-source/tests/models/test_check.py +731 -0
  489. package/recce-source/tests/models/test_run_models.py +295 -0
  490. package/recce-source/tests/recce_cloud/__init__.py +0 -0
  491. package/recce-source/tests/recce_cloud/test_ci_providers.py +351 -0
  492. package/recce-source/tests/recce_cloud/test_cli.py +735 -0
  493. package/recce-source/tests/recce_cloud/test_client.py +379 -0
  494. package/recce-source/tests/recce_cloud/test_platform_clients.py +483 -0
  495. package/recce-source/tests/recce_state.json +1 -0
  496. package/recce-source/tests/state/test_cloud.py +719 -0
  497. package/recce-source/tests/state/test_local.py +164 -0
  498. package/recce-source/tests/state/test_state_loader.py +211 -0
  499. package/recce-source/tests/tasks/__init__.py +0 -0
  500. package/recce-source/tests/tasks/conftest.py +4 -0
  501. package/recce-source/tests/tasks/test_histogram.py +129 -0
  502. package/recce-source/tests/tasks/test_lineage.py +55 -0
  503. package/recce-source/tests/tasks/test_preset_checks.py +64 -0
  504. package/recce-source/tests/tasks/test_profile.py +397 -0
  505. package/recce-source/tests/tasks/test_query.py +528 -0
  506. package/recce-source/tests/tasks/test_row_count.py +133 -0
  507. package/recce-source/tests/tasks/test_schema.py +122 -0
  508. package/recce-source/tests/tasks/test_top_k.py +77 -0
  509. package/recce-source/tests/tasks/test_utils.py +439 -0
  510. package/recce-source/tests/tasks/test_valuediff.py +361 -0
  511. package/recce-source/tests/test_cli.py +236 -0
  512. package/recce-source/tests/test_cli_mcp_optional.py +45 -0
  513. package/recce-source/tests/test_cloud_listing_cli.py +324 -0
  514. package/recce-source/tests/test_config.py +43 -0
  515. package/recce-source/tests/test_connect_to_cloud.py +82 -0
  516. package/recce-source/tests/test_core.py +174 -0
  517. package/recce-source/tests/test_dbt.py +36 -0
  518. package/recce-source/tests/test_mcp_server.py +505 -0
  519. package/recce-source/tests/test_pull_request.py +130 -0
  520. package/recce-source/tests/test_server.py +202 -0
  521. package/recce-source/tests/test_server_lifespan.py +138 -0
  522. package/recce-source/tests/test_summary.py +73 -0
  523. package/recce-source/tests/util/__init__.py +0 -0
  524. package/recce-source/tests/util/cloud/__init__.py +0 -0
  525. package/recce-source/tests/util/cloud/test_check_events.py +255 -0
  526. package/recce-source/tests/util/cloud/test_checks.py +204 -0
  527. package/recce-source/tests/util/test_api_token.py +119 -0
  528. package/recce-source/tests/util/test_breaking.py +1427 -0
  529. package/recce-source/tests/util/test_cll.py +706 -0
  530. package/recce-source/tests/util/test_lineage.py +122 -0
  531. package/recce-source/tests/util/test_onboarding_state.py +84 -0
  532. package/recce-source/tests/util/test_recce_cloud.py +231 -0
  533. package/recce-source/tox.ini +40 -0
  534. package/recce-source/uv.lock +3928 -0
  535. package/src/api/index.ts +32 -0
  536. package/src/components/index.ts +154 -0
  537. package/src/global.d.ts +14 -0
  538. package/src/hooks/index.ts +56 -0
  539. package/src/index.ts +17 -0
  540. package/src/lib/hooks/RouteConfigContext.ts +139 -0
  541. package/src/lib/hooks/useAppRouter.ts +240 -0
  542. package/src/mui-augmentation.d.ts +139 -0
  543. package/src/theme/index.ts +13 -0
  544. package/src/theme.ts +23 -0
  545. package/src/types/index.ts +23 -0
  546. package/dist/index-BNUP2V_N.d.ts.map +0 -1
  547. package/dist/index-DOPZuhD8.d.mts.map +0 -1
  548. package/dist/theme.d.mts.map +0 -1
  549. package/dist/theme.d.ts.map +0 -1
@@ -0,0 +1,32 @@
1
+ /**
2
+ * API Module
3
+ *
4
+ * This module provides API client utilities and functions
5
+ * for interacting with the Recce backend.
6
+ */
7
+
8
+ // API Client
9
+ export { axiosClient, reactQueryClient } from '@/lib/api/axiosClient';
10
+
11
+ // API Functions
12
+ export * from '@/lib/api/adhocQuery';
13
+ export * from '@/lib/api/checks';
14
+ export * from '@/lib/api/cll';
15
+ export * from '@/lib/api/connectToCloud';
16
+ export * from '@/lib/api/flag';
17
+ export * from '@/lib/api/info';
18
+ export * from '@/lib/api/lineagecheck';
19
+ export * from '@/lib/api/models';
20
+ export * from '@/lib/api/profile';
21
+ export * from '@/lib/api/rowcount';
22
+ export * from '@/lib/api/runs';
23
+ export * from '@/lib/api/schemacheck';
24
+ export * from '@/lib/api/select';
25
+ export * from '@/lib/api/state';
26
+ export * from '@/lib/api/user';
27
+ export * from '@/lib/api/valuediff';
28
+ export * from '@/lib/api/version';
29
+
30
+ // Storage Keys
31
+ export * from '@/lib/api/localStorageKeys';
32
+ export * from '@/lib/api/sessionStorageKeys';
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Components Module
3
+ *
4
+ * This module re-exports React components from the Recce submodule.
5
+ * Components are organized by feature area for easy discovery.
6
+ */
7
+
8
+ // =============================================================================
9
+ // Core / Foundation
10
+ // =============================================================================
11
+ export {
12
+ MuiProvider,
13
+ default as MuiProviderDefault,
14
+ } from "@/components/ui/mui-provider";
15
+ export { Toaster, ToasterProvider, useToaster } from "@/components/ui/toaster";
16
+ export { ErrorBoundary } from "@/components/errorboundary/ErrorBoundary";
17
+
18
+ // =============================================================================
19
+ // Layout
20
+ // =============================================================================
21
+ export { HSplit, VSplit } from "@/components/split/Split";
22
+ export { ScreenshotBox } from "@/components/screenshot/ScreenshotBox";
23
+
24
+ // =============================================================================
25
+ // Lineage
26
+ // =============================================================================
27
+ export { LineagePage } from "@/components/lineage/LineagePage";
28
+ export { LineageView } from "@/components/lineage/LineageView";
29
+ export {
30
+ LineageViewContext,
31
+ useLineageViewContext,
32
+ } from "@/components/lineage/LineageViewContext";
33
+ export { LineageViewTopBar } from "@/components/lineage/LineageViewTopBar";
34
+ export { GraphNode } from "@/components/lineage/GraphNode";
35
+ export { default as GraphEdge } from "@/components/lineage/GraphEdge";
36
+ export { GraphColumnNode } from "@/components/lineage/GraphColumnNode";
37
+ export { NodeView } from "@/components/lineage/NodeView";
38
+ export { NodeSqlView } from "@/components/lineage/NodeSqlView";
39
+ export {
40
+ ResourceTypeTag,
41
+ ModelRowCount,
42
+ RowCountDiffTag,
43
+ type RowCountDiffTagProps,
44
+ type RowCountTagProps,
45
+ } from "@/components/lineage/NodeTag";
46
+ export { default as SetupConnectionBanner } from "@/components/lineage/SetupConnectionBanner";
47
+
48
+ // =============================================================================
49
+ // Query
50
+ // =============================================================================
51
+ export { QueryPage } from "@/components/query/QueryPage";
52
+ export { QueryForm } from "@/components/query/QueryForm";
53
+ export { default as SqlEditor } from "@/components/query/SqlEditor";
54
+ export { QueryResultView } from "@/components/query/QueryResultView";
55
+ export { QueryDiffResultView } from "@/components/query/QueryDiffResultView";
56
+ export { DiffText } from "@/components/query/DiffText";
57
+ export { default as SetupConnectionGuide } from "@/components/query/SetupConnectionGuide";
58
+
59
+ // =============================================================================
60
+ // Editor
61
+ // =============================================================================
62
+ export { default as CodeEditor } from "@/components/editor/CodeEditor";
63
+ export { default as DiffEditor } from "@/components/editor/DiffEditor";
64
+
65
+ // =============================================================================
66
+ // Schema
67
+ // =============================================================================
68
+ export { SchemaView } from "@/components/schema/SchemaView";
69
+ export { ColumnNameCell } from "@/components/schema/ColumnNameCell";
70
+
71
+ // =============================================================================
72
+ // Check / Checklist
73
+ // =============================================================================
74
+ export { CheckList } from "@/components/check/CheckList";
75
+ export { CheckDetail } from "@/components/check/CheckDetail";
76
+ export { CheckBreadcrumb } from "@/components/check/CheckBreadcrumb";
77
+ export { CheckDescription } from "@/components/check/CheckDescription";
78
+ export { CheckEmptyState } from "@/components/check/CheckEmptyState";
79
+ export { LineageDiffView } from "@/components/check/LineageDiffView";
80
+ export { SchemaDiffView } from "@/components/check/SchemaDiffView";
81
+
82
+ // =============================================================================
83
+ // Run
84
+ // =============================================================================
85
+ export { RunPage } from "@/components/run/RunPage";
86
+ export { RunList } from "@/components/run/RunList";
87
+ export { RunView } from "@/components/run/RunView";
88
+ export { RunModal } from "@/components/run/RunModal";
89
+ export { RunToolbar } from "@/components/run/RunToolbar";
90
+ export { RunResultPane } from "@/components/run/RunResultPane";
91
+ export { RunStatusAndDate } from "@/components/run/RunStatusAndDate";
92
+
93
+ // =============================================================================
94
+ // Data Diff Components
95
+ // =============================================================================
96
+
97
+ // Profile Diff
98
+ export { ProfileDiffForm } from "@/components/profile/ProfileDiffForm";
99
+ export { ProfileDiffResultView } from "@/components/profile/ProfileDiffResultView";
100
+
101
+ // Value Diff
102
+ export { ValueDiffForm } from "@/components/valuediff/ValueDiffForm";
103
+ export { ValueDiffResultView } from "@/components/valuediff/ValueDiffResultView";
104
+ export { ValueDiffDetailResultView } from "@/components/valuediff/ValueDiffDetailResultView";
105
+
106
+ // Histogram Diff
107
+ export { HistogramDiffForm } from "@/components/histogram/HistogramDiffForm";
108
+ export { HistogramDiffResultView } from "@/components/histogram/HistogramDiffResultView";
109
+
110
+ // Top-K Diff
111
+ export { TopKDiffForm } from "@/components/top-k/TopKDiffForm";
112
+ export { TopKDiffResultView } from "@/components/top-k/TopKDiffResultView";
113
+
114
+ // Row Count Diff
115
+ export { RowCountDiffResultView } from "@/components/rowcount/RowCountDiffResultView";
116
+
117
+ // =============================================================================
118
+ // Data Grid
119
+ // =============================================================================
120
+ export { ScreenshotDataGrid } from "@/components/data-grid/ScreenshotDataGrid";
121
+
122
+ // =============================================================================
123
+ // Charts
124
+ // =============================================================================
125
+ export { HistogramChart } from "@/components/charts/HistogramChart";
126
+ export { TopKSummaryList } from "@/components/charts/TopKSummaryList";
127
+ export { SquareIcon } from "@/components/charts/SquareIcon";
128
+
129
+ // =============================================================================
130
+ // Summary
131
+ // =============================================================================
132
+ export { default as SummaryView } from "@/components/summary/SummaryView";
133
+ export { ChangeSummary } from "@/components/summary/ChangeSummary";
134
+ export { SchemaSummary } from "@/components/summary/SchemaSummary";
135
+
136
+ // =============================================================================
137
+ // App Components
138
+ // =============================================================================
139
+ export { EnvInfo } from "@/components/app/EnvInfo";
140
+ export { default as TopBar } from "../../recce-source/js/app/(mainComponents)/TopBar";
141
+ export { default as NavBar } from "../../recce-source/js/app/(mainComponents)/NavBar";
142
+ export { default as DisplayModeToggle } from "../../recce-source/js/app/(mainComponents)/DisplayModeToggle";
143
+ export { default as RecceVersionBadge } from "../../recce-source/js/app/(mainComponents)/RecceVersionBadge";
144
+
145
+ // =============================================================================
146
+ // Shared / Utilities
147
+ // =============================================================================
148
+ export { default as HistoryToggle } from "@/components/shared/HistoryToggle";
149
+ export { IdleTimeoutBadge } from "@/components/timeout/IdleTimeoutBadge";
150
+
151
+ // =============================================================================
152
+ // Icons
153
+ // =============================================================================
154
+ export * from "@/components/icons";
@@ -0,0 +1,14 @@
1
+ declare module '*.svg' {
2
+ const content: any;
3
+ export default content;
4
+ }
5
+
6
+ declare module '*.css' {
7
+ const content: { [className: string]: string };
8
+ export default content;
9
+ }
10
+
11
+ declare module 'public/imgs/reload-image.svg' {
12
+ const content: any;
13
+ export default content;
14
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Hooks Module
3
+ *
4
+ * This module exports custom React hooks from the Recce library.
5
+ */
6
+
7
+ // Custom Hooks
8
+ export { useRecceInstanceInfo } from '@/lib/hooks/useRecceInstanceInfo';
9
+ export { useCheckToast } from '@/lib/hooks/useCheckToast';
10
+ export { useClipBoardToast } from '@/lib/hooks/useClipBoardToast';
11
+
12
+ // Re-export component-specific hooks
13
+ export { useLineageViewContext } from '@/components/lineage/LineageViewContext';
14
+ export { default as useValueDiffAlertDialog } from '@/components/lineage/useValueDiffAlertDialog';
15
+
16
+ // Context Providers
17
+ export { default as RecceContextProvider } from '@/lib/hooks/RecceContextProvider';
18
+ export { RecceInstanceInfoProvider, useRecceInstanceContext } from '@/lib/hooks/RecceInstanceContext';
19
+ export { LineageGraphContextProvider, useLineageGraphContext, useRunsAggregated } from '@/lib/hooks/LineageGraphContext';
20
+ export { RecceShareStateContextProvider, useRecceShareStateContext } from '@/lib/hooks/RecceShareStateContext';
21
+ export { RecceQueryContextProvider, RowCountStateContextProvider, useRecceQueryContext, useRowCountStateContext } from '@/lib/hooks/RecceQueryContext';
22
+ export {
23
+ RecceActionContext,
24
+ RecceActionContextProvider,
25
+ useRecceActionContext,
26
+ type RecceActionContextType,
27
+ } from '@/lib/hooks/RecceActionContext';
28
+ export { RecceCheckContextProvider, useRecceCheckContext } from '@/lib/hooks/RecceCheckContext';
29
+ export { IdleTimeoutProvider, useIdleTimeout } from '@/lib/hooks/IdleTimeoutContext';
30
+
31
+ // API Configuration
32
+ export {
33
+ ApiConfigProvider,
34
+ useApiConfig,
35
+ useApiClient,
36
+ useApiConfigSafe,
37
+ type ApiConfig
38
+ } from '@/lib/hooks/ApiConfigContext';
39
+
40
+ // Route Configuration (for recce-cloud path prefixing)
41
+ export {
42
+ RouteConfigProvider,
43
+ useRouteConfig,
44
+ useRouteConfigSafe,
45
+ type RouteConfig,
46
+ type RouteConfigContextType,
47
+ } from '../lib/hooks/RouteConfigContext';
48
+
49
+ // App Router hooks (custom version with RouteConfigContext support)
50
+ export {
51
+ useAppLocation,
52
+ useAppLocationWithSearch,
53
+ useAppRoute,
54
+ useAppNavigation,
55
+ navigateTo,
56
+ } from '../lib/hooks/useAppRouter';
package/src/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @datarecce/ui - Recce UI Components Library
3
+ *
4
+ * Main entry point for the Recce UI component library.
5
+ * This library provides reusable React components for building
6
+ * data validation and review interfaces.
7
+ */
8
+
9
+ // Re-export everything from submodules
10
+ export * from "./components";
11
+ export * from "./api";
12
+ export * from "./hooks";
13
+ export * from "./types";
14
+ export * from "./theme";
15
+
16
+ // Export a version constant
17
+ export const VERSION = "0.1.0";
@@ -0,0 +1,139 @@
1
+ "use client";
2
+
3
+ import React, { createContext, useCallback, useContext, useMemo } from "react";
4
+
5
+ /**
6
+ * Route Configuration for path prefix customization.
7
+ *
8
+ * This context allows recce-cloud to configure a base path prefix
9
+ * for all navigation within OSS components.
10
+ *
11
+ * Default behavior (OSS):
12
+ * - basePath: "" (uses absolute paths like /query, /checks)
13
+ *
14
+ * Cloud usage example:
15
+ * - basePath: "/oss/abc123" or "/preview/abc123"
16
+ * - Navigation to "/query" becomes "/oss/abc123/query"
17
+ */
18
+
19
+ export interface RouteConfig {
20
+ /**
21
+ * Base path prefix for navigation.
22
+ * For OSS: "" (empty string, uses absolute paths like /query)
23
+ * For Cloud: "/oss/<sessionId>" or "/preview/<sessionId>"
24
+ */
25
+ basePath: string;
26
+ }
27
+
28
+ export interface RouteConfigContextType extends RouteConfig {
29
+ /**
30
+ * Resolves a path with the base path prefix.
31
+ * @param path - The path to resolve (e.g., "/query")
32
+ * @returns The resolved path (e.g., "/oss/abc123/query")
33
+ */
34
+ resolvePath: (path: string) => string;
35
+ }
36
+
37
+ const defaultConfig: RouteConfig = {
38
+ basePath: "",
39
+ };
40
+
41
+ const RouteConfigContext = createContext<RouteConfigContextType | null>(null);
42
+
43
+ interface RouteConfigProviderProps extends Partial<RouteConfig> {
44
+ children: React.ReactNode;
45
+ }
46
+
47
+ /**
48
+ * Provider for route configuration.
49
+ *
50
+ * Wrap your application (or RecceContextProvider) with this provider
51
+ * to configure path prefixes for navigation.
52
+ *
53
+ * @example
54
+ * // In recce-cloud
55
+ * <RouteConfigProvider basePath={`/oss/${sessionId}`}>
56
+ * <RecceContextProvider>
57
+ * {children}
58
+ * </RecceContextProvider>
59
+ * </RouteConfigProvider>
60
+ */
61
+ export function RouteConfigProvider({
62
+ children,
63
+ basePath = defaultConfig.basePath,
64
+ }: RouteConfigProviderProps) {
65
+ const resolvePath = useCallback(
66
+ (path: string): string => {
67
+ // If no basePath configured, return path as-is (OSS mode)
68
+ if (!basePath) {
69
+ return path;
70
+ }
71
+
72
+ // Handle paths that already start with the basePath (avoid double-prefixing)
73
+ if (path.startsWith(basePath)) {
74
+ return path;
75
+ }
76
+
77
+ // Handle absolute URLs (http://, https://, etc.) - don't prefix
78
+ if (path.match(/^https?:\/\//)) {
79
+ return path;
80
+ }
81
+
82
+ // Handle hash-only paths - don't prefix
83
+ if (path.startsWith("#")) {
84
+ return path;
85
+ }
86
+
87
+ // Ensure proper joining (no double slashes)
88
+ const cleanBasePath = basePath.endsWith("/")
89
+ ? basePath.slice(0, -1)
90
+ : basePath;
91
+ const cleanPath = path.startsWith("/") ? path : `/${path}`;
92
+
93
+ return `${cleanBasePath}${cleanPath}`;
94
+ },
95
+ [basePath],
96
+ );
97
+
98
+ const contextValue: RouteConfigContextType = useMemo(
99
+ () => ({
100
+ basePath,
101
+ resolvePath,
102
+ }),
103
+ [basePath, resolvePath],
104
+ );
105
+
106
+ return React.createElement(
107
+ RouteConfigContext.Provider,
108
+ { value: contextValue },
109
+ children,
110
+ );
111
+ }
112
+
113
+ // Default context for OSS mode (no prefix)
114
+ const defaultRouteConfigContext: RouteConfigContextType = {
115
+ basePath: "",
116
+ resolvePath: (path: string) => path,
117
+ };
118
+
119
+ /**
120
+ * Hook to access route configuration.
121
+ *
122
+ * When used outside RouteConfigProvider, returns default config
123
+ * (for OSS backward compatibility).
124
+ *
125
+ * @returns RouteConfigContextType with basePath and resolvePath function
126
+ */
127
+ export function useRouteConfig(): RouteConfigContextType {
128
+ const context = useContext(RouteConfigContext);
129
+ // Return default config if outside provider (OSS mode)
130
+ return context ?? defaultRouteConfigContext;
131
+ }
132
+
133
+ /**
134
+ * Safe hook that returns null if context not available.
135
+ * Useful for components that need to detect if RouteConfigProvider is present.
136
+ */
137
+ export function useRouteConfigSafe(): RouteConfigContextType | null {
138
+ return useContext(RouteConfigContext);
139
+ }
@@ -0,0 +1,240 @@
1
+ /**
2
+ * useAppRouter - Navigation utilities for Next.js App Router with RouteConfig support
3
+ *
4
+ * This is a custom version that wraps the OSS useAppRouter to add
5
+ * RouteConfigContext support for path prefixing in recce-cloud.
6
+ *
7
+ * The key difference from OSS:
8
+ * - setLocation() automatically prefixes paths with the configured basePath
9
+ * - This allows OSS components to use setLocation("/query") while
10
+ * recce-cloud can configure basePath="/oss/abc123" to get "/oss/abc123/query"
11
+ */
12
+
13
+ "use client";
14
+
15
+ import {
16
+ useParams,
17
+ usePathname,
18
+ useRouter,
19
+ useSearchParams,
20
+ } from "next/navigation";
21
+ import { useCallback, useMemo } from "react";
22
+ import { useRouteConfig } from "./RouteConfigContext";
23
+
24
+ interface NavigateOptions {
25
+ replace?: boolean;
26
+ scroll?: boolean;
27
+ }
28
+
29
+ /**
30
+ * Hook that provides Wouter-compatible location API using Next.js App Router
31
+ * with RouteConfigContext support for path prefixing.
32
+ *
33
+ * NOTE: This returns only the pathname (not search params) to avoid
34
+ * triggering Suspense boundaries on every navigation.
35
+ *
36
+ * @returns [pathname, setLocation] tuple similar to Wouter's useLocation
37
+ *
38
+ * @example
39
+ * const [location, setLocation] = useAppLocation();
40
+ * setLocation("/checks?id=123"); // In cloud mode with basePath="/oss/abc123"
41
+ * // navigates to "/oss/abc123/checks?id=123"
42
+ */
43
+ export function useAppLocation(): [
44
+ string,
45
+ (to: string, options?: NavigateOptions) => void,
46
+ ] {
47
+ const router = useRouter();
48
+ const pathname = usePathname();
49
+ const { resolvePath } = useRouteConfig();
50
+
51
+ // Navigation function compatible with Wouter's setLocation
52
+ // Automatically applies basePath prefix from RouteConfigContext
53
+ const setLocation = useCallback(
54
+ (to: string, options?: NavigateOptions) => {
55
+ // Separate path and query string for proper handling
56
+ const [pathPart, queryPart] = to.split("?");
57
+ const resolvedPath = resolvePath(pathPart);
58
+ const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
59
+
60
+ if (options?.replace) {
61
+ router.replace(fullPath, { scroll: options?.scroll ?? true });
62
+ } else {
63
+ router.push(fullPath, { scroll: options?.scroll ?? true });
64
+ }
65
+ },
66
+ [router, resolvePath],
67
+ );
68
+
69
+ return [pathname, setLocation];
70
+ }
71
+
72
+ /**
73
+ * Hook that includes search params in the location string.
74
+ * Also supports RouteConfigContext path prefixing.
75
+ *
76
+ * WARNING: This hook uses useSearchParams() which triggers Suspense.
77
+ * Only use this in components that are wrapped in a <Suspense> boundary,
78
+ * or in leaf components where suspension is acceptable.
79
+ *
80
+ * @returns [fullLocation, setLocation] tuple with search params included
81
+ */
82
+ export function useAppLocationWithSearch(): [
83
+ string,
84
+ (to: string, options?: NavigateOptions) => void,
85
+ ] {
86
+ const router = useRouter();
87
+ const pathname = usePathname();
88
+ const searchParams = useSearchParams();
89
+ const { resolvePath } = useRouteConfig();
90
+
91
+ // Construct full location string including search params
92
+ const location = useMemo(() => {
93
+ const search = searchParams?.toString();
94
+ return search ? `${pathname}?${search}` : pathname;
95
+ }, [pathname, searchParams]);
96
+
97
+ // Navigation function with RouteConfigContext support
98
+ const setLocation = useCallback(
99
+ (to: string, options?: NavigateOptions) => {
100
+ const [pathPart, queryPart] = to.split("?");
101
+ const resolvedPath = resolvePath(pathPart);
102
+ const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
103
+
104
+ if (options?.replace) {
105
+ router.replace(fullPath, { scroll: options?.scroll ?? true });
106
+ } else {
107
+ router.push(fullPath, { scroll: options?.scroll ?? true });
108
+ }
109
+ },
110
+ [router, resolvePath],
111
+ );
112
+
113
+ return [location, setLocation];
114
+ }
115
+
116
+ /**
117
+ * Hook to check if current path matches a pattern
118
+ * Similar to Wouter's useRoute
119
+ *
120
+ * @param pattern - The route pattern to match (e.g., "/checks/:checkId")
121
+ * @returns [isMatch, params] tuple
122
+ *
123
+ * @example
124
+ * const [isMatch, params] = useAppRoute("/checks/:checkId");
125
+ * if (isMatch) {
126
+ * console.log(params.checkId); // "abc-123"
127
+ * }
128
+ */
129
+ export function useAppRoute(
130
+ pattern: string,
131
+ ): [boolean, Record<string, string>] {
132
+ const pathname = usePathname();
133
+ const params = useParams();
134
+
135
+ const isMatch = useMemo(() => {
136
+ // Convert Next.js dynamic route pattern to regex
137
+ // /checks/[checkId] -> /checks/:checkId -> /checks/([^/]+)
138
+ const regexPattern = pattern
139
+ .replace(/:\w+/g, "([^/]+)") // :param -> capture group
140
+ .replace(/\*/g, ".*"); // * -> wildcard
141
+
142
+ const regex = new RegExp(`^${regexPattern}$`);
143
+ return regex.test(pathname);
144
+ }, [pattern, pathname]);
145
+
146
+ // Convert Next.js params to plain object
147
+ const paramsObj = useMemo(() => {
148
+ if (!params) return {};
149
+ return Object.fromEntries(
150
+ Object.entries(params).map(([key, value]) => [
151
+ key,
152
+ Array.isArray(value) ? value.join("/") : value,
153
+ ]),
154
+ );
155
+ }, [params]);
156
+
157
+ return [isMatch, paramsObj as Record<string, string>];
158
+ }
159
+
160
+ /**
161
+ * Imperative navigation function for use outside React components
162
+ * Use sparingly - prefer useAppLocation hook in components
163
+ *
164
+ * NOTE: This function does NOT support RouteConfigContext because
165
+ * it's used outside of React component tree. If you need path prefixing,
166
+ * use useAppLocation hook instead.
167
+ *
168
+ * @example
169
+ * // In an event handler or utility function
170
+ * import { navigateTo } from "@/lib/hooks/useAppRouter";
171
+ * navigateTo("/checks?id=123");
172
+ */
173
+ export function navigateTo(path: string, replace = false): void {
174
+ if (typeof window !== "undefined") {
175
+ if (replace) {
176
+ window.history.replaceState(null, "", path);
177
+ } else {
178
+ window.history.pushState(null, "", path);
179
+ }
180
+ // Trigger Next.js to recognize the navigation
181
+ window.dispatchEvent(new PopStateEvent("popstate"));
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Hook for programmatic navigation with more options
187
+ * Provides direct access to Next.js router methods with RouteConfigContext support
188
+ *
189
+ * NOTE: Does not include searchParams to avoid Suspense.
190
+ * Use useSearchParams() directly in components that need it.
191
+ */
192
+ export function useAppNavigation() {
193
+ const router = useRouter();
194
+ const pathname = usePathname();
195
+ const params = useParams();
196
+ const { resolvePath } = useRouteConfig();
197
+
198
+ // Wrap router.push and router.replace with path resolution
199
+ const push = useCallback(
200
+ (href: string, options?: { scroll?: boolean }) => {
201
+ const [pathPart, queryPart] = href.split("?");
202
+ const resolvedPath = resolvePath(pathPart);
203
+ const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
204
+ router.push(fullPath, options);
205
+ },
206
+ [router, resolvePath],
207
+ );
208
+
209
+ const replace = useCallback(
210
+ (href: string, options?: { scroll?: boolean }) => {
211
+ const [pathPart, queryPart] = href.split("?");
212
+ const resolvedPath = resolvePath(pathPart);
213
+ const fullPath = queryPart ? `${resolvedPath}?${queryPart}` : resolvedPath;
214
+ router.replace(fullPath, options);
215
+ },
216
+ [router, resolvePath],
217
+ );
218
+
219
+ return {
220
+ /** Current pathname */
221
+ pathname,
222
+ /** Current route params */
223
+ params: params as Record<string, string>,
224
+ /** Navigate to a new path (with RouteConfigContext support) */
225
+ push,
226
+ /** Replace current history entry (with RouteConfigContext support) */
227
+ replace,
228
+ /** Go back in history */
229
+ back: router.back,
230
+ /** Go forward in history */
231
+ forward: router.forward,
232
+ /** Refresh the current route */
233
+ refresh: router.refresh,
234
+ /** Prefetch a route for faster navigation */
235
+ prefetch: router.prefetch,
236
+ };
237
+ }
238
+
239
+ // Re-export Next.js hooks for convenience
240
+ export { useRouter, usePathname, useParams, useSearchParams };