@manta-eu/react 0.8.0 → 0.9.0

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 (533) hide show
  1. package/dist/action-plan-changes/ActionPlanChangesTable.js +1 -1
  2. package/dist/action-plan-changes/build-change-tree.js.map +1 -1
  3. package/dist/ad-preview/AdPluralDisplay.js +1 -1
  4. package/dist/ad-preview/GoogleAdGroupAdSingularDisplay.js +1 -3
  5. package/dist/ad-preview/GoogleAdGroupAdSingularDisplay.js.map +1 -1
  6. package/dist/ad-preview/MetaAdPreview.js +1 -1
  7. package/dist/ad-preview/meta-ad-copy.d.ts.map +1 -1
  8. package/dist/ad-preview/meta-ad-model.js.map +1 -1
  9. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  10. package/dist/components/ad-preview/business-avatar.d.ts.map +1 -1
  11. package/dist/components/ad-preview/business-identity.d.ts.map +1 -1
  12. package/dist/components/ad-preview/business-info.d.ts.map +1 -1
  13. package/dist/components/ad-preview/facebook/carousel.d.ts.map +1 -1
  14. package/dist/components/ad-preview/facebook/constants.d.ts.map +1 -1
  15. package/dist/components/ad-preview/facebook/header.js +1 -1
  16. package/dist/components/ad-preview/facebook/instream-reels.d.ts.map +1 -1
  17. package/dist/components/ad-preview/facebook/marketplace.d.ts.map +1 -1
  18. package/dist/components/ad-preview/google/search.js +1 -1
  19. package/dist/components/ad-preview/instagram/feed.js +1 -1
  20. package/dist/components/ad-preview/instagram/search-result.d.ts.map +1 -1
  21. package/dist/components/ad-preview/use-scroll-navigation.d.ts.map +1 -1
  22. package/dist/components/ai-elements/conversation.js +1 -1
  23. package/dist/components/badge/index.d.ts.map +1 -1
  24. package/dist/components/badge/index.js +1 -1
  25. package/dist/components/banner/index.d.ts.map +1 -1
  26. package/dist/components/branding/MantaGridAnimation.js +1 -1
  27. package/dist/components/breadcrumbs/index.js +1 -1
  28. package/dist/components/button/index.d.ts.map +1 -1
  29. package/dist/components/calendar/index.js +2 -2
  30. package/dist/components/card/index.d.ts.map +1 -1
  31. package/dist/components/chart/ForecastEventCard.js +1 -1
  32. package/dist/components/chart/ForecastHoverCard.js +1 -1
  33. package/dist/components/chart/ForecastLegend.d.ts.map +1 -1
  34. package/dist/components/chart/ForecastLegend.js +10 -2
  35. package/dist/components/chart/ForecastLegend.js.map +1 -1
  36. package/dist/components/chart/annotations.d.ts.map +1 -1
  37. package/dist/components/chart/chart-colors.d.ts.map +1 -1
  38. package/dist/components/chart/chart-schemas.d.ts +599 -599
  39. package/dist/components/chart/chart-schemas.d.ts.map +1 -1
  40. package/dist/components/chart/chart-schemas.js.map +1 -1
  41. package/dist/components/chart/chart.js +1 -1
  42. package/dist/components/chart/forecast-model.d.ts +1 -1
  43. package/dist/components/chart/forecast-model.d.ts.map +1 -1
  44. package/dist/components/chart/forecast-model.js.map +1 -1
  45. package/dist/components/chart/forecast.d.ts.map +1 -1
  46. package/dist/components/chat/chat-input/index.d.ts +1 -1
  47. package/dist/components/chat/chat-input/index.js +1 -1
  48. package/dist/components/chat/chat-input-footer/index.js +1 -1
  49. package/dist/components/chat/chat-reasoning/index.js +1 -1
  50. package/dist/components/chat-view/Chat.js +3 -3
  51. package/dist/components/chat-view/FileMessagePart.js +1 -1
  52. package/dist/components/chat-view/GraphContextPanel.js +1 -1
  53. package/dist/components/chat-view/MessageItem.js +1 -1
  54. package/dist/components/command/index.d.ts +15 -15
  55. package/dist/components/command/index.d.ts.map +1 -1
  56. package/dist/components/command/index.js +1 -1
  57. package/dist/components/dropdown/index.js +1 -1
  58. package/dist/components/file-dropzone/index.d.ts +25 -0
  59. package/dist/components/file-dropzone/index.d.ts.map +1 -0
  60. package/dist/components/file-dropzone/index.js +70 -0
  61. package/dist/components/file-dropzone/index.js.map +1 -0
  62. package/dist/components/graph/AgentsGraphListRow.js +1 -1
  63. package/dist/components/input/ai-action-buttons.js +1 -1
  64. package/dist/components/input/input-date-range.js +1 -1
  65. package/dist/components/input/input-field.d.ts.map +1 -1
  66. package/dist/components/input/input-field.js +1 -1
  67. package/dist/components/input/textarea.d.ts.map +1 -1
  68. package/dist/components/input/textarea.js +2 -2
  69. package/dist/components/input-otp/index.d.ts +6 -6
  70. package/dist/components/input-otp/index.d.ts.map +1 -1
  71. package/dist/components/layouts/InstallPrompt.js +1 -1
  72. package/dist/components/layouts/KnowledgeGraphStartupGate.d.ts +1 -1
  73. package/dist/components/layouts/RouteLayout.js +1 -1
  74. package/dist/components/layouts/page/PageHeaderActions.js +1 -1
  75. package/dist/components/loader/index.d.ts.map +1 -1
  76. package/dist/components/manta-logo/index.d.ts.map +1 -1
  77. package/dist/components/modal/index.d.ts.map +1 -1
  78. package/dist/components/onboarding/SidebarSpotlight.js +1 -1
  79. package/dist/components/pill/index.d.ts.map +1 -1
  80. package/dist/components/planning/ActionPlanDetailView.js +1 -1
  81. package/dist/components/planning/ManualActionList.d.ts +1 -1
  82. package/dist/components/planning/PlanDetailFooter.js +1 -1
  83. package/dist/components/planning/plan-detail-utils.d.ts.map +1 -1
  84. package/dist/components/planning/plan-detail-utils.js +2 -0
  85. package/dist/components/planning/plan-detail-utils.js.map +1 -1
  86. package/dist/components/progress/index.d.ts.map +1 -1
  87. package/dist/components/radio/index.d.ts.map +1 -1
  88. package/dist/components/rdf-insights/CampaignPerformanceSummary.js +1 -1
  89. package/dist/components/rdf-insights/InsightCard.js +1 -1
  90. package/dist/components/rdf-insights/ProductProfitability.js +1 -1
  91. package/dist/components/rdf-insights/ProductSalesRanking.js +1 -1
  92. package/dist/components/rdf-insights/ProductVariantsTable.js +1 -1
  93. package/dist/components/rdf-insights/RoasBenchmark.js +1 -1
  94. package/dist/components/select/index.d.ts.map +1 -1
  95. package/dist/components/sheet/index.d.ts.map +1 -1
  96. package/dist/components/sidebar/company-picker.js +1 -1
  97. package/dist/components/sidebar/nav-menu.js +1 -1
  98. package/dist/components/skeleton/index.d.ts +4 -4
  99. package/dist/components/skeleton/index.d.ts.map +1 -1
  100. package/dist/components/status/index.d.ts.map +1 -1
  101. package/dist/components/table/index.d.ts.map +1 -1
  102. package/dist/components/table/index.js.map +1 -1
  103. package/dist/components/table/use-table-state.js.map +1 -1
  104. package/dist/components/table-skeleton/index.js +1 -1
  105. package/dist/components/tabs/index.d.ts.map +1 -1
  106. package/dist/components/thinking/index.d.ts.map +1 -1
  107. package/dist/components/toast/index.d.ts +1 -0
  108. package/dist/components/toast/index.d.ts.map +1 -1
  109. package/dist/components/toast/index.js +1 -0
  110. package/dist/components/toast/index.js.map +1 -1
  111. package/dist/components/tool-invocation-card/DefaultResultDisplay.js +1 -1
  112. package/dist/components/tool-invocation-card/ToolOutputRenderer.js +1 -1
  113. package/dist/components/tree-multi-select/tree-multi-select-rows.js.map +1 -1
  114. package/dist/datastore-picker/DatastoreRow.js +1 -1
  115. package/dist/easing.d.ts.map +1 -1
  116. package/dist/entity-tree/EntityRelationTree.js +1 -1
  117. package/dist/explain-fact/EntityChip.js +1 -1
  118. package/dist/explain-fact/conclusion/ConclusionSubtitle.js +1 -1
  119. package/dist/explain-fact/inspector/InspectorBindings.js +1 -1
  120. package/dist/explain-fact/inspector/SupportsSection.js +1 -1
  121. package/dist/explain-fact/proof-tree/ProofRowContent.js +1 -1
  122. package/dist/explain-fact/proof-tree/ProofRowValue.js +1 -1
  123. package/dist/globals.css +33 -0
  124. package/dist/graph/GraphContextPanel.js +1 -1
  125. package/dist/graph/GraphControls.d.ts +1 -1
  126. package/dist/graph/GraphControls.d.ts.map +1 -1
  127. package/dist/graph/GraphControls.js +1 -1
  128. package/dist/graph/GraphErrorBoundary.d.ts +1 -1
  129. package/dist/graph/GraphErrorBoundary.d.ts.map +1 -1
  130. package/dist/graph/NodeContextMenu.d.ts +1 -1
  131. package/dist/graph/NodeContextMenu.d.ts.map +1 -1
  132. package/dist/graph/NodeContextMenu.js +1 -1
  133. package/dist/graph/NodeDetailPanel/PropertyDiffView.js +1 -1
  134. package/dist/graph/NodeDetailPanel/TypeSummaryPanel.d.ts.map +1 -1
  135. package/dist/graph/NodeDetailPanel/TypeSummaryPanel.js.map +1 -1
  136. package/dist/graph/custom-nodes.d.ts +4 -4
  137. package/dist/graph/custom-nodes.d.ts.map +1 -1
  138. package/dist/graph/custom-nodes.js +1 -1
  139. package/dist/graph/graph-layout.js.map +1 -1
  140. package/dist/graph/graph-list-utils.js.map +1 -1
  141. package/dist/graph/graph-model.js.map +1 -1
  142. package/dist/graph/graph-store.js.map +1 -1
  143. package/dist/graph/nodes/AdsDailyReportTemplateView.d.ts +1 -1
  144. package/dist/graph/nodes/AdsDailyReportTemplateView.d.ts.map +1 -1
  145. package/dist/graph/nodes/AttioCallRecordingView.d.ts +1 -1
  146. package/dist/graph/nodes/AttioCallRecordingView.d.ts.map +1 -1
  147. package/dist/graph/nodes/AttioCompanyView.d.ts +1 -1
  148. package/dist/graph/nodes/AttioCompanyView.d.ts.map +1 -1
  149. package/dist/graph/nodes/AttioDealView.d.ts +1 -1
  150. package/dist/graph/nodes/AttioDealView.d.ts.map +1 -1
  151. package/dist/graph/nodes/AttioMeetingView.d.ts +1 -1
  152. package/dist/graph/nodes/AttioMeetingView.d.ts.map +1 -1
  153. package/dist/graph/nodes/AttioNoteView.d.ts +1 -1
  154. package/dist/graph/nodes/AttioNoteView.d.ts.map +1 -1
  155. package/dist/graph/nodes/AttioTaskView.d.ts +1 -1
  156. package/dist/graph/nodes/AttioTaskView.d.ts.map +1 -1
  157. package/dist/graph/nodes/BrandAssetAnalysisActionView.d.ts +1 -1
  158. package/dist/graph/nodes/BrandAssetAnalysisActionView.d.ts.map +1 -1
  159. package/dist/graph/nodes/BrandAssetAnalysisView.d.ts +1 -1
  160. package/dist/graph/nodes/BrandAssetAnalysisView.d.ts.map +1 -1
  161. package/dist/graph/nodes/BrandFontSuggestionView.d.ts +1 -1
  162. package/dist/graph/nodes/BrandFontSuggestionView.d.ts.map +1 -1
  163. package/dist/graph/nodes/BrandGuidelinesView.d.ts +1 -1
  164. package/dist/graph/nodes/BrandGuidelinesView.d.ts.map +1 -1
  165. package/dist/graph/nodes/ConnectedAccountCard.d.ts +1 -1
  166. package/dist/graph/nodes/ConnectedAccountCard.d.ts.map +1 -1
  167. package/dist/graph/nodes/CoresignalCompanyView.d.ts +1 -1
  168. package/dist/graph/nodes/CoresignalCompanyView.d.ts.map +1 -1
  169. package/dist/graph/nodes/CoresignalEmployeeView.d.ts +1 -1
  170. package/dist/graph/nodes/CoresignalEmployeeView.d.ts.map +1 -1
  171. package/dist/graph/nodes/CoresignalExperienceView.d.ts +1 -1
  172. package/dist/graph/nodes/CoresignalExperienceView.d.ts.map +1 -1
  173. package/dist/graph/nodes/CoresignalJobView.d.ts +1 -1
  174. package/dist/graph/nodes/CoresignalJobView.d.ts.map +1 -1
  175. package/dist/graph/nodes/CoresignalKeyExecutiveDepartureView.d.ts +1 -1
  176. package/dist/graph/nodes/CoresignalKeyExecutiveDepartureView.d.ts.map +1 -1
  177. package/dist/graph/nodes/EntityCardShell.d.ts +1 -1
  178. package/dist/graph/nodes/EntityCardShell.d.ts.map +1 -1
  179. package/dist/graph/nodes/Ga4DailyOverviewView.d.ts +1 -1
  180. package/dist/graph/nodes/Ga4DailyOverviewView.d.ts.map +1 -1
  181. package/dist/graph/nodes/Ga4FunnelEventCountView.d.ts +1 -1
  182. package/dist/graph/nodes/Ga4FunnelEventCountView.d.ts.map +1 -1
  183. package/dist/graph/nodes/Ga4TrafficSourceView.d.ts +1 -1
  184. package/dist/graph/nodes/Ga4TrafficSourceView.d.ts.map +1 -1
  185. package/dist/graph/nodes/GoogleAdGroupAdView.d.ts +1 -1
  186. package/dist/graph/nodes/GoogleAdGroupAdView.d.ts.map +1 -1
  187. package/dist/graph/nodes/GoogleAdGroupCriterionView.d.ts +1 -1
  188. package/dist/graph/nodes/GoogleAdGroupCriterionView.d.ts.map +1 -1
  189. package/dist/graph/nodes/GoogleAdGroupView.d.ts +1 -1
  190. package/dist/graph/nodes/GoogleAdGroupView.d.ts.map +1 -1
  191. package/dist/graph/nodes/GoogleCampaignBudgetView.d.ts +1 -1
  192. package/dist/graph/nodes/GoogleCampaignBudgetView.d.ts.map +1 -1
  193. package/dist/graph/nodes/GoogleCampaignCriterionView.d.ts +1 -1
  194. package/dist/graph/nodes/GoogleCampaignCriterionView.d.ts.map +1 -1
  195. package/dist/graph/nodes/GoogleCampaignInsightView.d.ts +1 -1
  196. package/dist/graph/nodes/GoogleCampaignInsightView.d.ts.map +1 -1
  197. package/dist/graph/nodes/GoogleCampaignView.d.ts +1 -1
  198. package/dist/graph/nodes/GoogleCampaignView.d.ts.map +1 -1
  199. package/dist/graph/nodes/GoogleCustomerClientView.d.ts +1 -1
  200. package/dist/graph/nodes/GoogleCustomerClientView.d.ts.map +1 -1
  201. package/dist/graph/nodes/GoogleCustomerView.d.ts +1 -1
  202. package/dist/graph/nodes/GoogleCustomerView.d.ts.map +1 -1
  203. package/dist/graph/nodes/GoogleSearchTermInsightView.d.ts +1 -1
  204. package/dist/graph/nodes/GoogleSearchTermInsightView.d.ts.map +1 -1
  205. package/dist/graph/nodes/LinkedinAdAccountView.d.ts +1 -1
  206. package/dist/graph/nodes/LinkedinAdAccountView.d.ts.map +1 -1
  207. package/dist/graph/nodes/MetaAdAccountActivityView.d.ts +1 -1
  208. package/dist/graph/nodes/MetaAdAccountActivityView.d.ts.map +1 -1
  209. package/dist/graph/nodes/MetaAdAccountView.d.ts +1 -1
  210. package/dist/graph/nodes/MetaAdAccountView.d.ts.map +1 -1
  211. package/dist/graph/nodes/MetaAdImageView.d.ts +1 -1
  212. package/dist/graph/nodes/MetaAdImageView.d.ts.map +1 -1
  213. package/dist/graph/nodes/MetaAdSetView.d.ts +1 -1
  214. package/dist/graph/nodes/MetaAdSetView.d.ts.map +1 -1
  215. package/dist/graph/nodes/MetaAdView.d.ts +1 -1
  216. package/dist/graph/nodes/MetaAdView.d.ts.map +1 -1
  217. package/dist/graph/nodes/MetaCampaignView.d.ts +1 -1
  218. package/dist/graph/nodes/MetaCampaignView.d.ts.map +1 -1
  219. package/dist/graph/nodes/MetaInsightView.d.ts +1 -1
  220. package/dist/graph/nodes/MetaInsightView.d.ts.map +1 -1
  221. package/dist/graph/nodes/RenderedTemplateView.d.ts +1 -1
  222. package/dist/graph/nodes/RenderedTemplateView.d.ts.map +1 -1
  223. package/dist/graph/nodes/SchemaActionView.d.ts +1 -1
  224. package/dist/graph/nodes/SchemaActionView.d.ts.map +1 -1
  225. package/dist/graph/nodes/ShopifyShopView.d.ts +1 -1
  226. package/dist/graph/nodes/ShopifyShopView.d.ts.map +1 -1
  227. package/dist/graph/nodes/SlackChannelView.d.ts +1 -1
  228. package/dist/graph/nodes/SlackChannelView.d.ts.map +1 -1
  229. package/dist/graph/nodes/SlackMessageView.d.ts +1 -1
  230. package/dist/graph/nodes/SlackMessageView.d.ts.map +1 -1
  231. package/dist/graph/nodes/SlackUserView.d.ts +1 -1
  232. package/dist/graph/nodes/SlackUserView.d.ts.map +1 -1
  233. package/dist/graph/nodes/SlackWorkspaceView.d.ts +1 -1
  234. package/dist/graph/nodes/SlackWorkspaceView.d.ts.map +1 -1
  235. package/dist/graph/nodes/attio-shared.d.ts +1 -1
  236. package/dist/graph/nodes/attio-shared.d.ts.map +1 -1
  237. package/dist/graph/nodes/attio-shared.js +1 -1
  238. package/dist/graph/nodes/brand-shared.d.ts.map +1 -1
  239. package/dist/graph/nodes/card-rows.js +1 -1
  240. package/dist/graph/nodes/google-campaign-utils.d.ts.map +1 -1
  241. package/dist/graph/nodes/insight-shared.d.ts +1 -1
  242. package/dist/graph/nodes/insight-shared.d.ts.map +1 -1
  243. package/dist/graph/special-nodes/BaseNode.d.ts +2 -2
  244. package/dist/graph/special-nodes/BaseNode.d.ts.map +1 -1
  245. package/dist/graph/special-nodes/BaseNode.js +1 -1
  246. package/dist/graph/special-nodes/DynamicNode.d.ts +1 -1
  247. package/dist/graph/special-nodes/DynamicNode.d.ts.map +1 -1
  248. package/dist/graph/special-nodes/EntityValueChip.js +1 -1
  249. package/dist/graph/special-nodes/GenericNode.d.ts +1 -1
  250. package/dist/graph/special-nodes/GenericNode.d.ts.map +1 -1
  251. package/dist/graph/special-nodes/GenericView.d.ts +1 -1
  252. package/dist/graph/special-nodes/GenericView.d.ts.map +1 -1
  253. package/dist/graph/special-nodes/NodeFrame.d.ts +1 -1
  254. package/dist/graph/special-nodes/NodeFrame.d.ts.map +1 -1
  255. package/dist/graph/special-nodes/NodeFrame.js +1 -1
  256. package/dist/graph/special-nodes/TypeSummaryNode.d.ts +1 -1
  257. package/dist/graph/special-nodes/TypeSummaryNode.d.ts.map +1 -1
  258. package/dist/graph/special-nodes/TypeSummaryNode.js +1 -1
  259. package/dist/graph/special-nodes/card-facts.js.map +1 -1
  260. package/dist/hooks/resolved-terms.d.ts +1 -0
  261. package/dist/hooks/resolved-terms.d.ts.map +1 -1
  262. package/dist/hooks/resolved-terms.js +2 -1
  263. package/dist/hooks/resolved-terms.js.map +1 -1
  264. package/dist/hooks/use-action-plans-list.d.ts.map +1 -1
  265. package/dist/hooks/use-action-plans-list.js.map +1 -1
  266. package/dist/hooks/use-activity-feed.js.map +1 -1
  267. package/dist/hooks/use-connection-problems.d.ts.map +1 -1
  268. package/dist/hooks/use-conversation-starters.d.ts +2 -2
  269. package/dist/hooks/use-entity-relations.d.ts.map +1 -1
  270. package/dist/hooks/use-entity.d.ts.map +1 -1
  271. package/dist/hooks/use-latest-rendered-template.d.ts.map +1 -1
  272. package/dist/hooks/use-manual-actions.d.ts.map +1 -1
  273. package/dist/hooks/use-manual-actions.js.map +1 -1
  274. package/dist/hooks/use-sparql-construct.d.ts +2 -0
  275. package/dist/hooks/use-sparql-construct.d.ts.map +1 -1
  276. package/dist/hooks/use-sparql-construct.js +2 -1
  277. package/dist/hooks/use-sparql-construct.js.map +1 -1
  278. package/dist/hooks/useActionGraph.d.ts.map +1 -1
  279. package/dist/hooks/useActionGraph.js.map +1 -1
  280. package/dist/hooks/useActionPlanDetail.d.ts +2 -2
  281. package/dist/hooks/useActionPlanDetail.d.ts.map +1 -1
  282. package/dist/hooks/useAuth.d.ts +1 -1
  283. package/dist/hooks/useAuth.d.ts.map +1 -1
  284. package/dist/hooks/useAuth.js +3 -1
  285. package/dist/hooks/useAuth.js.map +1 -1
  286. package/dist/hooks/useConversationGraphContext.js.map +1 -1
  287. package/dist/hooks/useConversations.js.map +1 -1
  288. package/dist/hooks/useDatastoreSelection.js.map +1 -1
  289. package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
  290. package/dist/index.d.ts +1 -0
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +1 -0
  293. package/dist/index.js.map +1 -1
  294. package/dist/lib/build-config.js.map +1 -1
  295. package/dist/lib/datastore-route-table.d.ts +3 -0
  296. package/dist/lib/datastore-route-table.d.ts.map +1 -1
  297. package/dist/lib/datastore-route-table.js +3 -0
  298. package/dist/lib/datastore-route-table.js.map +1 -1
  299. package/dist/lib/default-map.d.ts.map +1 -1
  300. package/dist/lib/default-map.js.map +1 -1
  301. package/dist/lib/hooks/{useChatUpload.d.ts → useFileUpload.d.ts} +3 -3
  302. package/dist/lib/hooks/{useChatUpload.d.ts.map → useFileUpload.d.ts.map} +1 -1
  303. package/dist/lib/hooks/{useChatUpload.js → useFileUpload.js} +2 -2
  304. package/dist/lib/hooks/{useChatUpload.js.map → useFileUpload.js.map} +1 -1
  305. package/dist/lib/merge-refs.d.ts.map +1 -1
  306. package/dist/lib/rdf/insights.js.map +1 -1
  307. package/dist/lib/structured-data/schema-converter.d.ts +2 -2
  308. package/dist/lib/structured-data/schema-converter.d.ts.map +1 -1
  309. package/dist/lib/structured-data/schema-converter.js.map +1 -1
  310. package/dist/lib/tanstack-query.js +1 -1
  311. package/dist/lib/tanstack-query.js.map +1 -1
  312. package/dist/lib/term-batcher.d.ts +3 -1
  313. package/dist/lib/term-batcher.d.ts.map +1 -1
  314. package/dist/lib/term-batcher.js +2 -2
  315. package/dist/lib/term-batcher.js.map +1 -1
  316. package/dist/lib/use-can-scroll.d.ts.map +1 -1
  317. package/dist/lib/use-color-palette.d.ts.map +1 -1
  318. package/dist/lib/use-toggle-set.js.map +1 -1
  319. package/dist/lib/utils.js +1 -1
  320. package/dist/ontology/OntologyTermText.js +1 -1
  321. package/dist/providers/ActiveChatProvider.d.ts +1 -1
  322. package/dist/providers/ActiveDatastoreProvider.js.map +1 -1
  323. package/dist/providers/ChatManagerProvider.js.map +1 -1
  324. package/dist/providers/commands/CommandContext.js +1 -1
  325. package/dist/routes/activity/components/ActivityTable.js +1 -1
  326. package/dist/routes/activity/detail/ActivityDetail.d.ts.map +1 -1
  327. package/dist/routes/activity/detail/ActivityDetail.js +1 -1
  328. package/dist/routes/activity/detail/ActivityStepsRail.js +1 -1
  329. package/dist/routes/activity/detail/ActivityTimeline.js +1 -1
  330. package/dist/routes/data-collection/index.d.ts +3 -0
  331. package/dist/routes/data-collection/index.d.ts.map +1 -0
  332. package/dist/routes/data-collection/index.js +43 -0
  333. package/dist/routes/data-collection/index.js.map +1 -0
  334. package/dist/routes/data-explorer/class-properties.js.map +1 -1
  335. package/dist/routes/data-explorer/class-relations.d.ts +2 -2
  336. package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
  337. package/dist/routes/data-explorer/components/DataExplorerLayout.js +5 -2
  338. package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
  339. package/dist/routes/data-explorer/components/DetailHeader.js +1 -1
  340. package/dist/routes/data-explorer/components/DetailHeader.js.map +1 -1
  341. package/dist/routes/data-explorer/components/Rail.d.ts.map +1 -1
  342. package/dist/routes/data-explorer/components/Rail.js +3 -3
  343. package/dist/routes/data-explorer/components/Rail.js.map +1 -1
  344. package/dist/routes/data-explorer/components/SegmentBuilder.js +1 -1
  345. package/dist/routes/data-explorer/components/class-detail/ClassDetail.js +1 -1
  346. package/dist/routes/data-explorer/components/class-detail/CreateRecordAction.js +1 -1
  347. package/dist/routes/data-explorer/components/class-detail/Overview.js +1 -1
  348. package/dist/routes/data-explorer/components/ontology-coverage/CoverageNamespaceRail.js +1 -1
  349. package/dist/routes/data-explorer/components/ontology-coverage/CoverageSkeleton.js +1 -1
  350. package/dist/routes/data-explorer/components/record-detail/CreateAction.js +1 -1
  351. package/dist/routes/data-explorer/components/record-detail/RecordActions.d.ts.map +1 -1
  352. package/dist/routes/data-explorer/components/record-detail/RecordActions.js +12 -9
  353. package/dist/routes/data-explorer/components/record-detail/RecordActions.js.map +1 -1
  354. package/dist/routes/data-explorer/components/record-detail/RecordDetail.js +1 -1
  355. package/dist/routes/data-explorer/components/record-detail/RecordRefresh.d.ts +7 -0
  356. package/dist/routes/data-explorer/components/record-detail/RecordRefresh.d.ts.map +1 -0
  357. package/dist/routes/data-explorer/components/record-detail/RecordRefresh.js +104 -0
  358. package/dist/routes/data-explorer/components/record-detail/RecordRefresh.js.map +1 -0
  359. package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts +8 -0
  360. package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts.map +1 -0
  361. package/dist/routes/data-explorer/components/uploads/IngestRunsList.js +18 -0
  362. package/dist/routes/data-explorer/components/uploads/IngestRunsList.js.map +1 -0
  363. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts +14 -0
  364. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts.map +1 -0
  365. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js +33 -0
  366. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js.map +1 -0
  367. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts +8 -0
  368. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts.map +1 -0
  369. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js +34 -0
  370. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js.map +1 -0
  371. package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts +7 -0
  372. package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts.map +1 -0
  373. package/dist/routes/data-explorer/components/uploads/UploadsPages.js +35 -0
  374. package/dist/routes/data-explorer/components/uploads/UploadsPages.js.map +1 -0
  375. package/dist/routes/data-explorer/coverage.d.ts.map +1 -1
  376. package/dist/routes/data-explorer/index.d.ts +1 -0
  377. package/dist/routes/data-explorer/index.d.ts.map +1 -1
  378. package/dist/routes/data-explorer/index.js +1 -0
  379. package/dist/routes/data-explorer/index.js.map +1 -1
  380. package/dist/routes/data-explorer/namespaces.d.ts +4 -0
  381. package/dist/routes/data-explorer/namespaces.d.ts.map +1 -1
  382. package/dist/routes/data-explorer/namespaces.js +6 -1
  383. package/dist/routes/data-explorer/namespaces.js.map +1 -1
  384. package/dist/routes/data-explorer/sparql-client.js.map +1 -1
  385. package/dist/routes/data-explorer/uploads.d.ts +56 -0
  386. package/dist/routes/data-explorer/uploads.d.ts.map +1 -0
  387. package/dist/routes/data-explorer/uploads.js +140 -0
  388. package/dist/routes/data-explorer/uploads.js.map +1 -0
  389. package/dist/routes/datastores/components/DatastoreTableSkeleton.js +1 -1
  390. package/dist/routes/datastores/components/DatastoresToolbar.js +1 -1
  391. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts +1 -0
  392. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts.map +1 -1
  393. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js +17 -10
  394. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js.map +1 -1
  395. package/dist/routes/datastores/components/StatusBadge.d.ts +7 -8
  396. package/dist/routes/datastores/components/StatusBadge.d.ts.map +1 -1
  397. package/dist/routes/datastores/components/StatusBadge.js +17 -1
  398. package/dist/routes/datastores/components/StatusBadge.js.map +1 -1
  399. package/dist/routes/datastores/components/UnlinkedDatastoresPanel.js +1 -1
  400. package/dist/routes/datastores/flatten.d.ts +6 -1
  401. package/dist/routes/datastores/flatten.d.ts.map +1 -1
  402. package/dist/routes/datastores/flatten.js +37 -2
  403. package/dist/routes/datastores/flatten.js.map +1 -1
  404. package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +4 -2
  405. package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -1
  406. package/dist/routes/datastores/hooks/useDatastoreColumns.js +9 -7
  407. package/dist/routes/datastores/hooks/useDatastoreColumns.js.map +1 -1
  408. package/dist/routes/datastores/index.d.ts.map +1 -1
  409. package/dist/routes/datastores/index.js +54 -19
  410. package/dist/routes/datastores/index.js.map +1 -1
  411. package/dist/routes/integrations/catalog-shape.js.map +1 -1
  412. package/dist/routes/integrations/components/ConnectionRow.js +1 -1
  413. package/dist/routes/integrations/components/ProviderLogo.d.ts.map +1 -1
  414. package/dist/routes/integrations/components/connect-forms/DashConnectForm.js.map +1 -1
  415. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts +3 -0
  416. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -0
  417. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +38 -0
  418. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -0
  419. package/dist/routes/integrations/components/connect-forms/MetaAdsConnectForm.js.map +1 -1
  420. package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js.map +1 -1
  421. package/dist/routes/integrations/components/connect-forms/google-ads-account-tree.js.map +1 -1
  422. package/dist/routes/integrations/components/connect-forms/google-analytics-property-tree.js.map +1 -1
  423. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts +4 -0
  424. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts.map +1 -0
  425. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js +32 -0
  426. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js.map +1 -0
  427. package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.d.ts.map +1 -1
  428. package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js +1 -0
  429. package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js.map +1 -1
  430. package/dist/routes/integrations/connect-forms.d.ts +1 -0
  431. package/dist/routes/integrations/connect-forms.d.ts.map +1 -1
  432. package/dist/routes/integrations/connect-forms.js +1 -0
  433. package/dist/routes/integrations/connect-forms.js.map +1 -1
  434. package/dist/routes/integrations/connection-view.d.ts.map +1 -1
  435. package/dist/routes/integrations/connection-view.js +1 -0
  436. package/dist/routes/integrations/connection-view.js.map +1 -1
  437. package/dist/routes/integrations/types.d.ts.map +1 -1
  438. package/dist/routes/memories/components/ChangeScopeDialog.js +1 -1
  439. package/dist/routes/memories/components/ConflictMemoryCard.js +1 -1
  440. package/dist/routes/memories/components/ConsolidationReviewDialog.js +1 -1
  441. package/dist/routes/memories/components/LoadingSkeleton.js +1 -1
  442. package/dist/routes/memories/components/MemoriesFilters.js +1 -1
  443. package/dist/routes/memories/components/MemoriesTabPanel.js +1 -1
  444. package/dist/routes/memories/components/MemoryActions.js +1 -1
  445. package/dist/routes/memories/components/MemoryFields.js +1 -1
  446. package/dist/routes/memories/components/MemoryFormDialog.js +1 -1
  447. package/dist/routes/memories/expiry-utils.js.map +1 -1
  448. package/dist/routes/memories/hooks/useDuplicateDetection.js.map +1 -1
  449. package/dist/routes/memories/hooks/useLiveContext.d.ts.map +1 -1
  450. package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -1
  451. package/dist/routes/memories/hooks/useMemoryColumns.js +1 -1
  452. package/dist/routes/memories/hooks/useMemoryTable.js.map +1 -1
  453. package/dist/routes/plans/components/ActionPlanPage.js +1 -1
  454. package/dist/routes/plans/components/ActionPlansFilters.js +1 -1
  455. package/dist/routes/plans/components/ActionPlansPage.js +1 -1
  456. package/dist/routes/plans/components/ActionPlansTableBody.js +1 -1
  457. package/dist/routes/plans/components/actionPlansTableConfig.d.ts +7 -7
  458. package/dist/routes/plans/components/actionPlansTableConfig.d.ts.map +1 -1
  459. package/dist/routes/plans/index.js +1 -1
  460. package/dist/routes/rules/components/RuleAffectedActionPlansSection.js +1 -1
  461. package/dist/routes/rules/components/RuleDetailsPage.js +1 -1
  462. package/dist/routes/rules/components/RuleProducersSection.js +1 -1
  463. package/dist/routes/rules/components/RuleSetup.js +1 -1
  464. package/dist/routes/rules/components/RulesOverviewPage.js +1 -1
  465. package/dist/routes/rules/components/datalog-editor/FactsPreview.js +1 -1
  466. package/dist/routes/rules/components/datalog-editor/SparqlQueryPanel.js +1 -1
  467. package/dist/routes/rules/components/rule-actionability.js.map +1 -1
  468. package/dist/rules/RuleNarrativeSegments.js +1 -1
  469. package/dist/rules/datalog-ast/DatalogAtomComponent.js +1 -1
  470. package/dist/rules/datalog-ast/DatalogBodyFormulaComponent.js +1 -1
  471. package/dist/rules/datalog-ast/DatalogExpressionRenderer.js +1 -1
  472. package/dist/rules/datalog-ast/DatalogTermComponent.js +1 -1
  473. package/dist/rules/datalog-cache.js.map +1 -1
  474. package/dist/rules/rule-narrative-format.d.ts.map +1 -1
  475. package/dist/rules/rule-narrative-renderer.js.map +1 -1
  476. package/dist/shared/graph-derived-queries.d.ts.map +1 -1
  477. package/dist/shared/graph-derived-queries.js +2 -1
  478. package/dist/shared/graph-derived-queries.js.map +1 -1
  479. package/dist/style.js +1 -1
  480. package/dist/templates/slack-to-markdown.js +1 -1
  481. package/package.json +27 -14
  482. package/src/app-subpaths.json +1 -0
  483. package/src/components/badge/index.tsx +1 -1
  484. package/src/components/calendar/index.tsx +2 -2
  485. package/src/components/chart/ForecastLegend.tsx +15 -13
  486. package/src/components/chart/forecast-model.ts +6 -8
  487. package/src/components/chat-view/Chat.tsx +2 -2
  488. package/src/components/file-dropzone/index.tsx +165 -0
  489. package/src/components/input/input-field.tsx +1 -1
  490. package/src/components/input/textarea.tsx +1 -1
  491. package/src/components/planning/plan-detail-utils.tsx +2 -0
  492. package/src/components/table/index.tsx +0 -1
  493. package/src/components/toast/index.tsx +1 -0
  494. package/src/graph/NodeDetailPanel/TypeSummaryPanel.tsx +12 -14
  495. package/src/hooks/resolved-terms.ts +6 -1
  496. package/src/hooks/use-sparql-construct.ts +4 -2
  497. package/src/hooks/useAuth.ts +3 -1
  498. package/src/index.ts +1 -0
  499. package/src/lib/chat-types.ts +1 -1
  500. package/src/lib/datastore-route-table.ts +6 -0
  501. package/src/lib/hooks/{useChatUpload.ts → useFileUpload.ts} +2 -2
  502. package/src/lib/tanstack-query.ts +2 -2
  503. package/src/lib/term-batcher.ts +3 -3
  504. package/src/lib/utils.ts +1 -1
  505. package/src/routes/data-collection/index.tsx +82 -0
  506. package/src/routes/data-explorer/components/DataExplorerLayout.tsx +5 -2
  507. package/src/routes/data-explorer/components/DetailHeader.tsx +4 -4
  508. package/src/routes/data-explorer/components/Rail.tsx +13 -2
  509. package/src/routes/data-explorer/components/record-detail/RecordActions.tsx +22 -16
  510. package/src/routes/data-explorer/components/record-detail/RecordRefresh.tsx +150 -0
  511. package/src/routes/data-explorer/components/uploads/IngestRunsList.tsx +63 -0
  512. package/src/routes/data-explorer/components/uploads/IngestStateStatus.tsx +45 -0
  513. package/src/routes/data-explorer/components/uploads/UploadedFilesList.tsx +93 -0
  514. package/src/routes/data-explorer/components/uploads/UploadsPages.tsx +80 -0
  515. package/src/routes/data-explorer/index.tsx +6 -0
  516. package/src/routes/data-explorer/namespaces.ts +7 -1
  517. package/src/routes/data-explorer/uploads.ts +205 -0
  518. package/src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx +49 -10
  519. package/src/routes/datastores/components/StatusBadge.tsx +22 -7
  520. package/src/routes/datastores/flatten.ts +50 -2
  521. package/src/routes/datastores/hooks/useDatastoreColumns.tsx +21 -1
  522. package/src/routes/datastores/index.tsx +64 -13
  523. package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +61 -0
  524. package/src/routes/integrations/components/connect-forms/google-merchant-center-account-tree.ts +38 -0
  525. package/src/routes/integrations/components/connect-forms/setup-account-unavailable-reason.ts +1 -0
  526. package/src/routes/integrations/connect-forms.ts +1 -0
  527. package/src/routes/integrations/connection-view.ts +1 -0
  528. package/src/rules/datalog-ast/DatalogBodyFormulaComponent.tsx +1 -1
  529. package/src/rules/datalog-ast/DatalogTermComponent.tsx +1 -1
  530. package/src/shacl/shacl-form-types.ts +1 -1
  531. package/src/shared/graph-derived-queries.ts +2 -0
  532. package/src/style.ts +1 -1
  533. package/src/templates/slack-to-markdown.ts +1 -1
@@ -1,5 +1,9 @@
1
+ import { Button } from "#components/button/index";
2
+ import { DeleteConfirmationDialog } from "#components/layouts/DeleteConfirmationDialog";
3
+ import { useExecuteAction, type ExecuteActionResult } from "#hooks/useExecuteAction";
4
+ import { useTriples, type TripleRow } from "#routes/data-explorer/triples";
1
5
  import { GQLExecuteActionErrorCode } from "@manta-eu/client";
2
- import { compactUri } from "@manta-eu/client/shared/rdf-namespaces";
6
+ import { compactUri, wellKnownPredicates } from "@manta-eu/client/shared/rdf-namespaces";
3
7
  import { useState } from "react";
4
8
  import { toast } from "sonner";
5
9
  import type { PropertyMap } from "./action-properties";
@@ -7,10 +11,7 @@ import { useRecordActionShapes, type RecordActionShape } from "./action-shapes";
7
11
  import { ActionFormDialog } from "./ActionFormDialog";
8
12
  import { CreateAction } from "./CreateAction";
9
13
  import { RecordActionFeedback } from "./RecordActionFeedback";
10
- import { Button } from "#components/button/index";
11
- import { DeleteConfirmationDialog } from "#components/layouts/DeleteConfirmationDialog";
12
- import { useExecuteAction, type ExecuteActionResult } from "#hooks/useExecuteAction";
13
- import { useTriples, type TripleRow } from "#routes/data-explorer/triples";
14
+ import { RecordRefresh } from "./RecordRefresh";
14
15
 
15
16
  type RecordActionsProps = { iri: string; typeIris: string[] };
16
17
 
@@ -20,20 +21,25 @@ export function RecordActions(props: RecordActionsProps) {
20
21
  const { shapes, error } = useRecordActionShapes(typeIris);
21
22
  const { triples, isLoading: triplesLoading } = useTriples(iri);
22
23
 
23
- if (error) return <span className="typography-tiny text-muted-foreground">Actions unavailable</span>;
24
+ const recordTypes = triples
25
+ .filter((row) => row.predicate === wellKnownPredicates.type && row.objectIsIri)
26
+ .map((row) => row.object);
24
27
 
25
28
  return (
26
29
  <>
27
- {shapes.map((shape) => (
28
- <ShapeActions
29
- key={`${iri}|${shape.actionShape}`}
30
- subjectIri={iri}
31
- shape={shape}
32
- triples={triples}
33
- triplesLoading={triplesLoading}
34
- qualifyLabels={shapes.length > 1}
35
- />
36
- ))}
30
+ <RecordRefresh iri={iri} typeIris={recordTypes} />
31
+ {error && <span className="typography-tiny text-muted-foreground">Actions unavailable</span>}
32
+ {!error &&
33
+ shapes.map((shape) => (
34
+ <ShapeActions
35
+ key={`${iri}|${shape.actionShape}`}
36
+ subjectIri={iri}
37
+ shape={shape}
38
+ triples={triples}
39
+ triplesLoading={triplesLoading}
40
+ qualifyLabels={shapes.length > 1}
41
+ />
42
+ ))}
37
43
  </>
38
44
  );
39
45
  }
@@ -0,0 +1,150 @@
1
+ import { Button } from "#components/button/index";
2
+ import { InstanceLabelsContext } from "#hooks/use-instance-labels";
3
+ import { useMantaClient } from "#providers/MantaClientProvider";
4
+ import {
5
+ GQLRefreshResourceStatus,
6
+ GQLRefreshWorkflowStatus,
7
+ RefreshResourcesDocument,
8
+ RefreshResourcesStatusDocument,
9
+ type GQLRefreshResourceInput,
10
+ type GQLRefreshResourcesMutation,
11
+ type GQLRefreshResourcesMutationVariables,
12
+ type GQLRefreshResourcesStatusQuery,
13
+ type GQLRefreshResourcesStatusQueryVariables,
14
+ useRefreshResourceCapabilitiesQuery,
15
+ } from "@manta-eu/client";
16
+ import { isPresent } from "@manta-eu/lib/present";
17
+ import { sleep } from "@manta-eu/lib/sleep";
18
+ import { useIsMutating, useMutation, useQueryClient } from "@tanstack/react-query";
19
+ import type { GraphQLClient } from "graphql-request";
20
+ import { useContext } from "react";
21
+ import { toast } from "sonner";
22
+ import { match } from "ts-pattern";
23
+
24
+ type RecordRefreshProps = { iri: string; typeIris: string[] };
25
+
26
+ export function RecordRefresh(props: RecordRefreshProps) {
27
+ const { iri, typeIris } = props;
28
+ const { mantaClient } = useMantaClient();
29
+ const { data } = useRefreshResourceCapabilitiesQuery(
30
+ mantaClient,
31
+ { rdfTypes: typeIris },
32
+ { enabled: isPresent(typeIris) },
33
+ );
34
+ const rdfType = data?.refreshResourceCapabilities.capabilities.find((type) => type.supportsRefresh)?.rdfType;
35
+
36
+ return rdfType ? <RefreshButton key={`${iri}|${rdfType}`} iri={iri} rdfType={rdfType} /> : null;
37
+ }
38
+
39
+ type RefreshButtonProps = { iri: string; rdfType: string };
40
+
41
+ type RefreshResult = GQLRefreshResourcesStatusQuery["refreshResourcesStatus"];
42
+
43
+ class RefreshError extends Error {
44
+ constructor(
45
+ readonly phase: "start" | "status" | "timeout",
46
+ cause: unknown,
47
+ ) {
48
+ super("Unable to complete source refresh", { cause });
49
+ }
50
+ }
51
+
52
+ async function refreshResource(client: GraphQLClient, resource: GQLRefreshResourceInput): Promise<RefreshResult> {
53
+ const controller = new AbortController();
54
+ const timeoutMs = 5 * 60 * 1000;
55
+ const deadline = Date.now() + timeoutMs;
56
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
57
+ let phase: "start" | "status" = "start";
58
+
59
+ try {
60
+ const { refreshResources } = await client.request<
61
+ GQLRefreshResourcesMutation,
62
+ GQLRefreshResourcesMutationVariables
63
+ >({
64
+ document: RefreshResourcesDocument,
65
+ variables: { resources: [resource] },
66
+ signal: controller.signal,
67
+ });
68
+ phase = "status";
69
+
70
+ while (true) {
71
+ controller.signal.throwIfAborted();
72
+ const { refreshResourcesStatus } = await client.request<
73
+ GQLRefreshResourcesStatusQuery,
74
+ GQLRefreshResourcesStatusQueryVariables
75
+ >({
76
+ document: RefreshResourcesStatusDocument,
77
+ variables: { workflowId: refreshResources.workflowId },
78
+ signal: controller.signal,
79
+ });
80
+ controller.signal.throwIfAborted();
81
+ if (refreshResourcesStatus.status !== GQLRefreshWorkflowStatus.Running) return refreshResourcesStatus;
82
+
83
+ await sleep(Math.min(2000, Math.max(0, deadline - Date.now())));
84
+ }
85
+ } catch (error) {
86
+ throw new RefreshError(controller.signal.aborted ? "timeout" : phase, error);
87
+ } finally {
88
+ clearTimeout(timer);
89
+ }
90
+ }
91
+
92
+ function RefreshButton(props: RefreshButtonProps) {
93
+ const { iri, rdfType } = props;
94
+ const { mantaClient, datastoreId } = useMantaClient();
95
+ const queryClient = useQueryClient();
96
+ const labels = useContext(InstanceLabelsContext);
97
+ const refreshLabels = labels?.refresh;
98
+ const pendingFilter = { mutationKey: ["RefreshResource", datastoreId, iri], exact: true };
99
+ const refreshing = useIsMutating(pendingFilter) > 0;
100
+ const { mutate } = useMutation<RefreshResult, RefreshError>({
101
+ mutationKey: pendingFilter.mutationKey,
102
+ mutationFn: () => refreshResource(mantaClient, { iri, type: rdfType }),
103
+ retry: false,
104
+ onSuccess: (result) => {
105
+ if (result.status === GQLRefreshWorkflowStatus.Failed) {
106
+ toast.error("Refresh failed", { description: result.error ?? undefined });
107
+ return;
108
+ }
109
+
110
+ const status = result.results?.find(
111
+ (resource) => resource.iri === iri && resource.type === rdfType,
112
+ )?.refreshStatus;
113
+ match(status)
114
+ .with(GQLRefreshResourceStatus.Synced, () => {
115
+ void queryClient.invalidateQueries({ queryKey: ["data-explorer"] });
116
+ refreshLabels?.([iri]);
117
+ toast.success("Refreshed from source");
118
+ })
119
+ .with(GQLRefreshResourceStatus.NotReadable, () => toast.error("This entity does not support refresh"))
120
+ .with(GQLRefreshResourceStatus.NotSynced, () =>
121
+ toast.error("The entity could not be refreshed from its source"),
122
+ )
123
+ .with(undefined, () => toast.error("Refresh returned no result for this entity"))
124
+ .exhaustive();
125
+ },
126
+ onError: (error) => {
127
+ match(error.phase)
128
+ .with("start", () => toast.error("Could not start refresh"))
129
+ .with("status", () =>
130
+ toast.error("Could not check refresh status", { description: "The refresh may still be running." }),
131
+ )
132
+ .with("timeout", () =>
133
+ toast.warning("Refresh is taking longer than expected", {
134
+ description: "It may still finish in the background.",
135
+ }),
136
+ )
137
+ .exhaustive();
138
+ },
139
+ });
140
+
141
+ function startRefresh() {
142
+ if (queryClient.isMutating(pendingFilter) === 0) mutate();
143
+ }
144
+
145
+ return (
146
+ <Button variant="secondary" size="sm" disabled={refreshing} aria-busy={refreshing} onClick={startRefresh}>
147
+ {refreshing ? "Refreshing…" : "Refresh from source"}
148
+ </Button>
149
+ );
150
+ }
@@ -0,0 +1,63 @@
1
+ import { Link } from "react-router";
2
+ import { entityPath } from "../../namespaces";
3
+ import type { IngestRun, UploadedFile } from "../../uploads";
4
+ import { ArrowLinkIcon, arrowLinkClass } from "../ArrowLink";
5
+ import { ModifiedAgo } from "../ModifiedAgo";
6
+ import { EntityName, LinkList } from "../RawTriples";
7
+ import { IngestStateStatus } from "./IngestStateStatus";
8
+ import { TruncateTooltip } from "#components/tooltip/index";
9
+ import { cn } from "#lib/utils";
10
+
11
+ type IngestRunRowProps = { run: IngestRun; file: UploadedFile | undefined };
12
+
13
+ function IngestRunRow(props: IngestRunRowProps) {
14
+ const { run, file } = props;
15
+
16
+ return (
17
+ <div className="flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-center sm:gap-3">
18
+ <div className="flex min-w-0 flex-1 flex-col gap-0.5">
19
+ <Link to={entityPath(run.file)} className="min-w-0 hover:underline">
20
+ {file ? (
21
+ <TruncateTooltip
22
+ text={file.fileName}
23
+ className="typography-small-medium block truncate text-default-foreground"
24
+ />
25
+ ) : (
26
+ <EntityName iri={run.file} />
27
+ )}
28
+ </Link>
29
+
30
+ <div className="typography-tiny flex flex-wrap items-center gap-x-2 text-muted-foreground">
31
+ {run.endedAt && <ModifiedAgo modified={run.endedAt} />}
32
+ <Link to={entityPath(run.iri)} className="hover:underline">
33
+ Run details
34
+ </Link>
35
+ </div>
36
+ </div>
37
+
38
+ <div className="flex items-center gap-3">
39
+ <IngestStateStatus state={{ kind: "run", run }} />
40
+ {run.dataset && (
41
+ <Link to={entityPath(run.dataset)} className={cn("typography-small", arrowLinkClass)}>
42
+ Dataset
43
+ <ArrowLinkIcon />
44
+ </Link>
45
+ )}
46
+ </div>
47
+ </div>
48
+ );
49
+ }
50
+
51
+ type IngestRunsListProps = { runs: readonly IngestRun[]; fileByIri: ReadonlyMap<string, UploadedFile> };
52
+
53
+ export function IngestRunsList(props: IngestRunsListProps) {
54
+ const { runs, fileByIri } = props;
55
+
56
+ return (
57
+ <LinkList>
58
+ {runs.map((run) => (
59
+ <IngestRunRow key={run.iri} run={run} file={fileByIri.get(run.file)} />
60
+ ))}
61
+ </LinkList>
62
+ );
63
+ }
@@ -0,0 +1,45 @@
1
+ import { match } from "ts-pattern";
2
+ import type { FileIngestState, IngestRun } from "../../uploads";
3
+ import { Status, type StatusVariant } from "#components/status/index";
4
+
5
+ type StatusDisplay = { label: string; variant: StatusVariant };
6
+
7
+ const countFormat = new Intl.NumberFormat("en-US");
8
+
9
+ function recordCount(count: number): string {
10
+ return `${countFormat.format(count)} ${count === 1 ? "record" : "records"}`;
11
+ }
12
+
13
+ function ingestedDisplay(run: IngestRun): StatusDisplay {
14
+ const read = run.recordsRead === undefined ? "Ingested" : `Ingested ${recordCount(run.recordsRead)}`;
15
+ const dropped = run.recordsDropped ? `, ${countFormat.format(run.recordsDropped)} dropped` : "";
16
+
17
+ return { label: `${read}${dropped}`, variant: run.recordsDropped ? "warning" : "success" };
18
+ }
19
+
20
+ function runDisplay(run: IngestRun): StatusDisplay {
21
+ return match(run.status)
22
+ .with("ingested", () => ingestedDisplay(run))
23
+ .with("unparsable", (): StatusDisplay => ({ label: "Could not be read", variant: "error" }))
24
+ .with("too_large", (): StatusDisplay => ({ label: "Too large to ingest", variant: "warning" }))
25
+ .with("gone", (): StatusDisplay => ({ label: "Removed before ingest", variant: "neutral" }))
26
+ .exhaustive();
27
+ }
28
+
29
+ export function ingestStateDisplay(state: FileIngestState): StatusDisplay {
30
+ return match(state)
31
+ .with({ kind: "waiting" }, (): StatusDisplay => ({ label: "Waiting for ingest", variant: "neutral" }))
32
+ .with({ kind: "stored" }, (): StatusDisplay => ({ label: "Stored", variant: "neutral" }))
33
+ .with({ kind: "run" }, ({ run }) => runDisplay(run))
34
+ .exhaustive();
35
+ }
36
+
37
+ type IngestStateStatusProps = { state: FileIngestState; className?: string };
38
+
39
+ export function IngestStateStatus(props: IngestStateStatusProps) {
40
+ const { state, className } = props;
41
+
42
+ const { label, variant } = ingestStateDisplay(state);
43
+
44
+ return <Status label={label} variant={variant} className={className} />;
45
+ }
@@ -0,0 +1,93 @@
1
+ import { userIriPrefix } from "@manta-eu/client/shared/stakeholder-iri";
2
+ import { redirectPath } from "@manta-eu/ldo/redirect-queries";
3
+ import { humanBytes } from "@manta-eu/lib/humanize";
4
+ import { isPresent } from "@manta-eu/lib/present";
5
+ import { Download, FileText } from "lucide-react";
6
+ import { Link } from "react-router";
7
+ import { entityPath } from "../../namespaces";
8
+ import type { UploadedFileWithState } from "../../uploads";
9
+ import { ModifiedAgo } from "../ModifiedAgo";
10
+ import { EntityName, LinkList } from "../RawTriples";
11
+ import { IngestStateStatus } from "./IngestStateStatus";
12
+ import { Button } from "#components/button/index";
13
+ import { TruncateTooltip } from "#components/tooltip/index";
14
+ import { useRedirectEndpoint } from "#ldo-ui";
15
+
16
+ type UploaderProps = { iri: string | undefined; currentUserIri: string | undefined };
17
+
18
+ function Uploader(props: UploaderProps) {
19
+ const { iri, currentUserIri } = props;
20
+
21
+ if (!iri) return null;
22
+
23
+ if (iri === currentUserIri) return <span>by you</span>;
24
+
25
+ if (iri.startsWith(userIriPrefix)) return <span>by a teammate</span>;
26
+
27
+ return (
28
+ <span className="flex min-w-0 items-center gap-1">
29
+ by <EntityName iri={iri} />
30
+ </span>
31
+ );
32
+ }
33
+
34
+ type UploadedFileRowProps = { file: UploadedFileWithState; currentUserIri: string | undefined };
35
+
36
+ function UploadedFileRow(props: UploadedFileRowProps) {
37
+ const { file, currentUserIri } = props;
38
+
39
+ const redirectEndpoint = useRedirectEndpoint();
40
+
41
+ return (
42
+ <div className="flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-center sm:gap-3">
43
+ <div className="flex min-w-0 flex-1 items-center gap-3">
44
+ <FileText className="size-4 shrink-0 text-muted-foreground" />
45
+
46
+ <div className="flex min-w-0 flex-1 flex-col gap-0.5">
47
+ <Link to={entityPath(file.iri)} className="min-w-0 hover:underline">
48
+ <TruncateTooltip
49
+ text={file.fileName}
50
+ className="typography-small-medium block truncate text-default-foreground"
51
+ />
52
+ </Link>
53
+
54
+ <div className="typography-tiny flex min-w-0 flex-wrap items-center gap-x-2 text-muted-foreground">
55
+ {file.byteSize !== undefined && <span>{humanBytes(file.byteSize)}</span>}
56
+ {isPresent(file.extension) && <span title={file.mediaType}>{file.extension.toUpperCase()}</span>}
57
+ {file.uploadedAt && <ModifiedAgo modified={file.uploadedAt} />}
58
+ <Uploader iri={file.uploader} currentUserIri={currentUserIri} />
59
+ </div>
60
+ </div>
61
+ </div>
62
+
63
+ <div className="flex items-center justify-between gap-3 pl-7 sm:pl-0">
64
+ <IngestStateStatus state={file.state} />
65
+
66
+ <Button asChild variant="ghost" size="xs" className="size-7 shrink-0 p-0">
67
+ <a
68
+ href={redirectPath(file.iri, redirectEndpoint)}
69
+ target="_blank"
70
+ rel="noreferrer"
71
+ aria-label={`Download ${file.fileName}`}
72
+ >
73
+ <Download className="size-4" />
74
+ </a>
75
+ </Button>
76
+ </div>
77
+ </div>
78
+ );
79
+ }
80
+
81
+ type UploadedFilesListProps = { files: readonly UploadedFileWithState[]; currentUserIri?: string };
82
+
83
+ export function UploadedFilesList(props: UploadedFilesListProps) {
84
+ const { files, currentUserIri } = props;
85
+
86
+ return (
87
+ <LinkList>
88
+ {files.map((file) => (
89
+ <UploadedFileRow key={file.iri} file={file} currentUserIri={currentUserIri} />
90
+ ))}
91
+ </LinkList>
92
+ );
93
+ }
@@ -0,0 +1,80 @@
1
+ import { getUserIri } from "@manta-eu/client/shared/stakeholder-iri";
2
+ import { isPresent } from "@manta-eu/lib/present";
3
+ import { explorerCrumb } from "../../namespaces";
4
+ import { uploadsLimit, useUploads } from "../../uploads";
5
+ import { Breadcrumbs } from "../Breadcrumbs";
6
+ import { DetailHeader } from "../DetailHeader";
7
+ import { LoadingRows, StatusText } from "../RawTriples";
8
+ import { IngestRunsList } from "./IngestRunsList";
9
+ import { UploadedFilesList } from "./UploadedFilesList";
10
+ import { useAuthContext } from "#providers/AuthContext";
11
+
12
+ export type UploadedFilesSectionProps = { emptyText?: string };
13
+
14
+ export function UploadedFilesSection(props: UploadedFilesSectionProps) {
15
+ const { emptyText = "No files uploaded yet." } = props;
16
+
17
+ const { isOperator, user } = useAuthContext();
18
+ const { files, isLoading, error } = useUploads({ includeAllFiles: isOperator });
19
+
20
+ if (isLoading) return <LoadingRows />;
21
+
22
+ if (error) return <StatusText role="alert">Failed to load files.</StatusText>;
23
+
24
+ if (!isPresent(files)) return <StatusText>{emptyText}</StatusText>;
25
+
26
+ return (
27
+ <div className="flex flex-col gap-2">
28
+ <UploadedFilesList files={files} currentUserIri={getUserIri(user.id)} />
29
+ {files.length >= uploadsLimit && (
30
+ <p className="typography-caption text-muted-foreground">Showing the newest {uploadsLimit} files.</p>
31
+ )}
32
+ </div>
33
+ );
34
+ }
35
+
36
+ export function UploadedFilesPage() {
37
+ const { isOperator } = useAuthContext();
38
+
39
+ return (
40
+ <div className="flex max-w-5xl flex-col gap-6">
41
+ <Breadcrumbs trail={[explorerCrumb, { label: "Files" }]} />
42
+
43
+ <DetailHeader title="Files" />
44
+
45
+ <p className="typography-small -mt-3 max-w-prose text-muted-foreground">
46
+ {isOperator
47
+ ? "Every file in this datastore, newest first, with how its ingest into the knowledge graph ended."
48
+ : "Files uploaded to this datastore, newest first, with how their ingest into the knowledge graph ended."}{" "}
49
+ CSV, Parquet, Turtle and N-Triples files are ingested automatically; other files are stored.
50
+ </p>
51
+
52
+ <UploadedFilesSection />
53
+ </div>
54
+ );
55
+ }
56
+
57
+ export function IngestRunsPage() {
58
+ const { isOperator } = useAuthContext();
59
+ const { runs, fileByIri, isLoading, error } = useUploads({ includeAllFiles: isOperator });
60
+
61
+ return (
62
+ <div className="flex max-w-5xl flex-col gap-6">
63
+ <Breadcrumbs trail={[explorerCrumb, { label: "Ingest runs" }]} />
64
+
65
+ <DetailHeader title="Ingest runs" />
66
+
67
+ <p className="typography-small -mt-3 max-w-prose text-muted-foreground">
68
+ Each attempt to add an uploaded file to the knowledge graph, newest first.
69
+ </p>
70
+
71
+ {isLoading && <LoadingRows />}
72
+
73
+ {error && <StatusText role="alert">Failed to load ingest runs.</StatusText>}
74
+
75
+ {!isLoading && !error && !isPresent(runs) && <StatusText>No file has been ingested yet.</StatusText>}
76
+
77
+ {isPresent(runs) && <IngestRunsList runs={runs} fileByIri={fileByIri} />}
78
+ </div>
79
+ );
80
+ }
@@ -9,6 +9,12 @@ export { DataExplorerLayout } from "./components/DataExplorerLayout";
9
9
  export { ExplorerEmptyState as DataExplorerIndexRoute } from "./components/ExplorerEmptyState";
10
10
  export { CoverageOverview as DataExplorerCoverageRoute } from "./components/ontology-coverage";
11
11
  export { RecentTypes as DataExplorerRecentRoute } from "./components/RecentTypes";
12
+ export {
13
+ IngestRunsPage as DataExplorerIngestRoute,
14
+ UploadedFilesPage as DataExplorerFilesRoute,
15
+ UploadedFilesSection,
16
+ type UploadedFilesSectionProps,
17
+ } from "./components/uploads/UploadsPages";
12
18
 
13
19
  export function DataExplorerPrefixRoute() {
14
20
  const { prefix } = useParams<{ prefix: string }>();
@@ -96,8 +96,12 @@ export function localName(iri: string, prefix: string): string {
96
96
  export { entityPath, entitySegment, explorerPath };
97
97
  export const recentSegment = "recent";
98
98
  export const coverageSegment = "coverage";
99
+ export const filesSegment = "files";
100
+ export const ingestRunsSegment = "ingest-runs";
99
101
  export const recentPath = `${explorerPath}/${recentSegment}`;
100
102
  export const coveragePath = `${explorerPath}/${coverageSegment}`;
103
+ export const filesPath = `${explorerPath}/${filesSegment}`;
104
+ export const ingestRunsPath = `${explorerPath}/${ingestRunsSegment}`;
101
105
  export const explorerCrumb = { label: "Data", to: explorerPath };
102
106
 
103
107
  export function isExplorerPrefix(value: string | undefined): value is string {
@@ -105,7 +109,9 @@ export function isExplorerPrefix(value: string | undefined): value is string {
105
109
  }
106
110
 
107
111
  export function isNamespaceSegment(segment: string | undefined): segment is string {
108
- return isPresent(segment) && ![recentSegment, coverageSegment, entitySegment].includes(segment);
112
+ const reserved = [recentSegment, coverageSegment, filesSegment, ingestRunsSegment, entitySegment];
113
+
114
+ return isPresent(segment) && !reserved.includes(segment);
109
115
  }
110
116
 
111
117
  export function namespacePath(key: string): string {