@manta-eu/react 0.1.4 → 0.1.6

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 (234) hide show
  1. package/README.md +4 -8
  2. package/dist/components/audience-phase-badge/index.d.ts +1 -1
  3. package/dist/components/audience-phase-badge/index.d.ts.map +1 -1
  4. package/dist/components/audience-phase-badge/index.js +3 -0
  5. package/dist/components/authenticated-chat/index.d.ts.map +1 -1
  6. package/dist/components/authenticated-chat/index.js +0 -5
  7. package/dist/components/chat/chat-input/index.d.ts +1 -1
  8. package/dist/components/chat/chat-input/index.d.ts.map +1 -1
  9. package/dist/components/chat/chat-input/index.js +4 -5
  10. package/dist/components/chat-view/Chat.d.ts +6 -0
  11. package/dist/components/chat-view/Chat.d.ts.map +1 -1
  12. package/dist/components/chat-view/Chat.js +18 -8
  13. package/dist/components/chat-view/ChatHeaders.d.ts.map +1 -1
  14. package/dist/components/chat-view/ChatHeaders.js +3 -2
  15. package/dist/components/embedded-chat/EmbeddedDatastorePicker.d.ts +1 -0
  16. package/dist/components/embedded-chat/EmbeddedDatastorePicker.d.ts.map +1 -1
  17. package/dist/components/embedded-chat/EmbeddedDatastorePicker.js +9 -3
  18. package/dist/components/embedded-chat/index.d.ts.map +1 -1
  19. package/dist/components/embedded-chat/index.js +1 -8
  20. package/dist/components/layouts/Sidebar.d.ts.map +1 -1
  21. package/dist/components/layouts/Sidebar.js +25 -5
  22. package/dist/components/planning/ActioningView.d.ts.map +1 -1
  23. package/dist/components/planning/ActioningView.js +11 -6
  24. package/dist/components/planning/ExecutionSectionItem.d.ts +2 -3
  25. package/dist/components/planning/ExecutionSectionItem.d.ts.map +1 -1
  26. package/dist/components/planning/ExecutionSectionItem.js +3 -6
  27. package/dist/components/planning/ExecutionSections.d.ts +2 -3
  28. package/dist/components/planning/ExecutionSections.d.ts.map +1 -1
  29. package/dist/components/planning/ExecutionSections.js +2 -2
  30. package/dist/components/planning/ManualActionCard.d.ts +3 -4
  31. package/dist/components/planning/ManualActionCard.d.ts.map +1 -1
  32. package/dist/components/planning/ManualActionCard.js +24 -6
  33. package/dist/components/rdf-insights/CampaignChannelMix.js +1 -1
  34. package/dist/components/rdf-insights/CampaignGrid.d.ts.map +1 -1
  35. package/dist/components/rdf-insights/CampaignGrid.js +2 -2
  36. package/dist/components/rdf-insights/DailyPerformance.js +2 -2
  37. package/dist/components/rdf-insights/KpiDashboard.d.ts +2 -2
  38. package/dist/components/rdf-insights/KpiDashboard.d.ts.map +1 -1
  39. package/dist/components/rdf-insights/KpiDashboard.js +33 -53
  40. package/dist/components/rdf-insights/MetaDailyInsights.js +2 -2
  41. package/dist/components/rdf-insights/ProductCard.d.ts.map +1 -1
  42. package/dist/components/rdf-insights/ProductCard.js +1 -1
  43. package/dist/components/rdf-insights/ProductVariantsTable.js +1 -1
  44. package/dist/components/rdf-insights/useExtractedInsights.d.ts +1 -1
  45. package/dist/components/rdf-insights/useExtractedInsights.js +3 -3
  46. package/dist/components/sidebar/nav-menu.d.ts +2 -0
  47. package/dist/components/sidebar/nav-menu.d.ts.map +1 -1
  48. package/dist/components/sidebar/nav-menu.js +11 -6
  49. package/dist/components/table/index.d.ts +26 -0
  50. package/dist/components/table/index.d.ts.map +1 -1
  51. package/dist/components/table/index.js +31 -1
  52. package/dist/datastore-picker/datastore-picker-rows.d.ts +1 -0
  53. package/dist/datastore-picker/datastore-picker-rows.d.ts.map +1 -1
  54. package/dist/datastore-picker/datastore-picker-rows.js +6 -2
  55. package/dist/explain-fact/DatalogCode.d.ts.map +1 -1
  56. package/dist/explain-fact/DatalogCode.js +7 -2
  57. package/dist/explain-fact/FactValue.js +3 -3
  58. package/dist/explain-fact/proof-tree/ProofTreeFormulaFooter.d.ts.map +1 -1
  59. package/dist/explain-fact/proof-tree/ProofTreeFormulaFooter.js +2 -1
  60. package/dist/globals.css +10 -102
  61. package/dist/graph/createNodeRouter.d.ts.map +1 -1
  62. package/dist/graph/createNodeRouter.js +3 -0
  63. package/dist/graph/nodes/BrandFacetRuleView.d.ts.map +1 -1
  64. package/dist/graph/nodes/BrandFacetRuleView.js +6 -4
  65. package/dist/graph/nodes/BrandFontFamilyView.d.ts +3 -0
  66. package/dist/graph/nodes/BrandFontFamilyView.d.ts.map +1 -0
  67. package/dist/graph/nodes/BrandFontFamilyView.js +56 -0
  68. package/dist/graph/nodes/BrandFontUploadButton.d.ts +6 -0
  69. package/dist/graph/nodes/BrandFontUploadButton.d.ts.map +1 -0
  70. package/dist/graph/nodes/BrandFontUploadButton.js +65 -0
  71. package/dist/graph/nodes/BrandGuidelinesView.d.ts.map +1 -1
  72. package/dist/graph/nodes/BrandGuidelinesView.js +2 -6
  73. package/dist/graph/nodes/GoogleCampaignView.js +2 -2
  74. package/dist/graph/nodes/brand-font.d.ts +12 -0
  75. package/dist/graph/nodes/brand-font.d.ts.map +1 -0
  76. package/dist/graph/nodes/brand-font.js +12 -0
  77. package/dist/graph/nodes/brand-shared.d.ts +3 -2
  78. package/dist/graph/nodes/brand-shared.d.ts.map +1 -1
  79. package/dist/graph/nodes/brand-shared.js +3 -2
  80. package/dist/hooks/use-action-plans-list.js +1 -1
  81. package/dist/hooks/use-connection-problems.d.ts +15 -0
  82. package/dist/hooks/use-connection-problems.d.ts.map +1 -0
  83. package/dist/hooks/use-connection-problems.js +9 -0
  84. package/dist/hooks/use-font-face.d.ts +3 -0
  85. package/dist/hooks/use-font-face.d.ts.map +1 -0
  86. package/dist/hooks/use-font-face.js +33 -0
  87. package/dist/hooks/use-graph-refresh-after-turn.d.ts +2 -0
  88. package/dist/hooks/use-graph-refresh-after-turn.d.ts.map +1 -0
  89. package/dist/hooks/use-graph-refresh-after-turn.js +12 -0
  90. package/dist/hooks/use-manual-actions.d.ts +11 -1
  91. package/dist/hooks/use-manual-actions.d.ts.map +1 -1
  92. package/dist/hooks/use-manual-actions.js +47 -100
  93. package/dist/hooks/useAuth.d.ts +6 -1
  94. package/dist/hooks/useAuth.d.ts.map +1 -1
  95. package/dist/hooks/useAuth.js +36 -9
  96. package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
  97. package/dist/ldo-ui.d.ts +1 -1
  98. package/dist/ldo-ui.d.ts.map +1 -1
  99. package/dist/lib/activity-changeset.d.ts.map +1 -1
  100. package/dist/lib/activity-changeset.js +6 -3
  101. package/dist/lib/datastore-route-table.d.ts +1 -0
  102. package/dist/lib/datastore-route-table.d.ts.map +1 -1
  103. package/dist/lib/datastore-route-table.js +2 -0
  104. package/dist/lib/manual-actions.js +1 -1
  105. package/dist/lib/rdf/index.d.ts +4 -2
  106. package/dist/lib/rdf/index.d.ts.map +1 -1
  107. package/dist/lib/rdf/index.js +48 -18
  108. package/dist/lib/rdf/insights.d.ts +6 -1
  109. package/dist/lib/rdf/insights.d.ts.map +1 -1
  110. package/dist/lib/rdf/insights.js +15 -3
  111. package/dist/lib/rdf/types.d.ts +21 -8
  112. package/dist/lib/rdf/types.d.ts.map +1 -1
  113. package/dist/lib/tool-icons.d.ts.map +1 -1
  114. package/dist/lib/tool-icons.js +1 -5
  115. package/dist/providers/ActiveChatProvider.d.ts.map +1 -1
  116. package/dist/providers/ActiveChatProvider.js +2 -0
  117. package/dist/providers/AuthContext.d.ts +1 -1
  118. package/dist/providers/AuthContext.d.ts.map +1 -1
  119. package/dist/providers/KnowledgeGraphStateContext.d.ts +0 -1
  120. package/dist/providers/KnowledgeGraphStateContext.d.ts.map +1 -1
  121. package/dist/providers/KnowledgeGraphStateProvider.d.ts.map +1 -1
  122. package/dist/providers/KnowledgeGraphStateProvider.js +8 -19
  123. package/dist/providers/index.d.ts +4 -1
  124. package/dist/providers/index.d.ts.map +1 -1
  125. package/dist/providers/index.js +2 -1
  126. package/dist/routes/activity/change-display.js +1 -1
  127. package/dist/routes/data-explorer/components/record-detail/ActionFormDialog.d.ts.map +1 -1
  128. package/dist/routes/data-explorer/components/record-detail/ActionFormDialog.js +23 -9
  129. package/dist/routes/data-explorer/components/record-detail/action-properties.d.ts +2 -4
  130. package/dist/routes/data-explorer/components/record-detail/action-properties.d.ts.map +1 -1
  131. package/dist/routes/data-explorer/components/record-detail/action-properties.js +8 -50
  132. package/dist/routes/datastores/components/DatastoreFormDialog.d.ts +4 -2
  133. package/dist/routes/datastores/components/DatastoreFormDialog.d.ts.map +1 -1
  134. package/dist/routes/datastores/components/DatastoreFormDialog.js +7 -4
  135. package/dist/routes/datastores/components/DatastoresToolbar.d.ts +3 -1
  136. package/dist/routes/datastores/components/DatastoresToolbar.d.ts.map +1 -1
  137. package/dist/routes/datastores/components/DatastoresToolbar.js +18 -5
  138. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts.map +1 -1
  139. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js +6 -2
  140. package/dist/routes/datastores/components/ProvisionDatastoreDialog.d.ts +7 -0
  141. package/dist/routes/datastores/components/ProvisionDatastoreDialog.d.ts.map +1 -0
  142. package/dist/routes/datastores/components/ProvisionDatastoreDialog.js +10 -0
  143. package/dist/routes/datastores/flatten.d.ts +4 -0
  144. package/dist/routes/datastores/flatten.d.ts.map +1 -1
  145. package/dist/routes/datastores/flatten.js +11 -0
  146. package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +4 -1
  147. package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -1
  148. package/dist/routes/datastores/hooks/useDatastoreColumns.js +6 -2
  149. package/dist/routes/datastores/hooks/useTenantOrganizationCheck.d.ts +3 -0
  150. package/dist/routes/datastores/hooks/useTenantOrganizationCheck.d.ts.map +1 -0
  151. package/dist/routes/datastores/hooks/useTenantOrganizationCheck.js +21 -0
  152. package/dist/routes/datastores/index.d.ts.map +1 -1
  153. package/dist/routes/datastores/index.js +44 -6
  154. package/dist/routes/datastores/link-provider.d.ts +11 -0
  155. package/dist/routes/datastores/link-provider.d.ts.map +1 -0
  156. package/dist/routes/datastores/link-provider.js +34 -0
  157. package/dist/routes/integrations/components/connect-forms/types.d.ts +1 -0
  158. package/dist/routes/integrations/components/connect-forms/types.d.ts.map +1 -1
  159. package/dist/routes/integrations/connection-view.d.ts +4 -1
  160. package/dist/routes/integrations/connection-view.d.ts.map +1 -1
  161. package/dist/routes/integrations/connection-view.js +39 -6
  162. package/dist/routes/integrations/types.d.ts +3 -0
  163. package/dist/routes/integrations/types.d.ts.map +1 -1
  164. package/dist/routes/memories/components/ChangeScopeDialog.d.ts +1 -1
  165. package/dist/routes/memories/components/ChangeScopeDialog.d.ts.map +1 -1
  166. package/dist/routes/memories/components/ChangeScopeDialog.js +3 -3
  167. package/dist/routes/memories/components/EmptyStates.d.ts +1 -2
  168. package/dist/routes/memories/components/EmptyStates.d.ts.map +1 -1
  169. package/dist/routes/memories/components/EmptyStates.js +2 -2
  170. package/dist/routes/memories/components/MemoriesPanel.d.ts +1 -1
  171. package/dist/routes/memories/components/MemoriesPanel.d.ts.map +1 -1
  172. package/dist/routes/memories/components/MemoriesPanel.js +9 -9
  173. package/dist/routes/memories/components/MemoryActions.d.ts +1 -1
  174. package/dist/routes/memories/components/MemoryActions.d.ts.map +1 -1
  175. package/dist/routes/memories/components/MemoryActions.js +4 -4
  176. package/dist/routes/memories/components/MemoryFields.d.ts +1 -1
  177. package/dist/routes/memories/components/MemoryFields.d.ts.map +1 -1
  178. package/dist/routes/memories/components/MemoryFields.js +2 -2
  179. package/dist/routes/memories/components/MemoryFormDialog.d.ts +1 -1
  180. package/dist/routes/memories/components/MemoryFormDialog.d.ts.map +1 -1
  181. package/dist/routes/memories/components/MemoryFormDialog.js +2 -2
  182. package/dist/routes/memories/components/TeamPicker.d.ts +1 -1
  183. package/dist/routes/memories/components/TeamPicker.d.ts.map +1 -1
  184. package/dist/routes/memories/components/TeamPicker.js +2 -2
  185. package/dist/routes/memories/hooks/useMemoryColumns.d.ts +1 -1
  186. package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -1
  187. package/dist/routes/memories/hooks/useMemoryColumns.js +3 -3
  188. package/dist/routes/memories/index.d.ts.map +1 -1
  189. package/dist/routes/memories/index.js +21 -21
  190. package/dist/shacl/shacl-form-types.d.ts +2 -3
  191. package/dist/shacl/shacl-form-types.d.ts.map +1 -1
  192. package/dist/shared/graph-derived-queries.d.ts +5 -0
  193. package/dist/shared/graph-derived-queries.d.ts.map +1 -0
  194. package/dist/shared/graph-derived-queries.js +28 -0
  195. package/package.json +8 -10
  196. package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
  197. package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
  198. package/dist/components/ai-elements/chain-of-thought.js +0 -57
  199. package/dist/components/context-menu.d.ts +0 -29
  200. package/dist/components/context-menu.d.ts.map +0 -1
  201. package/dist/components/context-menu.js +0 -67
  202. package/dist/components/hover-card.d.ts +0 -6
  203. package/dist/components/hover-card.d.ts.map +0 -1
  204. package/dist/components/hover-card.js +0 -15
  205. package/dist/components/layouts/ChatHistoryItem.d.ts +0 -9
  206. package/dist/components/layouts/ChatHistoryItem.d.ts.map +0 -1
  207. package/dist/components/layouts/ChatHistoryItem.js +0 -7
  208. package/dist/components/layouts/SectionHeader.d.ts +0 -8
  209. package/dist/components/layouts/SectionHeader.d.ts.map +0 -1
  210. package/dist/components/layouts/SectionHeader.js +0 -6
  211. package/dist/components/orbit-site/Block.d.ts +0 -8
  212. package/dist/components/orbit-site/Block.d.ts.map +0 -1
  213. package/dist/components/orbit-site/Block.js +0 -7
  214. package/dist/components/orbit-site/Inset.d.ts +0 -7
  215. package/dist/components/orbit-site/Inset.d.ts.map +0 -1
  216. package/dist/components/orbit-site/Inset.js +0 -6
  217. package/dist/components/orbit-site/Section.d.ts +0 -7
  218. package/dist/components/orbit-site/Section.d.ts.map +0 -1
  219. package/dist/components/orbit-site/Section.js +0 -6
  220. package/dist/components/orbit-site/ThemeSelector.d.ts +0 -3
  221. package/dist/components/orbit-site/ThemeSelector.d.ts.map +0 -1
  222. package/dist/components/orbit-site/ThemeSelector.js +0 -42
  223. package/dist/components/planning/SampleChanges.d.ts +0 -9
  224. package/dist/components/planning/SampleChanges.d.ts.map +0 -1
  225. package/dist/components/planning/SampleChanges.js +0 -117
  226. package/dist/components/tool-invocation-card/index.d.ts +0 -8
  227. package/dist/components/tool-invocation-card/index.d.ts.map +0 -1
  228. package/dist/components/tool-invocation-card/index.js +0 -7
  229. package/dist/lib/schema-fields.d.ts +0 -2
  230. package/dist/lib/schema-fields.d.ts.map +0 -1
  231. package/dist/lib/schema-fields.js +0 -3
  232. package/dist/routes/memories/components/ConflictTimeoutFooter.d.ts +0 -7
  233. package/dist/routes/memories/components/ConflictTimeoutFooter.d.ts.map +0 -1
  234. package/dist/routes/memories/components/ConflictTimeoutFooter.js +0 -6
@@ -1,13 +1,14 @@
1
1
  import { isQueryableTermIri } from "@manta-eu/datalog-parser";
2
2
  import { isPresent } from "@manta-eu/lib/present";
3
- import { rdf, wellKnownPredicates } from "@manta-eu/rdf-lib/namespaces";
3
+ import { igraphNodeIri, rdf, wellKnownPredicates } from "@manta-eu/rdf-lib/namespaces";
4
4
  import { formatDisplayValue } from "../graph/property-formatters.js";
5
5
  import { DefaultMap } from "./default-map.js";
6
6
  import { extractLabel, extractTypeName, formatPropertyLabel } from "./iri-labels.js";
7
7
  import { bindingNodeIri, bindingValue } from "./rdf-helpers.js";
8
8
  const rdfTypeIri = rdf.type;
9
+ const hiddenArtifactPredicates = new Set([igraphNodeIri]);
9
10
  // `:actionShape` links a planned subject to its request shape — structural noise in a diff.
10
- const hiddenDiffPredicates = new Set([wellKnownPredicates.actionShape]);
11
+ const hiddenDiffPredicates = new Set([wellKnownPredicates.actionShape, ...hiddenArtifactPredicates]);
11
12
  function isIriLike(value) {
12
13
  return value.startsWith("http://") || value.startsWith("https://") || value.startsWith("urn:");
13
14
  }
@@ -46,7 +47,9 @@ function joinValues(values, labels, predicate, field, valueScale) {
46
47
  }
47
48
  // `:actionShape` is kept though the diff table hides it — it routes a planned action to its own card.
48
49
  function buildChangeTriples(predicateEntries) {
49
- return predicateEntries.flatMap(([predicate, values]) => values.additions.map((value) => ({ predicate, object: value, objectIsIri: isIriLike(value) })));
50
+ return predicateEntries
51
+ .filter(([predicate]) => !hiddenArtifactPredicates.has(predicate))
52
+ .flatMap(([predicate, values]) => values.additions.map((value) => ({ predicate, object: value, objectIsIri: isIriLike(value) })));
50
53
  }
51
54
  function buildTypeReplacementDiff(typeEntry) {
52
55
  if (!typeEntry || typeEntry.additions.length === 0 || typeEntry.removals.length === 0)
@@ -11,6 +11,7 @@ export type RouteElements = {
11
11
  Activity?: ReactNode;
12
12
  ActivityDetail?: ReactNode;
13
13
  Integrations?: ReactNode;
14
+ ShopifyConnect?: ReactNode;
14
15
  Team?: ReactNode;
15
16
  DataExplorerLayout?: ReactNode;
16
17
  DataExplorerIndex?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"datastore-route-table.d.ts","sourceRoot":"","sources":["../../src/lib/datastore-route-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,aAEtD;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,CAAC;IAC/C,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,eAAO,MAAM,YAAY,EAAE,eAAe,EAEzC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EA4B5C,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAEvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAA+B,CAAC"}
1
+ {"version":3,"file":"datastore-route-table.d.ts","sourceRoot":"","sources":["../../src/lib/datastore-route-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,aAEtD;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,CAAC;IAC/C,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,eAAO,MAAM,YAAY,EAAE,eAAe,EAIzC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,EA4B5C,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAEvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAA+B,CAAC"}
@@ -4,6 +4,8 @@ export function notFoundElement(elements) {
4
4
  export const notFoundRoutePath = "*";
5
5
  export const globalRoutes = [
6
6
  { path: "/datastores", render: (e) => e.Datastores || notFoundElement(e) },
7
+ // Global, not datastore-scoped: Shopify sends the merchant here before any datastore is known.
8
+ { path: "/shopify/connect", render: (e) => e.ShopifyConnect || notFoundElement(e) },
7
9
  ];
8
10
  export const datastoreRoutes = [
9
11
  { path: "/", render: (e) => e.Chat },
@@ -2,7 +2,7 @@ export function isPendingManualAction(action) {
2
2
  return action.status === "PENDING" || action.status === null;
3
3
  }
4
4
  export function isResolvedManualAction(action) {
5
- return action.status === "COMPLETED" || action.status === "REJECTED";
5
+ return action.status === "COMPLETED" || action.status === "REJECTED" || action.status === "RETRY";
6
6
  }
7
7
  export function getPendingManualActions(actions) {
8
8
  return (actions ?? []).filter(isPendingManualAction);
@@ -1,10 +1,12 @@
1
1
  import type { JsonLdGraphDocument, JsonLdNode } from "@manta-eu/client/types/jsonld";
2
- import type { CampaignChannelMixData, CampaignGridData, CampaignPerformanceSummaryData, CompanyKpis, DailyPerformanceData, MetaDailyInsightsData, Product, ProductProfitabilityData, ProductSalesRankingData, ProductVariant, ProductVariantsData, RoasBenchmarkData } from "./types.js";
2
+ import type { CampaignChannelMixData, CampaignGridData, CampaignPerformanceSummaryData, DailyPerformanceData, KpiSnapshot, MetaDailyInsightsData, Product, ProductProfitabilityData, ProductSalesRankingData, ProductVariant, ProductVariantsData, RoasBenchmarkData } from "./types.js";
3
3
  export * from "@manta-eu/client/shared/rdf-namespaces";
4
4
  export declare function getString(node: JsonLdNode, predicate: string): string | null;
5
+ export declare function readCurrency(node: JsonLdNode | undefined): string | null;
6
+ export declare function sharedCurrency(currencies: Array<string | null>): string | null;
5
7
  export declare function extractProduct(jsonLd: JsonLdGraphDocument): Product | null;
6
8
  export declare function extractProductVariant(jsonLd: JsonLdGraphDocument, productUri: string): ProductVariant | null;
7
- export declare function extractCompanyKpis(jsonLd: JsonLdGraphDocument): CompanyKpis | null;
9
+ export declare function extractKpiSnapshots(jsonLd: JsonLdGraphDocument): KpiSnapshot[] | null;
8
10
  export declare function extractDailyPerformance(jsonLd: JsonLdGraphDocument): DailyPerformanceData | null;
9
11
  export declare function extractProductProfitability(jsonLd: JsonLdGraphDocument): ProductProfitabilityData | null;
10
12
  export declare function extractCampaignPerformanceSummary(jsonLd: JsonLdGraphDocument): CampaignPerformanceSummaryData | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/rdf/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIrF,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,8BAA8B,EAC9B,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,EACP,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,cAAc,wCAAwC,CAAC;AAEvD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5E;AAsDD,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,GAAG,IAAI,CA+B1E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAoB5G;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI,CAiBlF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,GAAG,IAAI,CA8BhG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,wBAAwB,GAAG,IAAI,CAuCxG;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,mBAAmB,GAAG,8BAA8B,GAAG,IAAI,CAqCpH;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,GAAG,uBAAuB,GAAG,IAAI,CAsDtG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CA6B1F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,GAAG,IAAI,CA0ClG;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,sBAAsB,GAAG,IAAI,CAkCpG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,IAAI,CAgD9F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,IAAI,CAwCxF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/rdf/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAIrF,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACpB,WAAW,EAEX,qBAAqB,EACrB,OAAO,EACP,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,cAAc,wCAAwC,CAAC;AAEvD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5E;AAsDD,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAExE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAG9E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,GAAG,IAAI,CA+B1E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAqB5G;AAaD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,WAAW,EAAE,GAAG,IAAI,CAsBrF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,GAAG,IAAI,CA+BhG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,wBAAwB,GAAG,IAAI,CAuCxG;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,mBAAmB,GAAG,8BAA8B,GAAG,IAAI,CAqCpH;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,GAAG,uBAAuB,GAAG,IAAI,CAsDtG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CA6B1F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,GAAG,IAAI,CA4ClG;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,sBAAsB,GAAG,IAAI,CAuCpG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,IAAI,CAiD9F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,IAAI,CAyCxF"}
@@ -51,6 +51,13 @@ function getCampaignName(campaignNode) {
51
51
  return null;
52
52
  return (getString(campaignNode, "schema:name") || getString(campaignNode, "rdfs:label") || getString(campaignNode, ":name"));
53
53
  }
54
+ export function readCurrency(node) {
55
+ return node ? getString(node, "schema:currency") : null;
56
+ }
57
+ export function sharedCurrency(currencies) {
58
+ const distinct = new Set(currencies);
59
+ return distinct.size === 1 ? (currencies[0] ?? null) : null;
60
+ }
54
61
  export function extractProduct(jsonLd) {
55
62
  const nodes = jsonLd["@graph"];
56
63
  const productNodes = findNodesByType(nodes, ":Product");
@@ -87,6 +94,7 @@ export function extractProductVariant(jsonLd, productUri) {
87
94
  continue;
88
95
  return {
89
96
  uri,
97
+ currency: readCurrency(variantNode),
90
98
  price: getNumber(variantNode, ":price"),
91
99
  cost: getNumber(variantNode, ":cost"),
92
100
  title: getVariantName(variantNode),
@@ -95,22 +103,38 @@ export function extractProductVariant(jsonLd, productUri) {
95
103
  }
96
104
  return null;
97
105
  }
98
- export function extractCompanyKpis(jsonLd) {
99
- const nodes = jsonLd["@graph"];
100
- const kpiNodes = findNodesByType(nodes, ":CompanyKPISnapshot");
101
- const kpiNode = kpiNodes[0];
102
- if (!kpiNode)
103
- return null;
106
+ function kpiValues(node) {
104
107
  return {
105
- mer30d: getNumber(kpiNode, ":mer30d"),
106
- blendedRoas30d: getNumber(kpiNode, ":blendedRoas30d"),
107
- blendedCac30dUsd: getNumber(kpiNode, ":blendedCac30dUsd"),
108
- last30dSpendUsd: getNumber(kpiNode, ":last30dSpendUsd"),
109
- last30dRevenueUsd: getNumber(kpiNode, ":last30dRevenueUsd"),
110
- avgAov30d: getNumber(kpiNode, ":avgAov30d"),
111
- grossMargin30d: getNumber(kpiNode, ":grossMargin30d"),
108
+ spend: getNumber(node, ":totalSpend"),
109
+ revenue: getNumber(node, ":totalRevenue"),
110
+ purchases: getNumber(node, ":totalPurchases"),
111
+ roas: getNumber(node, ":roas"),
112
+ cpa: getNumber(node, ":cpa"),
113
+ aov: getNumber(node, ":aov"),
112
114
  };
113
115
  }
116
+ export function extractKpiSnapshots(jsonLd) {
117
+ const nodes = findNodesByType(jsonLd["@graph"], ":KPISnapshot");
118
+ const inWindow = (window) => nodes.filter((node) => getString(node, ":window") === window);
119
+ const previous = inWindow("prev-30d");
120
+ const snapshots = inWindow("last-30d")
121
+ .map((node) => {
122
+ const currency = readCurrency(node);
123
+ if (!currency)
124
+ return null;
125
+ const previousNode = previous.find((prev) => readCurrency(prev) === currency);
126
+ return {
127
+ currency,
128
+ startDate: getString(node, "schema:startDate"),
129
+ endDate: getString(node, "schema:endDate"),
130
+ current: kpiValues(node),
131
+ previous: previousNode ? kpiValues(previousNode) : null,
132
+ };
133
+ })
134
+ .filter(isNotNil)
135
+ .sort((a, b) => a.currency.localeCompare(b.currency));
136
+ return isPresent(snapshots) ? snapshots : null;
137
+ }
114
138
  export function extractDailyPerformance(jsonLd) {
115
139
  const nodes = jsonLd["@graph"];
116
140
  const snapshotNodes = findNodesByType(nodes, ":BlendedPerformanceDaily");
@@ -133,7 +157,8 @@ export function extractDailyPerformance(jsonLd) {
133
157
  if (!isPresent(days)) {
134
158
  return null;
135
159
  }
136
- return { days };
160
+ // The daily blend is kept in USD: its predicates are the converted :…Usd ones.
161
+ return { currency: "USD", days };
137
162
  }
138
163
  export function extractProductProfitability(jsonLd) {
139
164
  const nodes = jsonLd["@graph"];
@@ -308,7 +333,8 @@ export function extractMetaDailyInsights(jsonLd) {
308
333
  if (!isPresent(days)) {
309
334
  return null;
310
335
  }
311
- return { campaignUri, campaignName, days };
336
+ const currency = readCurrency(campaignNode) ?? readCurrency(firstInsight);
337
+ return { campaignUri, campaignName, currency, days };
312
338
  }
313
339
  export function extractCampaignChannelMix(jsonLd) {
314
340
  const nodes = jsonLd["@graph"];
@@ -321,22 +347,24 @@ export function extractCampaignChannelMix(jsonLd) {
321
347
  const channel = getString(node, "meta:campaignChannel") || "Meta";
322
348
  const spend = getNumber(node, "meta:totalSpend") || 0;
323
349
  const revenue = getNumber(node, "meta:totalRevenue") || 0;
324
- const existing = channelMap.get(channel) || { count: 0, spend: 0, revenue: 0 };
350
+ const existing = channelMap.get(channel) || { count: 0, spend: 0, revenue: 0, currencies: [] };
325
351
  channelMap.set(channel, {
326
352
  count: existing.count + 1,
327
353
  spend: existing.spend + spend,
328
354
  revenue: existing.revenue + revenue,
355
+ currencies: [...existing.currencies, readCurrency(node)],
329
356
  });
330
357
  });
331
358
  const totalCampaigns = campaignNodes.length;
332
359
  const channels = Array.from(channelMap.entries()).map(([channel, data]) => ({
333
360
  channel,
361
+ currency: sharedCurrency(data.currencies),
334
362
  campaignCount: data.count,
335
363
  totalSpend: data.spend,
336
364
  totalRevenue: data.revenue,
337
365
  percentage: (data.count / totalCampaigns) * 100,
338
366
  }));
339
- return isPresent(channels) ? { channels } : null;
367
+ return isPresent(channels) ? { currency: sharedCurrency(campaignNodes.map(readCurrency)), channels } : null;
340
368
  }
341
369
  export function extractProductVariants(jsonLd) {
342
370
  const nodes = jsonLd["@graph"];
@@ -366,6 +394,7 @@ export function extractProductVariants(jsonLd) {
366
394
  const marginPct = price !== null && cost !== null && price > 0 ? ((price - cost) / price) * 100 : null;
367
395
  return {
368
396
  uri,
397
+ currency: readCurrency(node),
369
398
  productName,
370
399
  variantName,
371
400
  sku,
@@ -402,6 +431,7 @@ export function extractCampaignGrid(jsonLd) {
402
431
  }
403
432
  return {
404
433
  uri,
434
+ currency: readCurrency(node),
405
435
  name,
406
436
  status,
407
437
  channel,
@@ -412,5 +442,5 @@ export function extractCampaignGrid(jsonLd) {
412
442
  };
413
443
  })
414
444
  .filter(isNotNil);
415
- return isPresent(campaigns) ? { campaigns } : null;
445
+ return isPresent(campaigns) ? { currency: sharedCurrency(campaigns.map((c) => c.currency)), campaigns } : null;
416
446
  }
@@ -1,4 +1,9 @@
1
- export declare function formatMetric(value: number, type: "currency" | "multiplier" | "percentage"): string;
1
+ /** A money value in the entity's own currency (`schema:currency`); an unknown or mixed one shows the bare amount. */
2
+ export declare function formatMetric(value: number, type: "currency", currency: string | null): string;
3
+ export declare function formatMetric(value: number, type: "multiplier" | "percentage"): string;
4
+ /** A chart axis label such as `€12K`, or `12K` when the currency is unknown or mixed. */
5
+ export declare function formatCompactMoney(value: number, currency: string | null): string;
2
6
  export declare function determineAvailabilityStatus(quantity?: number): "available" | "low-stock" | "made-to-order" | "out-of-stock";
3
7
  export declare function calculateExpectedRevenue(dailyBudget: number, roas: number, days?: number): number;
8
+ export declare function percentChange(current: number | null, previous: number | null | undefined): number | null;
4
9
  //# sourceMappingURL=insights.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../../src/lib/rdf/insights.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAmBlG;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,CAgB9D;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAErG"}
1
+ {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../../src/lib/rdf/insights.ts"],"names":[],"mappings":"AAEA,qHAAqH;AACrH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAC/F,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;AAyBvF,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMjF;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,CAgB9D;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAErG;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGxG"}
@@ -1,9 +1,8 @@
1
1
  import { isNotNil } from "ramda";
2
- export function formatMetric(value, type) {
2
+ export function formatMetric(value, type, currency = null) {
3
3
  if (type === "currency") {
4
4
  return new Intl.NumberFormat("en-US", {
5
- style: "currency",
6
- currency: "USD",
5
+ ...(currency ? { style: "currency", currency } : {}),
7
6
  minimumFractionDigits: 2,
8
7
  maximumFractionDigits: 2,
9
8
  }).format(value);
@@ -16,6 +15,14 @@ export function formatMetric(value, type) {
16
15
  }
17
16
  return value.toString();
18
17
  }
18
+ /** A chart axis label such as `€12K`, or `12K` when the currency is unknown or mixed. */
19
+ export function formatCompactMoney(value, currency) {
20
+ return new Intl.NumberFormat("en-US", {
21
+ ...(currency ? { style: "currency", currency } : {}),
22
+ notation: "compact",
23
+ maximumFractionDigits: 0,
24
+ }).format(value);
25
+ }
19
26
  export function determineAvailabilityStatus(quantity) {
20
27
  const quantityExists = isNotNil(quantity);
21
28
  if (quantityExists && quantity < 0) {
@@ -32,3 +39,8 @@ export function determineAvailabilityStatus(quantity) {
32
39
  export function calculateExpectedRevenue(dailyBudget, roas, days = 30) {
33
40
  return dailyBudget * days * roas;
34
41
  }
42
+ export function percentChange(current, previous) {
43
+ if (current === null || previous === null || previous === undefined || previous === 0)
44
+ return null;
45
+ return ((current - previous) / Math.abs(previous)) * 100;
46
+ }
@@ -9,18 +9,25 @@ export type Product = {
9
9
  };
10
10
  export type ProductVariant = {
11
11
  uri: string;
12
+ currency: string | null;
12
13
  price?: number;
13
14
  cost?: number;
14
15
  title?: string;
15
16
  };
16
- export type CompanyKpis = {
17
- mer30d?: number;
18
- blendedRoas30d?: number;
19
- blendedCac30dUsd?: number;
20
- last30dSpendUsd?: number;
21
- last30dRevenueUsd?: number;
22
- avgAov30d?: number;
23
- grossMargin30d?: number;
17
+ export type KpiValues = {
18
+ spend: number | null;
19
+ revenue: number | null;
20
+ purchases: number | null;
21
+ roas: number | null;
22
+ cpa: number | null;
23
+ aov: number | null;
24
+ };
25
+ export type KpiSnapshot = {
26
+ currency: string;
27
+ startDate: string | null;
28
+ endDate: string | null;
29
+ current: KpiValues;
30
+ previous: KpiValues | null;
24
31
  };
25
32
  export type DailyPerformanceDay = {
26
33
  date: string;
@@ -29,6 +36,7 @@ export type DailyPerformanceDay = {
29
36
  orders: number;
30
37
  };
31
38
  export type DailyPerformanceData = {
39
+ currency: string;
32
40
  days: DailyPerformanceDay[];
33
41
  };
34
42
  export type ProductProfitabilityData = {
@@ -95,11 +103,14 @@ export type MetaDailyInsightDay = {
95
103
  export type MetaDailyInsightsData = {
96
104
  campaignUri: string;
97
105
  campaignName: string | null;
106
+ currency: string | null;
98
107
  days: MetaDailyInsightDay[];
99
108
  };
100
109
  export type CampaignChannelMixData = {
110
+ currency: string | null;
101
111
  channels: Array<{
102
112
  channel: string;
113
+ currency: string | null;
103
114
  campaignCount: number;
104
115
  totalSpend: number;
105
116
  totalRevenue: number;
@@ -120,8 +131,10 @@ export type ProductVariantsData = {
120
131
  }>;
121
132
  };
122
133
  export type CampaignGridData = {
134
+ currency: string | null;
123
135
  campaigns: Array<{
124
136
  uri: string;
137
+ currency: string | null;
125
138
  name: string | null;
126
139
  status: string | null;
127
140
  channel: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/rdf/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/rdf/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-icons.d.ts","sourceRoot":"","sources":["../../src/lib/tool-icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAeL,KAAK,UAAU,EAShB,MAAM,cAAc,CAAC;AA2DtB,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAEzE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAYxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAK7F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAKtF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuDpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAG/D"}
1
+ {"version":3,"file":"tool-icons.d.ts","sourceRoot":"","sources":["../../src/lib/tool-icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAeL,KAAK,UAAU,EAQhB,MAAM,cAAc,CAAC;AAuDtB,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAEzE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAYxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAK7F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAKtF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuDpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAG/D"}
@@ -1,5 +1,5 @@
1
1
  import { getSkillToolLabel } from "@manta-eu/client/shared/tools";
2
- import { AlertTriangle, BarChart3, BookOpen, Brain, Building2, CheckCircle2, Circle, Clock, Database, DollarSign, GitBranch, Images, Lightbulb, Link, Megaphone, Network, Package, Paperclip, Pause, Target, TrendingUp, Zap, } from "lucide-react";
2
+ import { AlertTriangle, BarChart3, BookOpen, Brain, Building2, CheckCircle2, Circle, Clock, Database, DollarSign, GitBranch, Images, Lightbulb, Link, Megaphone, Network, Package, Paperclip, Target, TrendingUp, Zap, } from "lucide-react";
3
3
  import { match } from "ts-pattern";
4
4
  const toolIconMap = {
5
5
  getRDFoxFacts: Database,
@@ -15,11 +15,7 @@ const toolIconMap = {
15
15
  executeActionPlan: Zap,
16
16
  actionPlanShowcase: Zap,
17
17
  showEntities: Images,
18
- enableAutoPilot: Zap,
19
- enableAutoPilotCron: Zap,
20
- disableAutoPilot: Pause,
21
18
  checkAutoPilotStatus: Zap,
22
- setAutoPilotCadence: Clock,
23
19
  markAsLowRisk: CheckCircle2,
24
20
  readUploadedFile: Paperclip,
25
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveChatProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ActiveChatProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAgF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrH,OAAO,EAAgC,KAAK,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAI3G,YAAY,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,KAAK,gCAAgC,GAAG;IACtC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IACzE,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACvD,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAIF,wBAAgB,uBAAuB,IAAI,gCAAgC,GAAG,SAAS,CAEtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2UAkChE"}
1
+ {"version":3,"file":"ActiveChatProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ActiveChatProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAgF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrH,OAAO,EAAgC,KAAK,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAK3G,YAAY,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,KAAK,gCAAgC,GAAG;IACtC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IACzE,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACvD,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAIF,wBAAgB,uBAAuB,IAAI,gCAAgC,GAAG,SAAS,CAEtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2UAkChE"}
@@ -8,6 +8,7 @@ import { useChatManagerContext } from "./chat-connection-context.js";
8
8
  import { mapActiveChatConnectionState } from "./chat-connection-lifecycle.js";
9
9
  import { createChatReconnectRecoveryTracker } from "./chat-reconnect-recovery.js";
10
10
  import { prepareThinkChatSendRequest } from "./think-chat-request.js";
11
+ import { useGraphRefreshAfterTurn } from "#hooks/use-graph-refresh-after-turn";
11
12
  const ActiveChatConnectionContext = createContext(undefined);
12
13
  export function useActiveChatConnection() {
13
14
  return useContext(ActiveChatConnectionContext);
@@ -73,6 +74,7 @@ function ThinkChatSession(props) {
73
74
  prepareSendMessagesRequest: prepareThinkChatSendRequest,
74
75
  resume: true,
75
76
  });
77
+ useGraphRefreshAfterTurn(chatData.isStreaming);
76
78
  useEffect(() => {
77
79
  if (!pendingStaleResponseId || chatData.isToolContinuation)
78
80
  return;
@@ -1,6 +1,6 @@
1
1
  import type { UseAuthResult } from "../hooks/useAuth.js";
2
2
  import type { User } from "../lib/chat-types.js";
3
- export type AuthContextValue = Pick<UseAuthResult, "datastore" | "datastores" | "logout" | "isOperator" | "canManageTeam" | "orgRoles" | "canManageIntegrations" | "canSwitchDatastore" | "allowedModels"> & {
3
+ export type AuthContextValue = Pick<UseAuthResult, "datastore" | "datastores" | "logout" | "isOperator" | "canManageTeam" | "orgRoles" | "canManageIntegrations" | "canManageStreams" | "canManageSharedMemories" | "canSwitchDatastore" | "allowedModels"> & {
4
4
  user: User;
5
5
  };
6
6
  export declare const AuthContext: import("react").Context<AuthContextValue | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../src/providers/AuthContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,aAAa,EACX,WAAW,GACX,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,UAAU,GACV,uBAAuB,GACvB,oBAAoB,GACpB,eAAe,CAClB,GAAG;IACF,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,WAAW,uDAAyD,CAAC;AAElF,wBAAgB,cAAc,IAAI,gBAAgB,CAQjD"}
1
+ {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../src/providers/AuthContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,aAAa,EACX,WAAW,GACX,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,UAAU,GACV,uBAAuB,GACvB,kBAAkB,GAClB,yBAAyB,GACzB,oBAAoB,GACpB,eAAe,CAClB,GAAG;IACF,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,WAAW,uDAAyD,CAAC;AAElF,wBAAgB,cAAc,IAAI,gBAAgB,CAQjD"}
@@ -7,7 +7,6 @@ export type KnowledgeGraphStateContextValue = {
7
7
  isKnowledgeGraphUnavailable: boolean;
8
8
  isLoading: boolean;
9
9
  error: Error | null;
10
- lastDataVersionChange?: Date;
11
10
  };
12
11
  export declare function useKnowledgeGraphState(): KnowledgeGraphStateContextValue;
13
12
  //# sourceMappingURL=KnowledgeGraphStateContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KnowledgeGraphStateContext.d.ts","sourceRoot":"","sources":["../../src/providers/KnowledgeGraphStateContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAEjF,eAAO,MAAM,0BAA0B,sEAAwE,CAAC;AAEhH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mBAAmB,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,0BAA0B,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC9D,2BAA2B,EAAE,OAAO,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,qBAAqB,CAAC,EAAE,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,sBAAsB,IAAI,+BAA+B,CAQxE"}
1
+ {"version":3,"file":"KnowledgeGraphStateContext.d.ts","sourceRoot":"","sources":["../../src/providers/KnowledgeGraphStateContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAEjF,eAAO,MAAM,0BAA0B,sEAAwE,CAAC;AAEhH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mBAAmB,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACnD,0BAA0B,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC9D,2BAA2B,EAAE,OAAO,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,IAAI,+BAA+B,CAQxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"KnowledgeGraphStateProvider.d.ts","sourceRoot":"","sources":["../../src/providers/KnowledgeGraphStateProvider.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,2CAyJlF"}
1
+ {"version":3,"file":"KnowledgeGraphStateProvider.d.ts","sourceRoot":"","sources":["../../src/providers/KnowledgeGraphStateProvider.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,2CA2IlF"}
@@ -8,7 +8,7 @@ import { deriveAvailability } from "./knowledge-graph-availability.js";
8
8
  import { useKnowledgeGraphPollInterval } from "./KnowledgeGraphPollingProvider.js";
9
9
  import { KnowledgeGraphStateContext } from "./KnowledgeGraphStateContext.js";
10
10
  import { useMantaClient } from "./MantaClientProvider.js";
11
- import { invalidateQueries } from "#lib/tanstack-query";
11
+ import { invalidateGraphDerivedQueries } from "#shared/graph-derived-queries";
12
12
  export function KnowledgeGraphStateProvider(props) {
13
13
  const { children, datastoreId } = props;
14
14
  const { mantaClient } = useMantaClient();
@@ -17,9 +17,11 @@ export function KnowledgeGraphStateProvider(props) {
17
17
  const pollIntervalMs = useKnowledgeGraphPollInterval();
18
18
  const reportedNotProvisionedDatastoreIds = useRef(new Set());
19
19
  const [previousDataVersion, setPreviousDataVersion] = useState();
20
- const [lastDataVersionChange, setLastDataVersionChange] = useState();
21
20
  const [cachedCapacity, setCachedCapacity] = useState();
22
21
  const { data, isLoading, error } = useKnowledgeGraphStateQuery(mantaClient, { dataVersion: previousDataVersion }, {
22
+ // Keep dataVersion out of the key. It only lets the server skip the triple count, and with one cache
23
+ // entry per version the effect below can bounce between two cached answers forever.
24
+ queryKey: useKnowledgeGraphStateQuery.getKey(),
23
25
  refetchInterval: pollIntervalMs,
24
26
  refetchIntervalInBackground: false,
25
27
  staleTime: 0,
@@ -99,21 +101,9 @@ export function KnowledgeGraphStateProvider(props) {
99
101
  ]);
100
102
  useEffect(() => {
101
103
  const currentDataVersion = data?.knowledgeGraphState?.dataVersion?.uniqueId;
102
- if (currentDataVersion && previousDataVersion !== null && previousDataVersion !== currentDataVersion) {
103
- const changeTimestamp = new Date();
104
- setLastDataVersionChange(changeTimestamp);
105
- void invalidateQueries(queryClient, [
106
- ["ActionPlans"],
107
- ["ActionPlanSamples"],
108
- ["SparqlQuery"],
109
- ["ExplainRDFoxFact"],
110
- ["CurrentFactValue"],
111
- ["ValidateActionPlan"],
112
- ["Rules"],
113
- // Every ldo-ui query is graph-derived, so a version change invalidates the whole namespace.
114
- ["ldo-ui"],
115
- ]);
116
- console.debug(`Knowledge graph dataVersion changed at ${changeTimestamp.toISOString()}, invalidating RDFox-related queries`);
104
+ if (currentDataVersion && isPresent(previousDataVersion) && previousDataVersion !== currentDataVersion) {
105
+ void invalidateGraphDerivedQueries(queryClient);
106
+ console.debug("Knowledge graph dataVersion changed, invalidating RDFox-related queries");
117
107
  }
118
108
  if (currentDataVersion && currentDataVersion !== previousDataVersion) {
119
109
  console.debug(`Updating cached dataVersion from ${previousDataVersion} to ${currentDataVersion}`);
@@ -126,7 +116,6 @@ export function KnowledgeGraphStateProvider(props) {
126
116
  isKnowledgeGraphUnavailable: isPresent(knowledgeGraphAvailability) && knowledgeGraphAvailability !== "online",
127
117
  isLoading,
128
118
  error: error,
129
- lastDataVersionChange,
130
- }), [enrichedKnowledgeGraphState, knowledgeGraphAvailability, isLoading, error, lastDataVersionChange]);
119
+ }), [enrichedKnowledgeGraphState, knowledgeGraphAvailability, isLoading, error]);
131
120
  return _jsx(KnowledgeGraphStateContext.Provider, { value: value, children: children });
132
121
  }
@@ -19,5 +19,8 @@ export type ProvidersProps = {
19
19
  knowledgeGraphPollIntervalMs?: number;
20
20
  };
21
21
  export declare function Providers(props: ProvidersProps): import("react/jsx-runtime").JSX.Element;
22
- export declare function EmbeddedChatProviders(props: ProvidersProps): import("react/jsx-runtime").JSX.Element;
22
+ export type EmbeddedChatProvidersProps = Omit<ProvidersProps, "mantaBaseUrl"> & {
23
+ mantaBaseUrl?: string;
24
+ };
25
+ export declare function EmbeddedChatProviders(props: EmbeddedChatProvidersProps): import("react/jsx-runtime").JSX.Element;
23
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuB,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAsCF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAc9C;AAGD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,2CAE1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAuB,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAsCF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAc9C;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAG1G,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,2CAItE"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { defaultDeployment } from "@manta-eu/auth/default-deployment";
2
3
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3
4
  import { NuqsAdapter } from "nuqs/adapters/react-router/v7";
4
5
  import { useState } from "react";
@@ -43,5 +44,5 @@ export function Providers(props) {
43
44
  }
44
45
  // IMPORTANT: Avoid redirects from embedded manta client
45
46
  export function EmbeddedChatProviders(props) {
46
- return _jsx(CoreProviders, { ...props, onUnauthorized: () => { } });
47
+ return (_jsx(CoreProviders, { ...props, mantaBaseUrl: props.mantaBaseUrl ?? defaultDeployment.apiUrl, onUnauthorized: () => { } }));
47
48
  }
@@ -27,5 +27,5 @@ export function DiffRow(props) {
27
27
  const { field, before, after } = props.diff;
28
28
  const changeType = diffChangeType(props.diff);
29
29
  const badge = diffBadge[changeType];
30
- return (_jsxs("div", { className: cn("grid grid-cols-[fit-content(150px)_minmax(0,1fr)_auto] items-baseline gap-2 rounded-md px-2 py-1", diffRowTint[changeType]), children: [_jsx("span", { className: "typography-small text-muted-foreground truncate", title: field, children: field }), _jsxs("div", { className: "min-w-0 line-clamp-2 break-words text-right", children: [isPresent(before) && (_jsx("span", { className: "typography-small text-muted-foreground line-through mr-1.5", title: before, children: shortenValue(before) })), isPresent(after) && (_jsx("span", { className: "typography-small text-default-foreground", title: after, children: shortenValue(after) }))] }), _jsx(Badge, { size: "sm", variant: badge.variant, className: cn("shrink-0", badge.className), children: badge.label })] }));
30
+ return (_jsxs("div", { className: cn("grid grid-cols-[fit-content(40%)_minmax(0,1fr)_auto] items-baseline gap-2 rounded-md px-2 py-1", diffRowTint[changeType]), children: [_jsx("span", { className: "typography-small text-muted-foreground truncate", title: field, children: field }), _jsxs("div", { className: "min-w-0 break-words text-right", children: [isPresent(before) && (_jsx("span", { className: "typography-small text-muted-foreground line-through mr-1.5", title: before, children: shortenValue(before) })), isPresent(after) && (_jsx("span", { className: "typography-small text-default-foreground", title: after, children: shortenValue(after) }))] }), _jsx(Badge, { size: "sm", variant: badge.variant, className: cn("shrink-0", badge.className), children: badge.label })] }));
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ActionFormDialog.d.ts","sourceRoot":"","sources":["../../../../../src/routes/data-explorer/components/record-detail/ActionFormDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAY7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,CAAC;CAC7C,CAAC;AAeF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAkH5D"}
1
+ {"version":3,"file":"ActionFormDialog.d.ts","sourceRoot":"","sources":["../../../../../src/routes/data-explorer/components/record-detail/ActionFormDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAY7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,CAAC;CAC7C,CAAC;AAeF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAwI5D"}