@manta-eu/react 0.12.0 → 0.13.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 (585) hide show
  1. package/README.md +59 -0
  2. package/dist/components/AppErrorBoundary.d.ts.map +1 -1
  3. package/dist/components/AppErrorBoundary.js +14 -11
  4. package/dist/components/AppErrorBoundary.js.map +1 -1
  5. package/dist/components/app-gate/AppGate.d.ts +8 -0
  6. package/dist/components/app-gate/AppGate.d.ts.map +1 -0
  7. package/dist/components/app-gate/AppGate.js +68 -0
  8. package/dist/components/app-gate/AppGate.js.map +1 -0
  9. package/dist/components/app-gate/AwaitingDatastoreStatus.d.ts +7 -0
  10. package/dist/components/app-gate/AwaitingDatastoreStatus.d.ts.map +1 -0
  11. package/dist/components/app-gate/AwaitingDatastoreStatus.js +19 -0
  12. package/dist/components/app-gate/AwaitingDatastoreStatus.js.map +1 -0
  13. package/dist/components/app-gate/EnterDatastoreRoute.d.ts +2 -0
  14. package/dist/components/app-gate/EnterDatastoreRoute.d.ts.map +1 -0
  15. package/dist/components/app-gate/EnterDatastoreRoute.js +25 -0
  16. package/dist/components/app-gate/EnterDatastoreRoute.js.map +1 -0
  17. package/dist/components/app-gate/ErrorRoute.d.ts +2 -0
  18. package/dist/components/app-gate/ErrorRoute.d.ts.map +1 -0
  19. package/dist/components/app-gate/ErrorRoute.js +27 -0
  20. package/dist/components/app-gate/ErrorRoute.js.map +1 -0
  21. package/dist/components/app-gate/FailureAlert.d.ts +5 -0
  22. package/dist/components/app-gate/FailureAlert.d.ts.map +1 -0
  23. package/dist/components/app-gate/FailureAlert.js +9 -0
  24. package/dist/components/app-gate/FailureAlert.js.map +1 -0
  25. package/dist/components/app-gate/NoDatastoreAccess.d.ts +8 -0
  26. package/dist/components/app-gate/NoDatastoreAccess.d.ts.map +1 -0
  27. package/dist/components/app-gate/NoDatastoreAccess.js +9 -0
  28. package/dist/components/app-gate/NoDatastoreAccess.js.map +1 -0
  29. package/dist/components/app-gate/NotFoundRoute.d.ts +2 -0
  30. package/dist/components/app-gate/NotFoundRoute.d.ts.map +1 -0
  31. package/dist/components/app-gate/NotFoundRoute.js +9 -0
  32. package/dist/components/app-gate/NotFoundRoute.js.map +1 -0
  33. package/dist/components/app-gate/PendingInvitations.d.ts +5 -0
  34. package/dist/components/app-gate/PendingInvitations.d.ts.map +1 -0
  35. package/dist/components/app-gate/PendingInvitations.js +58 -0
  36. package/dist/components/app-gate/PendingInvitations.js.map +1 -0
  37. package/dist/components/app-gate/ServiceError.d.ts +8 -0
  38. package/dist/components/app-gate/ServiceError.d.ts.map +1 -0
  39. package/dist/components/app-gate/ServiceError.js +10 -0
  40. package/dist/components/app-gate/ServiceError.js.map +1 -0
  41. package/dist/components/app-gate/index.d.ts +3 -0
  42. package/dist/components/app-gate/index.d.ts.map +1 -0
  43. package/dist/components/app-gate/index.js +3 -0
  44. package/dist/components/app-gate/index.js.map +1 -0
  45. package/dist/components/app-gate/sdk-route-elements.d.ts +23 -0
  46. package/dist/components/app-gate/sdk-route-elements.d.ts.map +1 -0
  47. package/dist/components/app-gate/sdk-route-elements.js +35 -0
  48. package/dist/components/app-gate/sdk-route-elements.js.map +1 -0
  49. package/dist/components/app-shell/AppShell.d.ts +7 -0
  50. package/dist/components/app-shell/AppShell.d.ts.map +1 -0
  51. package/dist/components/app-shell/AppShell.js +10 -0
  52. package/dist/components/app-shell/AppShell.js.map +1 -0
  53. package/dist/components/app-shell/AppShellRoutes.d.ts +9 -0
  54. package/dist/components/app-shell/AppShellRoutes.d.ts.map +1 -0
  55. package/dist/components/app-shell/AppShellRoutes.js +20 -0
  56. package/dist/components/app-shell/AppShellRoutes.js.map +1 -0
  57. package/dist/components/app-shell/GroupDatastores.d.ts +8 -0
  58. package/dist/components/app-shell/GroupDatastores.d.ts.map +1 -0
  59. package/dist/components/app-shell/GroupDatastores.js +15 -0
  60. package/dist/components/app-shell/GroupDatastores.js.map +1 -0
  61. package/dist/components/app-shell/GroupRoute.d.ts +2 -0
  62. package/dist/components/app-shell/GroupRoute.d.ts.map +1 -0
  63. package/dist/components/app-shell/GroupRoute.js +22 -0
  64. package/dist/components/app-shell/GroupRoute.js.map +1 -0
  65. package/dist/components/app-shell/index.d.ts +3 -0
  66. package/dist/components/app-shell/index.d.ts.map +1 -0
  67. package/dist/components/app-shell/index.js +3 -0
  68. package/dist/components/app-shell/index.js.map +1 -0
  69. package/dist/components/authenticated-chat/index.d.ts +1 -2
  70. package/dist/components/authenticated-chat/index.d.ts.map +1 -1
  71. package/dist/components/authenticated-chat/index.js +1 -12
  72. package/dist/components/authenticated-chat/index.js.map +1 -1
  73. package/dist/components/chat-view/Chat.d.ts +2 -1
  74. package/dist/components/chat-view/Chat.d.ts.map +1 -1
  75. package/dist/components/chat-view/Chat.js +3 -2
  76. package/dist/components/chat-view/Chat.js.map +1 -1
  77. package/dist/components/chat-view/MessageItem.d.ts.map +1 -1
  78. package/dist/components/chat-view/MessageItem.js +4 -2
  79. package/dist/components/chat-view/MessageItem.js.map +1 -1
  80. package/dist/components/chat-view/tool-part-rendering.d.ts +1 -0
  81. package/dist/components/chat-view/tool-part-rendering.d.ts.map +1 -1
  82. package/dist/components/chat-view/tool-part-rendering.js +8 -1
  83. package/dist/components/chat-view/tool-part-rendering.js.map +1 -1
  84. package/dist/components/chip/index.d.ts +1 -0
  85. package/dist/components/chip/index.d.ts.map +1 -1
  86. package/dist/components/chip/index.js +2 -1
  87. package/dist/components/chip/index.js.map +1 -1
  88. package/dist/components/embedded-chat/index.d.ts +1 -1
  89. package/dist/components/embedded-chat/index.d.ts.map +1 -1
  90. package/dist/components/embedded-chat/index.js +1 -1
  91. package/dist/components/embedded-chat/index.js.map +1 -1
  92. package/dist/components/input/input-date-time.d.ts +6 -0
  93. package/dist/components/input/input-date-time.d.ts.map +1 -1
  94. package/dist/components/input/input-date-time.js +2 -1
  95. package/dist/components/input/input-date-time.js.map +1 -1
  96. package/dist/components/input/input-date.d.ts +22 -0
  97. package/dist/components/input/input-date.d.ts.map +1 -1
  98. package/dist/components/input/input-date.js +28 -14
  99. package/dist/components/input/input-date.js.map +1 -1
  100. package/dist/components/input/input-time.d.ts +9 -0
  101. package/dist/components/input/input-time.d.ts.map +1 -1
  102. package/dist/components/input/input-time.js +29 -18
  103. package/dist/components/input/input-time.js.map +1 -1
  104. package/dist/components/layouts/RouteLayout.d.ts +0 -9
  105. package/dist/components/layouts/RouteLayout.d.ts.map +1 -1
  106. package/dist/components/layouts/RouteLayout.js +7 -4
  107. package/dist/components/layouts/RouteLayout.js.map +1 -1
  108. package/dist/components/layouts/Sidebar.d.ts +1 -8
  109. package/dist/components/layouts/Sidebar.d.ts.map +1 -1
  110. package/dist/components/layouts/Sidebar.js +7 -14
  111. package/dist/components/layouts/Sidebar.js.map +1 -1
  112. package/dist/components/plan-limits/PlanLimitsDialog.d.ts +20 -0
  113. package/dist/components/plan-limits/PlanLimitsDialog.d.ts.map +1 -0
  114. package/dist/components/plan-limits/PlanLimitsDialog.js +109 -0
  115. package/dist/components/plan-limits/PlanLimitsDialog.js.map +1 -0
  116. package/dist/components/plan-limits/index.d.ts +4 -0
  117. package/dist/components/plan-limits/index.d.ts.map +1 -0
  118. package/dist/components/plan-limits/index.js +2 -0
  119. package/dist/components/plan-limits/index.js.map +1 -0
  120. package/dist/components/plan-limits/plan-limits-client.d.ts +15 -0
  121. package/dist/components/plan-limits/plan-limits-client.d.ts.map +1 -0
  122. package/dist/components/plan-limits/plan-limits-client.js +44 -0
  123. package/dist/components/plan-limits/plan-limits-client.js.map +1 -0
  124. package/dist/components/plan-limits/plan-limits-model.d.ts +66 -0
  125. package/dist/components/plan-limits/plan-limits-model.d.ts.map +1 -0
  126. package/dist/components/plan-limits/plan-limits-model.js +123 -0
  127. package/dist/components/plan-limits/plan-limits-model.js.map +1 -0
  128. package/dist/components/plan-limits/plan-limits-save.d.ts +31 -0
  129. package/dist/components/plan-limits/plan-limits-save.d.ts.map +1 -0
  130. package/dist/components/plan-limits/plan-limits-save.js +43 -0
  131. package/dist/components/plan-limits/plan-limits-save.js.map +1 -0
  132. package/dist/components/planning/PlanLimitsAction.d.ts +6 -0
  133. package/dist/components/planning/PlanLimitsAction.d.ts.map +1 -0
  134. package/dist/components/planning/PlanLimitsAction.js +19 -0
  135. package/dist/components/planning/PlanLimitsAction.js.map +1 -0
  136. package/dist/components/slider/index.d.ts.map +1 -1
  137. package/dist/components/slider/index.js +2 -1
  138. package/dist/components/slider/index.js.map +1 -1
  139. package/dist/datastore-picker/datastore-picker-rows.d.ts +7 -0
  140. package/dist/datastore-picker/datastore-picker-rows.d.ts.map +1 -1
  141. package/dist/datastore-picker/datastore-picker-rows.js +26 -22
  142. package/dist/datastore-picker/datastore-picker-rows.js.map +1 -1
  143. package/dist/globals.css +85 -2
  144. package/dist/hooks/use-action-plans-list.d.ts +3 -0
  145. package/dist/hooks/use-action-plans-list.d.ts.map +1 -1
  146. package/dist/hooks/use-action-plans-list.js +8 -9
  147. package/dist/hooks/use-action-plans-list.js.map +1 -1
  148. package/dist/hooks/use-activity-feed.d.ts +10 -1
  149. package/dist/hooks/use-activity-feed.d.ts.map +1 -1
  150. package/dist/hooks/use-activity-feed.js +9 -11
  151. package/dist/hooks/use-activity-feed.js.map +1 -1
  152. package/dist/hooks/use-entity.d.ts +4 -3
  153. package/dist/hooks/use-entity.d.ts.map +1 -1
  154. package/dist/hooks/use-entity.js +4 -4
  155. package/dist/hooks/use-entity.js.map +1 -1
  156. package/dist/hooks/use-manual-actions.d.ts +1 -1
  157. package/dist/hooks/use-manual-actions.d.ts.map +1 -1
  158. package/dist/hooks/use-manual-actions.js +5 -5
  159. package/dist/hooks/use-manual-actions.js.map +1 -1
  160. package/dist/hooks/use-unsaved-changes-warning.d.ts +2 -0
  161. package/dist/hooks/use-unsaved-changes-warning.d.ts.map +1 -0
  162. package/dist/hooks/use-unsaved-changes-warning.js +13 -0
  163. package/dist/hooks/use-unsaved-changes-warning.js.map +1 -0
  164. package/dist/hooks/useAuth.d.ts.map +1 -1
  165. package/dist/hooks/useAuth.js +4 -3
  166. package/dist/hooks/useAuth.js.map +1 -1
  167. package/dist/hooks/useChatPanelSync.d.ts.map +1 -1
  168. package/dist/hooks/useChatPanelSync.js +2 -3
  169. package/dist/hooks/useChatPanelSync.js.map +1 -1
  170. package/dist/hooks/useDatastoreSelection.d.ts.map +1 -1
  171. package/dist/hooks/useDatastoreSelection.js +11 -4
  172. package/dist/hooks/useDatastoreSelection.js.map +1 -1
  173. package/dist/hooks/useExecuteAction.d.ts +1 -0
  174. package/dist/hooks/useExecuteAction.d.ts.map +1 -1
  175. package/dist/hooks/useExecuteAction.js.map +1 -1
  176. package/dist/hooks/useLoginRedirect.d.ts +6 -0
  177. package/dist/hooks/useLoginRedirect.d.ts.map +1 -0
  178. package/dist/hooks/useLoginRedirect.js +51 -0
  179. package/dist/hooks/useLoginRedirect.js.map +1 -0
  180. package/dist/hooks/usePlanLimits.d.ts +18 -0
  181. package/dist/hooks/usePlanLimits.d.ts.map +1 -0
  182. package/dist/hooks/usePlanLimits.js +56 -0
  183. package/dist/hooks/usePlanLimits.js.map +1 -0
  184. package/dist/ldo-ui.d.ts +1 -1
  185. package/dist/ldo-ui.d.ts.map +1 -1
  186. package/dist/ldo-ui.js.map +1 -1
  187. package/dist/lib/app-tools.d.ts +18 -0
  188. package/dist/lib/app-tools.d.ts.map +1 -0
  189. package/dist/lib/app-tools.js +42 -0
  190. package/dist/lib/app-tools.js.map +1 -0
  191. package/dist/lib/chat-types.d.ts +3 -0
  192. package/dist/lib/chat-types.d.ts.map +1 -1
  193. package/dist/lib/chat-types.js.map +1 -1
  194. package/dist/lib/datastore-route-table.d.ts +3 -0
  195. package/dist/lib/datastore-route-table.d.ts.map +1 -1
  196. package/dist/lib/datastore-route-table.js +6 -0
  197. package/dist/lib/datastore-route-table.js.map +1 -1
  198. package/dist/lib/graphql-error.d.ts +2 -0
  199. package/dist/lib/graphql-error.d.ts.map +1 -0
  200. package/dist/lib/graphql-error.js +7 -0
  201. package/dist/lib/graphql-error.js.map +1 -0
  202. package/dist/lib/update-notice.d.ts +2 -1
  203. package/dist/lib/update-notice.d.ts.map +1 -1
  204. package/dist/lib/update-notice.js +8 -2
  205. package/dist/lib/update-notice.js.map +1 -1
  206. package/dist/providers/ActiveChatProvider.d.ts +2 -0
  207. package/dist/providers/ActiveChatProvider.d.ts.map +1 -1
  208. package/dist/providers/ActiveChatProvider.js +6 -3
  209. package/dist/providers/ActiveChatProvider.js.map +1 -1
  210. package/dist/providers/ActiveDatastoreProvider.d.ts +12 -0
  211. package/dist/providers/ActiveDatastoreProvider.d.ts.map +1 -1
  212. package/dist/providers/ActiveDatastoreProvider.js +114 -11
  213. package/dist/providers/ActiveDatastoreProvider.js.map +1 -1
  214. package/dist/providers/AuthContext.d.ts +1 -0
  215. package/dist/providers/AuthContext.d.ts.map +1 -1
  216. package/dist/providers/AuthContext.js.map +1 -1
  217. package/dist/providers/MantaClientProvider.d.ts.map +1 -1
  218. package/dist/providers/MantaClientProvider.js +3 -3
  219. package/dist/providers/MantaClientProvider.js.map +1 -1
  220. package/dist/providers/index.d.ts +3 -1
  221. package/dist/providers/index.d.ts.map +1 -1
  222. package/dist/providers/index.js +2 -2
  223. package/dist/providers/index.js.map +1 -1
  224. package/dist/routes/activity/detail/ActivityDetailRoute.d.ts.map +1 -1
  225. package/dist/routes/activity/detail/ActivityDetailRoute.js +1 -3
  226. package/dist/routes/activity/detail/ActivityDetailRoute.js.map +1 -1
  227. package/dist/routes/activity/index.d.ts.map +1 -1
  228. package/dist/routes/activity/index.js +1 -3
  229. package/dist/routes/activity/index.js.map +1 -1
  230. package/dist/routes/chat/index.d.ts +2 -21
  231. package/dist/routes/chat/index.d.ts.map +1 -1
  232. package/dist/routes/chat/index.js +4 -2
  233. package/dist/routes/chat/index.js.map +1 -1
  234. package/dist/routes/data-collection/index.d.ts.map +1 -1
  235. package/dist/routes/data-collection/index.js +1 -3
  236. package/dist/routes/data-collection/index.js.map +1 -1
  237. package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
  238. package/dist/routes/data-explorer/components/DataExplorerLayout.js +1 -3
  239. package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
  240. package/dist/routes/data-explorer/components/class-detail/UsedByRules.js +2 -2
  241. package/dist/routes/data-explorer/components/class-detail/UsedByRules.js.map +1 -1
  242. package/dist/routes/datastores/index.d.ts.map +1 -1
  243. package/dist/routes/datastores/index.js +2 -2
  244. package/dist/routes/datastores/index.js.map +1 -1
  245. package/dist/routes/explain/index.d.ts.map +1 -1
  246. package/dist/routes/explain/index.js +1 -3
  247. package/dist/routes/explain/index.js.map +1 -1
  248. package/dist/routes/integrations/components/connect-forms/DashConnectForm.d.ts.map +1 -1
  249. package/dist/routes/integrations/components/connect-forms/DashConnectForm.js +0 -1
  250. package/dist/routes/integrations/components/connect-forms/DashConnectForm.js.map +1 -1
  251. package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.d.ts.map +1 -1
  252. package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js +0 -1
  253. package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js.map +1 -1
  254. package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.d.ts.map +1 -1
  255. package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js +0 -1
  256. package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js.map +1 -1
  257. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -1
  258. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +0 -1
  259. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -1
  260. package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts +0 -1
  261. package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts.map +1 -1
  262. package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js +3 -2
  263. package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js.map +1 -1
  264. package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.d.ts.map +1 -1
  265. package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js +0 -1
  266. package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js.map +1 -1
  267. package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.d.ts.map +1 -1
  268. package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js +0 -1
  269. package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js.map +1 -1
  270. package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts +0 -1
  271. package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts.map +1 -1
  272. package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js +4 -3
  273. package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js.map +1 -1
  274. package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.d.ts.map +1 -1
  275. package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js +0 -1
  276. package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js.map +1 -1
  277. package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.d.ts.map +1 -1
  278. package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js +0 -1
  279. package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js.map +1 -1
  280. package/dist/routes/integrations/types.d.ts +2 -1
  281. package/dist/routes/integrations/types.d.ts.map +1 -1
  282. package/dist/routes/integrations/types.js +16 -0
  283. package/dist/routes/integrations/types.js.map +1 -1
  284. package/dist/routes/memories/components/DateValueInput.d.ts +16 -0
  285. package/dist/routes/memories/components/DateValueInput.d.ts.map +1 -0
  286. package/dist/routes/memories/components/DateValueInput.js +35 -0
  287. package/dist/routes/memories/components/DateValueInput.js.map +1 -0
  288. package/dist/routes/memories/components/EntityValuePicker.d.ts +11 -0
  289. package/dist/routes/memories/components/EntityValuePicker.d.ts.map +1 -0
  290. package/dist/routes/memories/components/EntityValuePicker.js +61 -0
  291. package/dist/routes/memories/components/EntityValuePicker.js.map +1 -0
  292. package/dist/routes/memories/components/FieldLabel.d.ts +12 -0
  293. package/dist/routes/memories/components/FieldLabel.d.ts.map +1 -0
  294. package/dist/routes/memories/components/FieldLabel.js +12 -0
  295. package/dist/routes/memories/components/FieldLabel.js.map +1 -0
  296. package/dist/routes/memories/components/ImportanceSlider.d.ts +2 -0
  297. package/dist/routes/memories/components/ImportanceSlider.d.ts.map +1 -1
  298. package/dist/routes/memories/components/ImportanceSlider.js +4 -1
  299. package/dist/routes/memories/components/ImportanceSlider.js.map +1 -1
  300. package/dist/routes/memories/components/MemoriesFilters.d.ts +2 -2
  301. package/dist/routes/memories/components/MemoriesFilters.d.ts.map +1 -1
  302. package/dist/routes/memories/components/MemoriesFilters.js.map +1 -1
  303. package/dist/routes/memories/components/MemoriesPanel.d.ts.map +1 -1
  304. package/dist/routes/memories/components/MemoriesPanel.js +4 -0
  305. package/dist/routes/memories/components/MemoriesPanel.js.map +1 -1
  306. package/dist/routes/memories/components/MemoriesTabPanel.d.ts +2 -2
  307. package/dist/routes/memories/components/MemoriesTabPanel.d.ts.map +1 -1
  308. package/dist/routes/memories/components/MemoryActions.d.ts +2 -0
  309. package/dist/routes/memories/components/MemoryActions.d.ts.map +1 -1
  310. package/dist/routes/memories/components/MemoryActions.js +3 -3
  311. package/dist/routes/memories/components/MemoryActions.js.map +1 -1
  312. package/dist/routes/memories/components/MemoryFields.d.ts +15 -3
  313. package/dist/routes/memories/components/MemoryFields.d.ts.map +1 -1
  314. package/dist/routes/memories/components/MemoryFields.js +34 -5
  315. package/dist/routes/memories/components/MemoryFields.js.map +1 -1
  316. package/dist/routes/memories/components/MemoryFormDialog.d.ts +6 -3
  317. package/dist/routes/memories/components/MemoryFormDialog.d.ts.map +1 -1
  318. package/dist/routes/memories/components/MemoryFormDialog.js +105 -59
  319. package/dist/routes/memories/components/MemoryFormDialog.js.map +1 -1
  320. package/dist/routes/memories/components/MemoryPropertyFields.d.ts +10 -0
  321. package/dist/routes/memories/components/MemoryPropertyFields.d.ts.map +1 -0
  322. package/dist/routes/memories/components/MemoryPropertyFields.js +67 -0
  323. package/dist/routes/memories/components/MemoryPropertyFields.js.map +1 -0
  324. package/dist/routes/memories/components/RuleDraftDialog.d.ts +7 -0
  325. package/dist/routes/memories/components/RuleDraftDialog.d.ts.map +1 -0
  326. package/dist/routes/memories/components/RuleDraftDialog.js +20 -0
  327. package/dist/routes/memories/components/RuleDraftDialog.js.map +1 -0
  328. package/dist/routes/memories/components/SchemasTab.d.ts +17 -2
  329. package/dist/routes/memories/components/SchemasTab.d.ts.map +1 -1
  330. package/dist/routes/memories/components/SchemasTab.js +146 -28
  331. package/dist/routes/memories/components/SchemasTab.js.map +1 -1
  332. package/dist/routes/memories/components/badges.d.ts +7 -0
  333. package/dist/routes/memories/components/badges.d.ts.map +1 -1
  334. package/dist/routes/memories/components/badges.js +11 -3
  335. package/dist/routes/memories/components/badges.js.map +1 -1
  336. package/dist/routes/memories/hooks/useMemoryColumns.d.ts +4 -2
  337. package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -1
  338. package/dist/routes/memories/hooks/useMemoryColumns.js +31 -15
  339. package/dist/routes/memories/hooks/useMemoryColumns.js.map +1 -1
  340. package/dist/routes/memories/index.d.ts +2 -1
  341. package/dist/routes/memories/index.d.ts.map +1 -1
  342. package/dist/routes/memories/index.js +72 -30
  343. package/dist/routes/memories/index.js.map +1 -1
  344. package/dist/routes/memories/memory-mutation-input.d.ts.map +1 -1
  345. package/dist/routes/memories/memory-mutation-input.js +5 -2
  346. package/dist/routes/memories/memory-mutation-input.js.map +1 -1
  347. package/dist/routes/memories/memory-property-values.d.ts +13 -0
  348. package/dist/routes/memories/memory-property-values.d.ts.map +1 -0
  349. package/dist/routes/memories/memory-property-values.js +40 -0
  350. package/dist/routes/memories/memory-property-values.js.map +1 -0
  351. package/dist/routes/memories/schemas/AllowedValuesField.d.ts +14 -0
  352. package/dist/routes/memories/schemas/AllowedValuesField.d.ts.map +1 -0
  353. package/dist/routes/memories/schemas/AllowedValuesField.js +64 -0
  354. package/dist/routes/memories/schemas/AllowedValuesField.js.map +1 -0
  355. package/dist/routes/memories/schemas/MemorySchemaPage.d.ts +127 -0
  356. package/dist/routes/memories/schemas/MemorySchemaPage.d.ts.map +1 -0
  357. package/dist/routes/memories/schemas/MemorySchemaPage.js +285 -0
  358. package/dist/routes/memories/schemas/MemorySchemaPage.js.map +1 -0
  359. package/dist/routes/memories/schemas/SchemaChangeReviewDialog.d.ts +20 -0
  360. package/dist/routes/memories/schemas/SchemaChangeReviewDialog.d.ts.map +1 -0
  361. package/dist/routes/memories/schemas/SchemaChangeReviewDialog.js +54 -0
  362. package/dist/routes/memories/schemas/SchemaChangeReviewDialog.js.map +1 -0
  363. package/dist/routes/memories/schemas/SchemaConfirmDialog.d.ts +15 -0
  364. package/dist/routes/memories/schemas/SchemaConfirmDialog.d.ts.map +1 -0
  365. package/dist/routes/memories/schemas/SchemaConfirmDialog.js +8 -0
  366. package/dist/routes/memories/schemas/SchemaConfirmDialog.js.map +1 -0
  367. package/dist/routes/memories/schemas/SchemaDetailPage.d.ts +15 -0
  368. package/dist/routes/memories/schemas/SchemaDetailPage.d.ts.map +1 -0
  369. package/dist/routes/memories/schemas/SchemaDetailPage.js +74 -0
  370. package/dist/routes/memories/schemas/SchemaDetailPage.js.map +1 -0
  371. package/dist/routes/memories/schemas/SchemaEditorForm.d.ts +10 -0
  372. package/dist/routes/memories/schemas/SchemaEditorForm.d.ts.map +1 -0
  373. package/dist/routes/memories/schemas/SchemaEditorForm.js +242 -0
  374. package/dist/routes/memories/schemas/SchemaEditorForm.js.map +1 -0
  375. package/dist/routes/memories/schemas/SchemaTemplatesDialog.d.ts +13 -0
  376. package/dist/routes/memories/schemas/SchemaTemplatesDialog.d.ts.map +1 -0
  377. package/dist/routes/memories/schemas/SchemaTemplatesDialog.js +13 -0
  378. package/dist/routes/memories/schemas/SchemaTemplatesDialog.js.map +1 -0
  379. package/dist/routes/memories/schemas/ValueTypeSelect.d.ts +12 -0
  380. package/dist/routes/memories/schemas/ValueTypeSelect.d.ts.map +1 -0
  381. package/dist/routes/memories/schemas/ValueTypeSelect.js +10 -0
  382. package/dist/routes/memories/schemas/ValueTypeSelect.js.map +1 -0
  383. package/dist/routes/memories/schemas/schema-form.d.ts +72 -0
  384. package/dist/routes/memories/schemas/schema-form.d.ts.map +1 -0
  385. package/dist/routes/memories/schemas/schema-form.js +279 -0
  386. package/dist/routes/memories/schemas/schema-form.js.map +1 -0
  387. package/dist/routes/memories/schemas/schema-impact.d.ts +13 -0
  388. package/dist/routes/memories/schemas/schema-impact.d.ts.map +1 -0
  389. package/dist/routes/memories/schemas/schema-impact.js +40 -0
  390. package/dist/routes/memories/schemas/schema-impact.js.map +1 -0
  391. package/dist/routes/memories/schemas/schema-route.d.ts +18 -0
  392. package/dist/routes/memories/schemas/schema-route.d.ts.map +1 -0
  393. package/dist/routes/memories/schemas/schema-route.js +21 -0
  394. package/dist/routes/memories/schemas/schema-route.js.map +1 -0
  395. package/dist/routes/memories/schemas/schema-rule-context.d.ts +17 -0
  396. package/dist/routes/memories/schemas/schema-rule-context.d.ts.map +1 -0
  397. package/dist/routes/memories/schemas/schema-rule-context.js +83 -0
  398. package/dist/routes/memories/schemas/schema-rule-context.js.map +1 -0
  399. package/dist/routes/memories/schemas/schema-table.d.ts +11 -0
  400. package/dist/routes/memories/schemas/schema-table.d.ts.map +1 -0
  401. package/dist/routes/memories/schemas/schema-table.js +34 -0
  402. package/dist/routes/memories/schemas/schema-table.js.map +1 -0
  403. package/dist/routes/memories/schemas/useMemorySchemaMutations.d.ts +32 -0
  404. package/dist/routes/memories/schemas/useMemorySchemaMutations.d.ts.map +1 -0
  405. package/dist/routes/memories/schemas/useMemorySchemaMutations.js +31 -0
  406. package/dist/routes/memories/schemas/useMemorySchemaMutations.js.map +1 -0
  407. package/dist/routes/memories/schemas/useSchemaChangeReview.d.ts +51 -0
  408. package/dist/routes/memories/schemas/useSchemaChangeReview.d.ts.map +1 -0
  409. package/dist/routes/memories/schemas/useSchemaChangeReview.js +175 -0
  410. package/dist/routes/memories/schemas/useSchemaChangeReview.js.map +1 -0
  411. package/dist/routes/memories/schemas/useSchemaLifecycle.d.ts +46 -0
  412. package/dist/routes/memories/schemas/useSchemaLifecycle.d.ts.map +1 -0
  413. package/dist/routes/memories/schemas/useSchemaLifecycle.js +93 -0
  414. package/dist/routes/memories/schemas/useSchemaLifecycle.js.map +1 -0
  415. package/dist/routes/memories/schemas/useSchemasTab.d.ts +18 -0
  416. package/dist/routes/memories/schemas/useSchemasTab.d.ts.map +1 -0
  417. package/dist/routes/memories/schemas/useSchemasTab.js +92 -0
  418. package/dist/routes/memories/schemas/useSchemasTab.js.map +1 -0
  419. package/dist/routes/plans/index.d.ts.map +1 -1
  420. package/dist/routes/plans/index.js +2 -2
  421. package/dist/routes/plans/index.js.map +1 -1
  422. package/dist/routes/rules/components/CreateRuleChatModal.d.ts +7 -1
  423. package/dist/routes/rules/components/CreateRuleChatModal.d.ts.map +1 -1
  424. package/dist/routes/rules/components/CreateRuleChatModal.js +9 -4
  425. package/dist/routes/rules/components/CreateRuleChatModal.js.map +1 -1
  426. package/dist/routes/rules/components/RuleValueControls.d.ts.map +1 -1
  427. package/dist/routes/rules/components/RuleValueControls.js +3 -24
  428. package/dist/routes/rules/components/RuleValueControls.js.map +1 -1
  429. package/dist/routes/rules/components/rule-value-input.d.ts +11 -0
  430. package/dist/routes/rules/components/rule-value-input.d.ts.map +1 -0
  431. package/dist/routes/rules/components/rule-value-input.js +24 -0
  432. package/dist/routes/rules/components/rule-value-input.js.map +1 -0
  433. package/dist/routes/rules/components/rules.utils.d.ts +5 -0
  434. package/dist/routes/rules/components/rules.utils.d.ts.map +1 -1
  435. package/dist/routes/rules/components/rules.utils.js +18 -3
  436. package/dist/routes/rules/components/rules.utils.js.map +1 -1
  437. package/dist/routes/rules/pages.d.ts +1 -1
  438. package/dist/routes/rules/pages.d.ts.map +1 -1
  439. package/dist/routes/rules/pages.js +1 -1
  440. package/dist/routes/rules/pages.js.map +1 -1
  441. package/dist/shared/graph-derived-queries.d.ts.map +1 -1
  442. package/dist/shared/graph-derived-queries.js +4 -1
  443. package/dist/shared/graph-derived-queries.js.map +1 -1
  444. package/dist/worker/index.d.ts +22 -0
  445. package/dist/worker/index.d.ts.map +1 -0
  446. package/dist/worker/index.js +110 -0
  447. package/dist/worker/index.js.map +1 -0
  448. package/dist/worker/policy.d.ts +21 -0
  449. package/dist/worker/policy.d.ts.map +1 -0
  450. package/dist/worker/policy.js +42 -0
  451. package/dist/worker/policy.js.map +1 -0
  452. package/dist/worker/proxy.d.ts +14 -0
  453. package/dist/worker/proxy.d.ts.map +1 -0
  454. package/dist/worker/proxy.js +58 -0
  455. package/dist/worker/proxy.js.map +1 -0
  456. package/dist/worker/session.d.ts +24 -0
  457. package/dist/worker/session.d.ts.map +1 -0
  458. package/dist/worker/session.js +72 -0
  459. package/dist/worker/session.js.map +1 -0
  460. package/package.json +52 -7
  461. package/src/app-subpaths.json +9 -1
  462. package/src/components/AppErrorBoundary.tsx +14 -11
  463. package/src/components/app-gate/AppGate.tsx +122 -0
  464. package/src/components/app-gate/AwaitingDatastoreStatus.tsx +35 -0
  465. package/src/components/app-gate/EnterDatastoreRoute.tsx +30 -0
  466. package/src/components/app-gate/ErrorRoute.tsx +43 -0
  467. package/src/components/app-gate/FailureAlert.tsx +15 -0
  468. package/src/components/app-gate/NoDatastoreAccess.tsx +26 -0
  469. package/src/components/app-gate/NotFoundRoute.tsx +20 -0
  470. package/src/components/app-gate/PendingInvitations.tsx +134 -0
  471. package/src/components/app-gate/ServiceError.tsx +27 -0
  472. package/src/components/app-gate/index.ts +2 -0
  473. package/src/components/app-gate/sdk-route-elements.tsx +46 -0
  474. package/src/components/app-shell/AppShell.tsx +22 -0
  475. package/src/components/app-shell/AppShellRoutes.tsx +34 -0
  476. package/src/components/app-shell/GroupDatastores.tsx +28 -0
  477. package/src/components/app-shell/GroupRoute.tsx +34 -0
  478. package/src/components/app-shell/index.ts +2 -0
  479. package/src/components/authenticated-chat/index.tsx +1 -34
  480. package/src/components/chat-view/Chat.tsx +9 -3
  481. package/src/components/chat-view/MessageItem.tsx +10 -2
  482. package/src/components/chat-view/tool-part-rendering.ts +10 -1
  483. package/src/components/chip/index.tsx +8 -1
  484. package/src/components/embedded-chat/index.tsx +2 -1
  485. package/src/components/input/input-date-time.tsx +10 -3
  486. package/src/components/input/input-date.tsx +93 -21
  487. package/src/components/input/input-time.tsx +59 -26
  488. package/src/components/layouts/RouteLayout.tsx +11 -50
  489. package/src/components/layouts/Sidebar.tsx +21 -23
  490. package/src/components/plan-limits/PlanLimitsDialog.tsx +331 -0
  491. package/src/components/plan-limits/index.tsx +3 -0
  492. package/src/components/plan-limits/plan-limits-client.ts +71 -0
  493. package/src/components/plan-limits/plan-limits-model.ts +180 -0
  494. package/src/components/plan-limits/plan-limits-save.ts +68 -0
  495. package/src/components/planning/PlanLimitsAction.tsx +44 -0
  496. package/src/components/slider/index.tsx +2 -1
  497. package/src/datastore-picker/datastore-picker-rows.ts +36 -20
  498. package/src/hooks/use-action-plans-list.ts +20 -12
  499. package/src/hooks/use-activity-feed.ts +30 -14
  500. package/src/hooks/use-entity.ts +11 -6
  501. package/src/hooks/use-manual-actions.ts +11 -6
  502. package/src/hooks/use-unsaved-changes-warning.ts +12 -0
  503. package/src/hooks/useAuth.ts +5 -3
  504. package/src/hooks/useChatPanelSync.ts +2 -3
  505. package/src/hooks/useDatastoreSelection.ts +10 -4
  506. package/src/hooks/useExecuteAction.ts +2 -0
  507. package/src/hooks/useLoginRedirect.ts +66 -0
  508. package/src/hooks/usePlanLimits.ts +97 -0
  509. package/src/ldo-ui.ts +1 -0
  510. package/src/lib/app-tools.ts +63 -0
  511. package/src/lib/chat-types.ts +5 -0
  512. package/src/lib/datastore-route-table.ts +9 -0
  513. package/src/lib/graphql-error.ts +7 -0
  514. package/src/lib/update-notice.ts +12 -2
  515. package/src/providers/ActiveChatProvider.tsx +8 -3
  516. package/src/providers/ActiveDatastoreProvider.tsx +179 -9
  517. package/src/providers/AuthContext.ts +1 -0
  518. package/src/providers/MantaClientProvider.tsx +8 -3
  519. package/src/providers/index.tsx +7 -4
  520. package/src/routes/activity/detail/ActivityDetailRoute.tsx +1 -10
  521. package/src/routes/activity/index.tsx +1 -10
  522. package/src/routes/chat/index.tsx +11 -47
  523. package/src/routes/data-collection/index.tsx +1 -11
  524. package/src/routes/data-explorer/components/DataExplorerLayout.tsx +1 -11
  525. package/src/routes/data-explorer/components/class-detail/UsedByRules.tsx +2 -2
  526. package/src/routes/datastores/index.tsx +3 -9
  527. package/src/routes/explain/index.tsx +1 -11
  528. package/src/routes/integrations/components/connect-forms/DashConnectForm.tsx +0 -1
  529. package/src/routes/integrations/components/connect-forms/GoogleAdsConnectForm.tsx +0 -1
  530. package/src/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.tsx +0 -1
  531. package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +0 -1
  532. package/src/routes/integrations/components/connect-forms/InferalCredentialConnectForm.tsx +5 -3
  533. package/src/routes/integrations/components/connect-forms/KlaviyoConnectForm.tsx +0 -1
  534. package/src/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.tsx +0 -1
  535. package/src/routes/integrations/components/connect-forms/OAuthSetupConnectForm.tsx +7 -7
  536. package/src/routes/integrations/components/connect-forms/TriplewhaleConnectForm.tsx +0 -1
  537. package/src/routes/integrations/components/connect-forms/WoocommerceConnectForm.tsx +0 -1
  538. package/src/routes/integrations/types.ts +22 -6
  539. package/src/routes/memories/components/DateValueInput.tsx +72 -0
  540. package/src/routes/memories/components/EntityValuePicker.tsx +132 -0
  541. package/src/routes/memories/components/FieldLabel.tsx +49 -0
  542. package/src/routes/memories/components/ImportanceSlider.tsx +5 -1
  543. package/src/routes/memories/components/MemoriesFilters.tsx +2 -2
  544. package/src/routes/memories/components/MemoriesPanel.tsx +7 -3
  545. package/src/routes/memories/components/MemoriesTabPanel.tsx +2 -2
  546. package/src/routes/memories/components/MemoryActions.tsx +26 -2
  547. package/src/routes/memories/components/MemoryFields.tsx +75 -12
  548. package/src/routes/memories/components/MemoryFormDialog.tsx +305 -199
  549. package/src/routes/memories/components/MemoryPropertyFields.tsx +288 -0
  550. package/src/routes/memories/components/RuleDraftDialog.tsx +35 -0
  551. package/src/routes/memories/components/SchemasTab.tsx +481 -118
  552. package/src/routes/memories/components/badges.tsx +16 -4
  553. package/src/routes/memories/hooks/useMemoryColumns.tsx +69 -35
  554. package/src/routes/memories/index.tsx +125 -51
  555. package/src/routes/memories/memory-mutation-input.ts +5 -2
  556. package/src/routes/memories/memory-property-values.ts +83 -0
  557. package/src/routes/memories/schemas/AllowedValuesField.tsx +188 -0
  558. package/src/routes/memories/schemas/MemorySchemaPage.tsx +476 -0
  559. package/src/routes/memories/schemas/SchemaChangeReviewDialog.tsx +290 -0
  560. package/src/routes/memories/schemas/SchemaConfirmDialog.tsx +62 -0
  561. package/src/routes/memories/schemas/SchemaDetailPage.tsx +373 -0
  562. package/src/routes/memories/schemas/SchemaEditorForm.tsx +990 -0
  563. package/src/routes/memories/schemas/SchemaTemplatesDialog.tsx +81 -0
  564. package/src/routes/memories/schemas/ValueTypeSelect.tsx +37 -0
  565. package/src/routes/memories/schemas/schema-form.ts +360 -0
  566. package/src/routes/memories/schemas/schema-impact.ts +66 -0
  567. package/src/routes/memories/schemas/schema-route.ts +30 -0
  568. package/src/routes/memories/schemas/schema-rule-context.ts +103 -0
  569. package/src/routes/memories/schemas/schema-table.ts +54 -0
  570. package/src/routes/memories/schemas/useMemorySchemaMutations.ts +49 -0
  571. package/src/routes/memories/schemas/useSchemaChangeReview.ts +238 -0
  572. package/src/routes/memories/schemas/useSchemaLifecycle.tsx +151 -0
  573. package/src/routes/memories/schemas/useSchemasTab.ts +119 -0
  574. package/src/routes/plans/index.tsx +3 -14
  575. package/src/routes/rules/components/CreateRuleChatModal.tsx +46 -22
  576. package/src/routes/rules/components/RuleValueControls.tsx +3 -35
  577. package/src/routes/rules/components/rule-value-input.ts +34 -0
  578. package/src/routes/rules/components/rules.utils.ts +25 -3
  579. package/src/routes/rules/pages.ts +5 -1
  580. package/src/shared/graph-derived-queries.ts +6 -0
  581. package/src/themes/manta-dark.css +4 -0
  582. package/src/worker/index.ts +175 -0
  583. package/src/worker/policy.ts +62 -0
  584. package/src/worker/proxy.ts +101 -0
  585. package/src/worker/session.ts +111 -0
@@ -2,13 +2,13 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  import { GQLMemoryScope } from "@manta-eu/client";
3
3
  import { needsTrustReview } from "@manta-eu/client/shared/memory-preload-gate";
4
4
  import { isPresent } from "@manta-eu/lib/present";
5
- import { BadgeCheck, EllipsisIcon, MoveRight, Pencil, Trash2, Undo2 } from "lucide-react";
5
+ import { BadgeCheck, EllipsisIcon, FileCode2, MoveRight, Pencil, Trash2, Undo2, Unlink } from "lucide-react";
6
6
  import { useState } from "react";
7
7
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "#components/alert-dialog/index";
8
8
  import { Button } from "#components/button/index";
9
9
  import { Dropdown, DropdownContent, DropdownGroup, DropdownItem, DropdownTrigger } from "#components/dropdown/index";
10
10
  export function MemoryActions(props) {
11
- const { memory, canManageSharedMemories, onEdit, onDelete, onMove, onRestore, onReconfirm } = props;
11
+ const { memory, canManageSharedMemories, onEdit, onDelete, onMove, onRestore, onReconfirm, onUndoSchemaAssignment, onWriteRule, } = props;
12
12
  const [confirmOpen, setConfirmOpen] = useState(false);
13
13
  const isRealm = memory.scope === GQLMemoryScope.Company;
14
14
  if (isPresent(memory.supersededBy)) {
@@ -18,7 +18,7 @@ export function MemoryActions(props) {
18
18
  return (_jsx("div", { className: "text-right", onClick: (e) => e.stopPropagation(), children: _jsxs(Button, { variant: "tertiary", size: "sm", rounded: "lg", onClick: () => onRestore?.(memory.iri), className: "gap-1.5", children: [_jsx(Undo2, { size: 14 }), "Restore"] }) }));
19
19
  }
20
20
  if (!isRealm || canManageSharedMemories) {
21
- return (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-right", onClick: (e) => e.stopPropagation(), children: _jsxs(Dropdown, { children: [_jsx(DropdownTrigger, { asChild: true, children: _jsx(Button, { variant: "tertiary", iconOnly: true, icon: EllipsisIcon, "aria-label": "Actions" }) }), _jsx(DropdownContent, { align: "end", className: "z-60 w-44", children: _jsxs(DropdownGroup, { children: [_jsxs(DropdownItem, { onSelect: () => onEdit(memory), children: [_jsx(Pencil, { size: 16 }), "Edit"] }), onReconfirm && needsTrustReview(memory) && (_jsxs(DropdownItem, { onSelect: () => onReconfirm(memory.iri), children: [_jsx(BadgeCheck, { size: 16 }), "Reconfirm"] })), onMove && canManageSharedMemories && (_jsxs(DropdownItem, { onSelect: () => onMove(memory), children: [_jsx(MoveRight, { size: 16 }), "Move to\u2026"] })), _jsxs(DropdownItem, { onSelect: () => setConfirmOpen(true), children: [_jsx(Trash2, { size: 16, className: "text-error-foreground" }), "Delete"] })] }) })] }) }), _jsx(AlertDialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete memory?" }), _jsxs(AlertDialogDescription, { children: ["\"", memory.label, "\" will be permanently deleted."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", onClick: () => onDelete(memory.iri), children: "Delete" })] })] }) })] }));
21
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-right", onClick: (e) => e.stopPropagation(), children: _jsxs(Dropdown, { children: [_jsx(DropdownTrigger, { asChild: true, children: _jsx(Button, { variant: "tertiary", iconOnly: true, icon: EllipsisIcon, "aria-label": "Actions" }) }), _jsx(DropdownContent, { align: "end", className: "z-60 w-44", children: _jsxs(DropdownGroup, { children: [_jsxs(DropdownItem, { onSelect: () => onEdit(memory), children: [_jsx(Pencil, { size: 16 }), "Edit"] }), onReconfirm && needsTrustReview(memory) && (_jsxs(DropdownItem, { onSelect: () => onReconfirm(memory.iri), children: [_jsx(BadgeCheck, { size: 16 }), "Reconfirm"] })), onUndoSchemaAssignment && isPresent(memory.schemaAssignment) && (_jsxs(DropdownItem, { onSelect: () => onUndoSchemaAssignment(memory.iri), children: [_jsx(Unlink, { size: 16 }), "Remove auto schema"] })), onWriteRule && isRealm && isPresent(memory.memorySubclass) && (_jsxs(DropdownItem, { onSelect: () => onWriteRule(memory), children: [_jsx(FileCode2, { size: 16 }), "Write rule"] })), onMove && canManageSharedMemories && (_jsxs(DropdownItem, { onSelect: () => onMove(memory), children: [_jsx(MoveRight, { size: 16 }), "Move to\u2026"] })), _jsxs(DropdownItem, { onSelect: () => setConfirmOpen(true), children: [_jsx(Trash2, { size: 16, className: "text-error-foreground" }), "Delete"] })] }) })] }) }), _jsx(AlertDialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete memory?" }), _jsxs(AlertDialogDescription, { children: ["\"", memory.label, "\" will be permanently deleted."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", onClick: () => onDelete(memory.iri), children: "Delete" })] })] }) })] }));
22
22
  }
23
23
  return null;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryActions.js","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryActions.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryActions.js","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryActions.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
- import { GQLMemoryKind, type GQLMemorySchema } from "@manta-eu/client";
1
+ import { GQLMemoryKind, type GQLMemorySchemaFieldsFragment } from "@manta-eu/client";
2
2
  import type { ReactNode } from "react";
3
+ import { type MemoryPropertyValues } from "../memory-property-values.js";
3
4
  export type FormErrors = Partial<Record<"label" | "description" | "teams" | "memoryTrustedUntil", string>>;
4
5
  export type MemoryFormState = {
5
6
  label: string;
6
7
  description: string | null;
7
8
  kind: GQLMemoryKind;
8
9
  memorySubclass: string | null;
9
- customProperties: Record<string, string>;
10
+ customProperties: MemoryPropertyValues;
10
11
  memoryValidUntil: string | null;
11
12
  memoryTrustedUntil: string | null;
12
13
  teams: string[];
@@ -18,15 +19,26 @@ export type MemoryFieldsProps = {
18
19
  errors: FormErrors;
19
20
  isTeam: boolean;
20
21
  canManageSharedMemories?: boolean;
21
- schemas?: GQLMemorySchema[];
22
+ schemas?: GQLMemorySchemaFieldsFragment[];
22
23
  onChange: (next: Partial<MemoryFormState>) => void;
23
24
  descriptionPlaceholder?: string;
24
25
  labelPlaceholder?: string;
25
26
  autoFocus?: boolean;
26
27
  onEditProperties?: () => void;
28
+ prefillSchemaDefaults?: boolean;
29
+ storedSchemaValues?: StoredSchemaValues;
27
30
  filledPropertyCount?: number;
28
31
  totalPropertyCount?: number;
32
+ hasPropertyErrors?: boolean;
29
33
  children?: ReactNode;
30
34
  };
35
+ export type StoredSchemaValues = {
36
+ schemaIri: string | null;
37
+ values: MemoryPropertyValues;
38
+ };
39
+ export declare function schemaSelection(current: Pick<MemoryFormState, "memorySubclass">, schema: GQLMemorySchemaFieldsFragment | null, options: {
40
+ prefillDefaults: boolean;
41
+ stored?: StoredSchemaValues;
42
+ }): Partial<MemoryFormState>;
31
43
  export declare function MemoryFields(props: MemoryFieldsProps): import("react/jsx-runtime").JSX.Element;
32
44
  //# sourceMappingURL=MemoryFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryFields.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryFields.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAwBvC,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3G,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAUvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACnD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAyHpD"}
1
+ {"version":3,"file":"MemoryFields.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryFields.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAyB,KAAK,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAI5G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAyBxF,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3G,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAUvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACnD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAI5F,wBAAgB,eAAe,CAC7B,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAChD,MAAM,EAAE,6BAA6B,GAAG,IAAI,EAC5C,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAAE,GACjE,OAAO,CAAC,eAAe,CAAC,CAY1B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA6JpD"}
@@ -1,8 +1,10 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { GQLMemoryKind } from "@manta-eu/client";
2
+ import { GQLMemoryKind, GQLMemorySchemaStatus } from "@manta-eu/client";
3
3
  import { formatEntityName } from "@manta-eu/client/shared/rdf-namespaces";
4
4
  import { isPresent } from "@manta-eu/lib/present";
5
5
  import { ChevronDown, ChevronRight } from "lucide-react";
6
+ import { propertyDefaults } from "../memory-property-values.js";
7
+ import { FieldLabel } from "./FieldLabel.js";
6
8
  import { ImportanceSlider } from "./ImportanceSlider.js";
7
9
  import { TeamPicker } from "./TeamPicker.js";
8
10
  import { Button } from "#components/button/index";
@@ -21,11 +23,38 @@ export const emptyForm = {
21
23
  teams: [],
22
24
  importance: 3,
23
25
  };
26
+ // Selecting a schema on a new memory takes its defaults; an edit keeps what the memory already has, and going back
27
+ // to the memory's own schema brings its stored values back rather than leaving them blank but still saved.
28
+ export function schemaSelection(current, schema, options) {
29
+ const { prefillDefaults, stored } = options;
30
+ if ((schema?.iri ?? null) === (current.memorySubclass ?? null))
31
+ return {};
32
+ if (schema === null)
33
+ return { memorySubclass: null, customProperties: {} };
34
+ const values = stored?.schemaIri === schema.iri ? { ...stored.values } : prefillDefaults ? propertyDefaults(schema) : {};
35
+ return {
36
+ memorySubclass: schema.iri,
37
+ customProperties: values,
38
+ ...(prefillDefaults && schema.defaultMemoryKind ? { kind: schema.defaultMemoryKind } : {}),
39
+ ...(prefillDefaults && schema.defaultImportance != null ? { importance: schema.defaultImportance } : {}),
40
+ };
41
+ }
24
42
  export function MemoryFields(props) {
25
- const { form, errors, isTeam, canManageSharedMemories = false, schemas, onChange, descriptionPlaceholder, labelPlaceholder, autoFocus = false, onEditProperties, filledPropertyCount = 0, totalPropertyCount = 0, children, } = props;
26
- return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "typography-small", children: "Importance" }), _jsx(ImportanceSlider, { value: form.importance, onChange: (v) => onChange({ importance: v }) })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "typography-small", children: "Kind" }), _jsxs(Select, { value: form.kind, onValueChange: (v) => onChange({ kind: v }), children: [_jsx(SelectTrigger, { label: "Kind", id: "memory-kind", hiddenLabel: true, children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: GQLMemoryKind.Preference, children: "Preference" }), _jsx(SelectItem, { value: GQLMemoryKind.Fact, children: "Fact" }), _jsx(SelectItem, { value: GQLMemoryKind.Objective, children: "Objective" }), _jsx(SelectItem, { value: GQLMemoryKind.Context, children: "Context" })] })] })] }), isPresent(schemas) && (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "typography-small", children: "Schema" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Combobox, { children: [_jsx(ComboboxTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn(createSelectClassName({ size: "base" }), "flex-1 min-w-0"), children: [_jsx("span", { className: cn("flex-1 min-w-0 truncate text-left", !form.memorySubclass && "text-placeholder-foreground"), children: form.memorySubclass
27
- ? (schemas.find((s) => s.iri === form.memorySubclass)?.label ??
43
+ const { form, errors, isTeam, canManageSharedMemories = false, schemas, onChange, descriptionPlaceholder, labelPlaceholder, autoFocus = false, onEditProperties, prefillSchemaDefaults = false, storedSchemaValues, filledPropertyCount = 0, totalPropertyCount = 0, hasPropertyErrors = false, children, } = props;
44
+ const pickable = (schemas ?? []).filter((schema) => schema.status === GQLMemorySchemaStatus.Active || schema.iri === form.memorySubclass);
45
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(FieldLabel, { label: "Importance", hint: "How much weight the agent gives this memory. High and Critical are for hard constraints and explicit goals. Disabled keeps it out of conversations but doesn't delete it." }), _jsx(ImportanceSlider, { value: form.importance, onChange: (v) => onChange({ importance: v }) })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(FieldLabel, { label: "Kind", hint: "What sort of memory this is. The agent groups memories by kind when it loads them into a conversation, so pick the one that fits best." }), _jsxs(Select, { value: form.kind, onValueChange: (v) => onChange({ kind: v }), children: [_jsx(SelectTrigger, { label: "Kind", id: "memory-kind", hiddenLabel: true, children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: GQLMemoryKind.Preference, children: "Preference" }), _jsx(SelectItem, { value: GQLMemoryKind.Fact, children: "Fact" }), _jsx(SelectItem, { value: GQLMemoryKind.Objective, children: "Objective" }), _jsx(SelectItem, { value: GQLMemoryKind.Context, children: "Context" })] })] })] }), isPresent(pickable) && (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "typography-small", children: "Schema" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Combobox, { children: [_jsx(ComboboxTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn(createSelectClassName({ size: "base" }), "flex-1 min-w-0"), children: [_jsx("span", { className: cn("flex-1 min-w-0 truncate text-left", !form.memorySubclass && "text-placeholder-foreground"), children: form.memorySubclass
46
+ ? (pickable.find((s) => s.iri === form.memorySubclass)?.label ??
28
47
  formatEntityName(form.memorySubclass))
29
- : "Default" }), _jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground" })] }) }), _jsxs(ComboboxContent, { align: "start", className: "w-[var(--radix-popover-trigger-width,320px)]", children: [_jsx(ComboboxInput, { placeholder: "Search schemas\u2026" }), _jsxs(ComboboxList, { children: [_jsx(ComboboxEmpty, { children: "No schemas found" }), _jsx(ComboboxItem, { value: "none", selected: form.memorySubclass === null, onSelect: () => onChange({ memorySubclass: null, customProperties: {} }), children: "Default" }), schemas.map((schema) => (_jsx(ComboboxItem, { value: schema.label, selected: form.memorySubclass === schema.iri, onSelect: () => onChange({ memorySubclass: schema.iri, customProperties: {} }), children: schema.label }, schema.iri)))] })] })] }), onEditProperties && totalPropertyCount > 0 && (_jsxs(Button, { type: "button", variant: "tertiary", size: "base", onClick: onEditProperties, className: "shrink-0", children: [filledPropertyCount > 0 ? `${filledPropertyCount}/${totalPropertyCount} filled` : "Edit properties", _jsx(ChevronRight, { className: "size-3.5" })] }))] })] })), _jsx(Input, { id: "memory-label", label: "Label", placeholder: labelPlaceholder, value: form.label, onChange: (e) => onChange({ label: e.target.value }), error: errors.label }), _jsx(Textarea, { id: "memory-description", label: "Description", placeholder: descriptionPlaceholder, value: form.description ?? "", onChange: (e) => onChange({ description: e.target.value }), minRows: 3, maxRows: 8, autoFocus: autoFocus, error: errors.description }), children, isTeam && (_jsx(TeamPicker, { selected: form.teams, onChange: (teams) => onChange({ teams }), canManageSharedMemories: canManageSharedMemories, error: errors.teams }))] }));
48
+ : "Default" }), _jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground" })] }) }), _jsxs(ComboboxContent, { align: "start", className: "w-[var(--radix-popover-trigger-width,320px)]", children: [_jsx(ComboboxInput, { placeholder: "Search schemas\u2026" }), _jsxs(ComboboxList, { children: [_jsx(ComboboxEmpty, { children: "No schemas found" }), _jsx(ComboboxItem, { value: "none", selected: form.memorySubclass === null, onSelect: () => onChange(schemaSelection(form, null, {
49
+ prefillDefaults: prefillSchemaDefaults,
50
+ stored: storedSchemaValues,
51
+ })), children: "Default" }), pickable.map((schema) => (_jsx(ComboboxItem, { value: schema.label, selected: form.memorySubclass === schema.iri, onSelect: () => onChange(schemaSelection(form, schema, {
52
+ prefillDefaults: prefillSchemaDefaults,
53
+ stored: storedSchemaValues,
54
+ })), children: schema.label }, schema.iri)))] })] })] }), onEditProperties && totalPropertyCount > 0 && (_jsxs(Button, { type: "button", variant: "tertiary", size: "base", onClick: onEditProperties, className: cn("shrink-0", hasPropertyErrors && "text-error-foreground"), children: [hasPropertyErrors
55
+ ? "Fix properties"
56
+ : filledPropertyCount > 0
57
+ ? `${filledPropertyCount}/${totalPropertyCount} filled`
58
+ : "Edit properties", _jsx(ChevronRight, { className: "size-3.5" })] }))] })] })), _jsx(Input, { id: "memory-label", label: "Label", placeholder: labelPlaceholder, value: form.label, onChange: (e) => onChange({ label: e.target.value }), error: errors.label }), _jsx(Textarea, { id: "memory-description", label: "Description", placeholder: descriptionPlaceholder, value: form.description ?? "", onChange: (e) => onChange({ description: e.target.value }), minRows: 3, maxRows: 8, autoFocus: autoFocus, error: errors.description }), children, isTeam && (_jsx(TeamPicker, { selected: form.teams, onChange: (teams) => onChange({ teams }), canManageSharedMemories: canManageSharedMemories, error: errors.teams }))] }));
30
59
  }
31
60
  //# sourceMappingURL=MemoryFields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryFields.js","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryFields.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryFields.js","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryFields.tsx"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
- import { GQLMemoryScope, type GQLMemory, type GQLMemorySchema } from "@manta-eu/client";
1
+ import { GQLMemoryScope, type GQLMemory, type GQLMemoryPropertyProblem, type GQLMemorySchemaFieldsFragment } from "@manta-eu/client";
2
2
  import { type MemoryFormState } from "./MemoryFields.js";
3
+ export type MemorySaveResult = {
4
+ propertyErrors?: readonly GQLMemoryPropertyProblem[] | null;
5
+ } | void;
3
6
  export type MemoryFormDialogProps = {
4
7
  open: boolean;
5
8
  onOpenChange: (open: boolean) => void;
6
9
  scope: GQLMemoryScope;
7
10
  initial?: GQLMemory;
8
- onSave: (form: MemoryFormState, supersedesMemoryIris?: string[]) => Promise<void>;
11
+ onSave: (form: MemoryFormState, supersedesMemoryIris?: string[]) => Promise<MemorySaveResult>;
9
12
  isSaving: boolean;
10
13
  canManageSharedMemories?: boolean;
11
- schemas?: GQLMemorySchema[];
14
+ schemas?: GQLMemorySchemaFieldsFragment[];
12
15
  currentUserId?: string;
13
16
  };
14
17
  export declare function MemoryFormDialog(props: MemoryFormDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryFormDialog.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryFormDialog.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA6B,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAUnH,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAuBhG,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAsGF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAkf5D"}
1
+ {"version":3,"file":"MemoryFormDialog.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/components/MemoryFormDialog.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAEd,KAAK,SAAS,EACd,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EACnC,MAAM,kBAAkB,CAAC;AA2B1B,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAwBhG,MAAM,MAAM,gBAAgB,GAAG;IAAE,cAAc,CAAC,EAAE,SAAS,wBAAwB,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC;AAEtG,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9F,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAgNF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAwd5D"}
@@ -1,38 +1,29 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { GQLMemoryScope } from "@manta-eu/client";
3
- import { formatEntityName } from "@manta-eu/client/shared/rdf-namespaces";
2
+ import { GQLMemoryScope, } from "@manta-eu/client";
3
+ import { inferVolatility, maxImportanceForVolatility, resolveTrustedUntil, } from "@manta-eu/client/shared/memory-volatility";
4
4
  import { humanCount } from "@manta-eu/lib/humanize";
5
5
  import { isPresent } from "@manta-eu/lib/present";
6
6
  import { addYears, endOfDay, format, startOfTomorrow } from "date-fns";
7
7
  import { CalendarIcon, ChevronLeft, X } from "lucide-react";
8
- import { useCallback, useEffect, useRef, useState } from "react";
8
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
9
9
  import { useConflictCheck } from "../hooks/useConflictCheck.js";
10
10
  import { validateMemoryForm } from "../memory-form-validation.js";
11
+ import { changedPropertyValues, cleanPropertyValues, filledPropertyCount, missingRequiredProperties, propertyErrorsByPath, propertyValuesFromMemory, writableProperties, } from "../memory-property-values.js";
11
12
  import { ConflictMemoryCard } from "./ConflictMemoryCard.js";
13
+ import { FieldLabel } from "./FieldLabel.js";
14
+ import { importanceLabel } from "./ImportanceSlider.js";
12
15
  import { MemoryFields, emptyForm } from "./MemoryFields.js";
16
+ import { MemoryPropertyFields } from "./MemoryPropertyFields.js";
17
+ import { Banner } from "#components/banner/index";
13
18
  import { Button } from "#components/button/index";
14
19
  import { Calendar } from "#components/calendar/index";
15
- import { Input } from "#components/input/index";
16
20
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "#components/modal/index";
17
21
  import { Popover, PopoverContent, PopoverTrigger } from "#components/popover/index";
18
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, createSelectClassName, } from "#components/select/index";
22
+ import { createSelectClassName, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "#components/select/index";
19
23
  import { cn } from "#lib/utils";
20
24
  function normalizeDesc(s) {
21
25
  return s.trim().replace(/\s+/g, " ");
22
26
  }
23
- function shortDatatype(iri) {
24
- if (iri.endsWith("#string"))
25
- return "text";
26
- if (iri.endsWith("#decimal"))
27
- return "decimal";
28
- if (iri.endsWith("#integer"))
29
- return "integer";
30
- if (iri.endsWith("#boolean"))
31
- return "boolean";
32
- if (iri.endsWith("#anyURI"))
33
- return "url";
34
- return formatEntityName(iri);
35
- }
36
27
  function initialSubclass(memory) {
37
28
  if (!memory.memorySubclass)
38
29
  return null;
@@ -44,19 +35,59 @@ function buildFormFromMemory(memory) {
44
35
  description: memory.description ?? null,
45
36
  kind: memory.kind,
46
37
  memorySubclass: initialSubclass(memory),
47
- customProperties: memory.customProperties ?? {},
38
+ customProperties: propertyValuesFromMemory(memory),
48
39
  memoryValidUntil: memory.memoryValidUntil ? new Date(memory.memoryValidUntil).toISOString() : null,
49
40
  memoryTrustedUntil: memory.memoryTrustedUntil ? new Date(memory.memoryTrustedUntil).toISOString() : null,
50
41
  teams: memory.teams,
51
42
  importance: memory.importance,
52
43
  };
53
44
  }
54
- function MemoryDateField(props) {
55
- const { id, label, hint, placeholder, value, onChange, notAfter, error } = props;
45
+ function DatePickerControl(props) {
46
+ const { id, placeholder, value, onChange, notAfter, describedBy, invalid } = props;
56
47
  const selected = value ? new Date(value) : undefined;
57
48
  const latest = notAfter ? new Date(notAfter) : undefined;
49
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", id: id, "aria-invalid": invalid ? true : undefined, "aria-describedby": describedBy, className: cn(createSelectClassName({ size: "base" }), "flex-1 min-w-0 gap-2"), children: [_jsx(CalendarIcon, { className: "size-4 shrink-0 text-muted-foreground" }), _jsx("span", { className: cn("flex-1 min-w-0 truncate text-left", !value && "text-placeholder-foreground"), children: selected ? format(selected, "MMM d, yyyy") : placeholder })] }) }), _jsx(PopoverContent, { align: "start", className: "w-auto border-0 bg-transparent p-0 shadow-none", children: _jsx(Calendar, { mode: "single", captionLayout: "dropdown", startMonth: new Date(), endMonth: latest ?? addYears(new Date(), 10), selected: selected, defaultMonth: selected, disabled: latest ? { before: startOfTomorrow(), after: latest } : { before: startOfTomorrow() }, onSelect: (date) => onChange(date ? endOfDay(date).toISOString() : null) }) })] }), value && (_jsxs(Button, { type: "button", variant: "tertiary", size: "base", onClick: () => onChange(null), className: "shrink-0", children: [_jsx(X, { className: "size-3.5" }), "Clear"] }))] }));
50
+ }
51
+ function MemoryDateField(props) {
52
+ const { id, label, hint, placeholder, value, onChange, notAfter, error } = props;
58
53
  const errorId = `${id}-error`;
59
- return (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { htmlFor: id, className: "typography-small", children: label }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", id: id, "aria-invalid": error ? true : undefined, "aria-describedby": error ? errorId : undefined, className: cn(createSelectClassName({ size: "base" }), "flex-1 min-w-0 gap-2"), children: [_jsx(CalendarIcon, { className: "size-4 shrink-0 text-muted-foreground" }), _jsx("span", { className: cn("flex-1 min-w-0 truncate text-left", !value && "text-placeholder-foreground"), children: selected ? format(selected, "MMM d, yyyy") : placeholder })] }) }), _jsx(PopoverContent, { align: "start", className: "w-auto border-0 bg-transparent p-0 shadow-none", children: _jsx(Calendar, { mode: "single", captionLayout: "dropdown", startMonth: new Date(), endMonth: latest ?? addYears(new Date(), 10), selected: selected, defaultMonth: selected, disabled: latest ? { before: startOfTomorrow(), after: latest } : { before: startOfTomorrow() }, onSelect: (date) => onChange(date ? endOfDay(date).toISOString() : null) }) })] }), value && (_jsxs(Button, { type: "button", variant: "tertiary", size: "base", onClick: () => onChange(null), className: "shrink-0", children: [_jsx(X, { className: "size-3.5" }), "Clear"] }))] }), _jsx("p", { className: "typography-small text-muted-foreground", children: hint }), error && (_jsx("p", { id: errorId, className: "typography-small text-error-foreground", children: error }))] }));
54
+ const hintId = `${id}-hint`;
55
+ return (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(FieldLabel, { label: label, hint: hint, htmlFor: id }), _jsx("span", { id: hintId, className: "sr-only", children: hint }), _jsx(DatePickerControl, { id: id, placeholder: placeholder, value: value, notAfter: notAfter, invalid: isPresent(error), describedBy: error ? `${hintId} ${errorId}` : hintId, onChange: onChange }), error && (_jsx("p", { id: errorId, className: "typography-small text-error-foreground", children: error }))] }));
56
+ }
57
+ const trustPresets = [
58
+ { value: "stable", label: "Stable · trusted indefinitely" },
59
+ { value: "slow", label: "Changes slowly · 90 days" },
60
+ { value: "volatile", label: "Changes often · 7 days" },
61
+ { value: "date", label: "Pick a date" },
62
+ ];
63
+ const levelWording = {
64
+ stable: "is stable",
65
+ slow: "changes slowly",
66
+ volatile: "changes often",
67
+ };
68
+ function isTrustPreset(value) {
69
+ return trustPresets.some((preset) => preset.value === value);
70
+ }
71
+ // The dialog keeps the chosen preset, since this field unmounts whenever the dialog shows another view.
72
+ function TrustedUntilField(props) {
73
+ const { value, validUntil, importance, error, onPresetChange: setPreset, onChange } = props;
74
+ const preset = props.preset ?? (value ? "date" : "stable");
75
+ const level = preset === "date" ? inferVolatility(value, new Date()) : preset;
76
+ const cap = maxImportanceForVolatility(level);
77
+ const hint = "Stops pre-loading after this date but stays searchable. Use it for anything that drifts.";
78
+ const errorId = "memory-trust-horizon-error";
79
+ function choose(next) {
80
+ if (!isTrustPreset(next))
81
+ return;
82
+ setPreset(next);
83
+ if (next === "date")
84
+ return;
85
+ onChange(next === "stable" ? null : resolveTrustedUntil(next, validUntil));
86
+ }
87
+ return (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(FieldLabel, { label: "Trusted until", hint: hint, htmlFor: "memory-trust-preset" }), _jsxs(Select, { value: preset, onValueChange: choose, children: [_jsx(SelectTrigger, { label: "Trusted until", id: "memory-trust-preset", hiddenLabel: true, children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: trustPresets.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] }), preset !== "stable" && (_jsx(DatePickerControl, { id: "memory-trust-horizon", placeholder: "Pick a date", value: value, notAfter: validUntil, invalid: isPresent(error), describedBy: error ? errorId : undefined, onChange: (next) => {
88
+ setPreset(next === null ? "stable" : "date");
89
+ onChange(next);
90
+ } })), importance > cap && (_jsxs("p", { className: "typography-small text-muted-foreground", children: ["The agent keeps a memory that ", levelWording[level], " at ", importanceLabel(cap), " importance or lower."] })), error && (_jsx("p", { id: errorId, className: "typography-small text-error-foreground", children: error }))] }));
60
91
  }
61
92
  export function MemoryFormDialog(props) {
62
93
  const { open, onOpenChange, scope, initial, onSave, isSaving, canManageSharedMemories = false, schemas, currentUserId, } = props;
@@ -67,6 +98,9 @@ export function MemoryFormDialog(props) {
67
98
  const [errors, setErrors] = useState({});
68
99
  const [submitted, setSubmitted] = useState(false);
69
100
  const [view, setView] = useState("main");
101
+ const [propertyErrors, setPropertyErrors] = useState({});
102
+ const [trustPreset, setTrustPreset] = useState(null);
103
+ const initialValues = useMemo(() => (initial ? propertyValuesFromMemory(initial) : {}), [initial]);
70
104
  const [showDiscardConfirm, setShowDiscardConfirm] = useState(false);
71
105
  const [pendingConflicts, setPendingConflicts] = useState([]);
72
106
  const [pendingForm, setPendingForm] = useState(null);
@@ -93,9 +127,11 @@ export function MemoryFormDialog(props) {
93
127
  setErrors({});
94
128
  setSubmitted(false);
95
129
  setView("main");
130
+ setPropertyErrors({});
96
131
  originalDescRef.current = initial ? normalizeDesc(initial.description ?? "") : "";
97
132
  setShowDiscardConfirm(false);
98
133
  clearConflicts();
134
+ setTrustPreset(null);
99
135
  setConflictCheckTimedOut(false);
100
136
  }
101
137
  }, [open, initial]);
@@ -106,9 +142,23 @@ export function MemoryFormDialog(props) {
106
142
  form.memoryValidUntil !== (initial.memoryValidUntil ? new Date(initial.memoryValidUntil).toISOString() : null) ||
107
143
  form.memoryTrustedUntil !==
108
144
  (initial.memoryTrustedUntil ? new Date(initial.memoryTrustedUntil).toISOString() : null) ||
109
- JSON.stringify(form.customProperties) !==
110
- JSON.stringify(initial.customProperties ?? {})
145
+ JSON.stringify(cleanPropertyValues(form.customProperties)) !== JSON.stringify(cleanPropertyValues(initialValues))
111
146
  : isPresent(form.label) || isPresent(form.description) || isPresent(form.teams);
147
+ const selectedSchema = form.memorySubclass
148
+ ? (schemas?.find((schema) => schema.iri === form.memorySubclass) ?? null)
149
+ : null;
150
+ const schemaProperties = writableProperties(selectedSchema);
151
+ const submit = useCallback(async (next, supersedesMemoryIris) => {
152
+ const keepsSchema = isEdit && next.memorySubclass === initialSubclass(initial);
153
+ const outgoing = keepsSchema
154
+ ? { ...next, customProperties: changedPropertyValues(next.customProperties, initialValues) }
155
+ : next;
156
+ const result = await onSave(outgoing, supersedesMemoryIris);
157
+ if (result && isPresent(result.propertyErrors)) {
158
+ setPropertyErrors(propertyErrorsByPath(result.propertyErrors));
159
+ setView(isPresent(writableProperties(selectedSchema)) ? "properties" : "main");
160
+ }
161
+ }, [isEdit, initial, initialValues, onSave, selectedSchema]);
112
162
  const handleRequestClose = useCallback((nextOpen) => {
113
163
  if (!nextOpen && isDirty && !isSaving) {
114
164
  setShowDiscardConfirm(true);
@@ -123,9 +173,15 @@ export function MemoryFormDialog(props) {
123
173
  setErrors(validationErrors);
124
174
  return;
125
175
  }
176
+ const missing = missingRequiredProperties(selectedSchema, form.customProperties);
177
+ if (isPresent(missing)) {
178
+ setPropertyErrors(missing);
179
+ setView("properties");
180
+ return;
181
+ }
126
182
  const currentForm = form;
127
183
  if (isEdit && normalizeDesc(currentForm.description ?? "") === originalDescRef.current) {
128
- await onSave(currentForm);
184
+ await submit(currentForm);
129
185
  return;
130
186
  }
131
187
  const { conflicts, timedOut } = await check({
@@ -141,7 +197,7 @@ export function MemoryFormDialog(props) {
141
197
  return;
142
198
  }
143
199
  if (!isPresent(conflicts)) {
144
- await onSave(currentForm);
200
+ await submit(currentForm);
145
201
  return;
146
202
  }
147
203
  // Pre-check all conflicts; user can uncheck to keep any.
@@ -150,7 +206,7 @@ export function MemoryFormDialog(props) {
150
206
  setConflictChecked(new Set(conflicts.map((c) => c.iri)));
151
207
  setConflictMerging(new Set());
152
208
  setView("conflicts");
153
- }, [form, isEdit, initial, scope, isTeam, check, onSave]);
209
+ }, [form, isEdit, initial, scope, isTeam, check, submit, selectedSchema]);
154
210
  const toggleConflictChecked = useCallback((iri) => {
155
211
  setConflictChecked((prev) => {
156
212
  const next = new Set(prev);
@@ -203,8 +259,8 @@ export function MemoryFormDialog(props) {
203
259
  const saved = pendingForm;
204
260
  clearConflicts();
205
261
  setView("main");
206
- await onSave(saved, []);
207
- }, [pendingForm, clearConflicts, onSave]);
262
+ await submit(saved, []);
263
+ }, [pendingForm, clearConflicts, submit]);
208
264
  const handleConflictConfirmInline = useCallback(async () => {
209
265
  if (!pendingForm)
210
266
  return;
@@ -216,21 +272,14 @@ export function MemoryFormDialog(props) {
216
272
  }
217
273
  clearConflicts();
218
274
  setView("main");
219
- await onSave(finalForm, supersedesIris);
220
- }, [pendingForm, pendingConflicts, conflictChecked, conflictMerging, isTeam, clearConflicts, onSave]);
221
- const selectedSchema = form.memorySubclass ? (schemas?.find((s) => s.iri === form.memorySubclass) ?? null) : null;
222
- const schemaProperties = selectedSchema && isPresent(selectedSchema.properties)
223
- ? [...selectedSchema.properties].sort((a, b) => {
224
- if (a.required && !b.required)
225
- return -1;
226
- if (!a.required && b.required)
227
- return 1;
228
- return 0;
229
- })
230
- : [];
275
+ await submit(finalForm, supersedesIris);
276
+ }, [pendingForm, pendingConflicts, conflictChecked, conflictMerging, isTeam, clearConflicts, submit]);
231
277
  const hasProperties = isPresent(schemaProperties);
232
278
  const requiredPropertyCount = schemaProperties.filter((p) => p.required).length;
233
- const filledPropertyCount = schemaProperties.filter((p) => isPresent(form.customProperties[p.path])).length;
279
+ const writablePaths = new Set(schemaProperties.map((property) => property.path));
280
+ const otherPropertyErrors = Object.entries(propertyErrors)
281
+ .filter(([path]) => !writablePaths.has(path))
282
+ .map(([, message]) => message);
234
283
  const scopeLabel = isTeam ? "team" : isCompany ? "company" : "user";
235
284
  const titleText = isEdit
236
285
  ? `Edit ${scopeLabel} memory`
@@ -273,27 +322,24 @@ export function MemoryFormDialog(props) {
273
322
  return `Save & replace ${humanCount(conflictChecked.size, "memory")}`;
274
323
  return "Save & replace selected";
275
324
  }
276
- return (_jsx(Dialog, { open: open, onOpenChange: handleRequestClose, children: _jsxs(DialogContent, { className: "flex flex-col overflow-hidden", children: [view === "conflicts" ? (_jsxs(DialogHeader, { children: [_jsxs("button", { type: "button", onClick: handleConflictBack, className: "flex items-center gap-1 typography-small text-muted-foreground hover:text-default-foreground w-fit transition-colors mb-0.5", children: [_jsx(ChevronLeft, { className: "size-3.5" }), "Back to memory"] }), _jsx(DialogTitle, { text: "Similar memories found" }), _jsx(DialogDescription, { children: "The memory you're saving may replace the following existing memories. Select which ones to replace and they will be hidden and superseded by the new memory." })] })) : view === "properties" ? (_jsxs(DialogHeader, { children: [_jsxs("button", { type: "button", onClick: () => setView("main"), className: "flex items-center gap-1 typography-small text-muted-foreground hover:text-default-foreground w-fit transition-colors mb-0.5", children: [_jsx(ChevronLeft, { className: "size-3.5" }), "Back to memory"] }), _jsx(DialogTitle, { text: "Schema properties" }), _jsxs(DialogDescription, { children: [selectedSchema?.label, requiredPropertyCount > 0 ? ` · ${requiredPropertyCount} required` : "", ` · ${humanCount(schemaProperties.length, "property")}`] })] })) : (_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { text: titleText }), _jsx(DialogDescription, { children: getDescriptionText() })] })), _jsx("div", { className: "flex flex-col gap-3 flex-1 min-h-0 overflow-y-auto -mx-8 px-8 py-1", children: view === "conflicts" ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "text-left typography-small text-accent-foreground hover:underline w-fit", onClick: toggleAllConflicts, children: allConflictsChecked ? "Select none" : "Select all" }), pendingConflicts.map((conflict) => (_jsx(ConflictMemoryCard, { conflict: conflict, scope: scope, checked: conflictChecked.has(conflict.iri), onToggleChecked: () => toggleConflictChecked(conflict.iri), showMerge: isTeam, merging: conflictMerging.has(conflict.iri), onToggleMerge: () => toggleConflictMerge(conflict.iri), currentUserId: currentUserId }, conflict.iri)))] })) : view === "properties" ? (schemaProperties.map((prop) => {
277
- const localName = formatEntityName(prop.path);
278
- const value = form.customProperties[prop.path] ?? "";
279
- const isBoolean = prop.dataType === "http://www.w3.org/2001/XMLSchema#boolean";
280
- const isNumeric = prop.dataType === "http://www.w3.org/2001/XMLSchema#integer" ||
281
- prop.dataType === "http://www.w3.org/2001/XMLSchema#decimal";
282
- const hasSmallEnum = isPresent(prop.allowedValues) && prop.allowedValues.length <= 4;
283
- const hasLargeEnum = prop.allowedValues && prop.allowedValues.length > 4;
284
- function setPropValue(v) {
285
- setForm((prev) => ({
286
- ...prev,
287
- customProperties: { ...prev.customProperties, [prop.path]: v },
288
- }));
289
- }
290
- return (_jsxs("div", { className: "flex flex-col gap-2 rounded-lg bg-faint p-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("label", { htmlFor: hasLargeEnum || (!hasSmallEnum && !isBoolean) ? `prop-${localName}` : undefined, className: "typography-small-medium text-default-foreground flex-1", children: [prop.label, prop.required && _jsx("span", { className: "text-error-foreground ml-1", children: "*" })] }), _jsx("span", { className: "typography-tiny text-muted-foreground bg-card border border-muted-border rounded px-1.5 py-0.5 shrink-0", children: shortDatatype(prop.dataType) })] }), hasSmallEnum ? (_jsx("div", { className: "flex gap-1 flex-wrap", children: prop.allowedValues.map((v) => (_jsx(Button, { type: "button", variant: value === v ? "primary" : "tertiary", size: "sm", rounded: "md", onClick: () => setPropValue(v), children: v }, v))) })) : hasLargeEnum ? (_jsxs(Select, { value: value, onValueChange: setPropValue, children: [_jsx(SelectTrigger, { label: prop.label, id: `prop-${localName}`, hiddenLabel: true, children: _jsx(SelectValue, { placeholder: `Select ${prop.label.toLowerCase()}` }) }), _jsx(SelectContent, { children: prop.allowedValues.map((v) => (_jsx(SelectItem, { value: v, children: v }, v))) })] })) : isBoolean ? (_jsx("div", { className: "flex gap-1", children: ["true", "false"].map((v) => (_jsx(Button, { type: "button", variant: (value || "false") === v ? "primary" : "tertiary", size: "sm", rounded: "md", className: "flex-1", onClick: () => setPropValue(v), children: v === "true" ? "Yes" : "No" }, v))) })) : (_jsx(Input, { id: `prop-${localName}`, type: isNumeric ? "number" : "text", value: value, onChange: (e) => setPropValue(e.target.value), placeholder: `Enter ${prop.label.toLowerCase()}` }))] }, prop.path));
291
- })) : (_jsxs(MemoryFields, { form: form, errors: errors, isTeam: isTeam, canManageSharedMemories: canManageSharedMemories, schemas: schemas, onChange: (next) => setForm((prev) => ({ ...prev, ...next })), labelPlaceholder: isEdit ? "e.g. Target ROAS" : "Auto-generated from description", descriptionPlaceholder: getDescriptionPlaceholder(), autoFocus: !isEdit, onEditProperties: hasProperties ? () => setView("properties") : undefined, filledPropertyCount: filledPropertyCount, totalPropertyCount: schemaProperties.length, children: [_jsx(MemoryDateField, { id: "memory-expiry", label: "Valid until", hint: "No longer true after this date, so the agent stops using it. Nothing is deleted. Use it only for a real deadline.", placeholder: "Never expires", value: form.memoryValidUntil, onChange: (memoryValidUntil) => setForm((prev) => ({ ...prev, memoryValidUntil })) }), _jsx(MemoryDateField, { id: "memory-trust-horizon", label: "Trusted until", hint: "Stops pre-loading after this date but stays searchable. Use it for anything that drifts.", placeholder: "Trusted indefinitely", value: form.memoryTrustedUntil, notAfter: form.memoryValidUntil, error: errors.memoryTrustedUntil, onChange: (memoryTrustedUntil) => setForm((prev) => ({ ...prev, memoryTrustedUntil })) })] })) }), _jsx(DialogFooter, { children: view === "conflicts" ? (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "secondary", onClick: handleSaveWithoutSuperseding, className: "sm:mr-auto", disabled: isSaving, children: "Save & keep both" }), _jsx(Button, { onClick: handleConflictConfirmInline, disabled: conflictChecked.size === 0 || isSaving, children: getReplaceLabel() })] })) : view === "properties" ? (_jsx(Button, { onClick: () => setView("main"), children: "Done" })) : showDiscardConfirm ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "typography-small text-muted-foreground mr-auto", children: "Discard unsaved changes?" }), _jsx(Button, { variant: "tertiary", onClick: () => setShowDiscardConfirm(false), children: "Keep editing" }), _jsx(Button, { variant: "destructive", onClick: () => onOpenChange(false), children: "Discard" })] })) : conflictCheckTimedOut && pendingForm ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "typography-small text-muted-foreground mr-auto", children: "Conflict check timed out. Save without checking?" }), _jsx(Button, { variant: "tertiary", onClick: () => {
325
+ return (_jsx(Dialog, { open: open, onOpenChange: handleRequestClose, children: _jsxs(DialogContent, { className: "flex flex-col overflow-hidden", onOpenAutoFocus: (event) => {
326
+ event.preventDefault();
327
+ document.getElementById(isEdit ? "memory-label" : "memory-description")?.focus();
328
+ }, children: [view === "conflicts" ? (_jsxs(DialogHeader, { children: [_jsxs("button", { type: "button", onClick: handleConflictBack, className: "flex items-center gap-1 typography-small text-muted-foreground hover:text-default-foreground w-fit transition-colors mb-0.5", children: [_jsx(ChevronLeft, { className: "size-3.5" }), "Back to memory"] }), _jsx(DialogTitle, { text: "Similar memories found" }), _jsx(DialogDescription, { children: "The memory you're saving may replace the following existing memories. Select which ones to replace and they will be hidden and superseded by the new memory." })] })) : view === "properties" ? (_jsxs(DialogHeader, { children: [_jsxs("button", { type: "button", onClick: () => setView("main"), className: "flex items-center gap-1 typography-small text-muted-foreground hover:text-default-foreground w-fit transition-colors mb-0.5", children: [_jsx(ChevronLeft, { className: "size-3.5" }), "Back to memory"] }), _jsx(DialogTitle, { text: "Schema properties" }), _jsxs(DialogDescription, { children: [selectedSchema?.label, requiredPropertyCount > 0 ? ` · ${requiredPropertyCount} required` : "", ` · ${humanCount(schemaProperties.length, "property")}`] })] })) : (_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { text: titleText }), _jsx(DialogDescription, { children: getDescriptionText() })] })), _jsx("div", { className: "flex flex-col gap-3 flex-1 min-h-0 overflow-y-auto -mx-8 px-8 py-1", children: view === "conflicts" ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "text-left typography-small text-accent-foreground hover:underline w-fit", onClick: toggleAllConflicts, children: allConflictsChecked ? "Select none" : "Select all" }), pendingConflicts.map((conflict) => (_jsx(ConflictMemoryCard, { conflict: conflict, scope: scope, checked: conflictChecked.has(conflict.iri), onToggleChecked: () => toggleConflictChecked(conflict.iri), showMerge: isTeam, merging: conflictMerging.has(conflict.iri), onToggleMerge: () => toggleConflictMerge(conflict.iri), currentUserId: currentUserId }, conflict.iri)))] })) : view === "properties" ? (_jsxs(_Fragment, { children: [otherPropertyErrors.map((message) => (_jsx(Banner, { label: message, className: "shrink-0" }, message))), selectedSchema && (_jsx(MemoryPropertyFields, { schema: selectedSchema, values: form.customProperties, errors: propertyErrors, onChange: (path, values) => {
329
+ setForm((prev) => ({ ...prev, customProperties: { ...prev.customProperties, [path]: values } }));
330
+ setPropertyErrors((previous) => {
331
+ if (!(path in previous))
332
+ return previous;
333
+ const { [path]: _cleared, ...rest } = previous;
334
+ return rest;
335
+ });
336
+ } }))] })) : (_jsxs(_Fragment, { children: [!hasProperties &&
337
+ otherPropertyErrors.map((message) => _jsx(Banner, { label: message, className: "shrink-0" }, message)), _jsxs(MemoryFields, { form: form, errors: errors, isTeam: isTeam, canManageSharedMemories: canManageSharedMemories, onChange: (next) => setForm((prev) => ({ ...prev, ...next })), labelPlaceholder: isEdit ? "e.g. Target ROAS" : "Auto-generated from description", descriptionPlaceholder: getDescriptionPlaceholder(), autoFocus: !isEdit, schemas: schemas, onEditProperties: hasProperties ? () => setView("properties") : undefined, prefillSchemaDefaults: !isEdit, storedSchemaValues: initial ? { schemaIri: initialSubclass(initial), values: initialValues } : undefined, filledPropertyCount: filledPropertyCount(selectedSchema, form.customProperties), totalPropertyCount: schemaProperties.length, hasPropertyErrors: isPresent(propertyErrors), children: [_jsx(MemoryDateField, { id: "memory-expiry", label: "Valid until", hint: "No longer true after this date, so the agent stops using it. Nothing is deleted. Use it only for a real deadline.", placeholder: "Never expires", value: form.memoryValidUntil, onChange: (memoryValidUntil) => setForm((prev) => ({ ...prev, memoryValidUntil })) }), _jsx(TrustedUntilField, { value: form.memoryTrustedUntil, validUntil: form.memoryValidUntil, importance: form.importance, error: errors.memoryTrustedUntil, preset: trustPreset, onPresetChange: setTrustPreset, onChange: (memoryTrustedUntil) => setForm((prev) => ({ ...prev, memoryTrustedUntil })) })] })] })) }), _jsx(DialogFooter, { children: view === "conflicts" ? (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "secondary", onClick: handleSaveWithoutSuperseding, className: "sm:mr-auto", disabled: isSaving, children: "Save & keep both" }), _jsx(Button, { onClick: handleConflictConfirmInline, disabled: conflictChecked.size === 0 || isSaving, children: getReplaceLabel() })] })) : view === "properties" ? (_jsx(Button, { onClick: () => setView("main"), children: "Done" })) : showDiscardConfirm ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "typography-small text-muted-foreground mr-auto", children: "Discard unsaved changes?" }), _jsx(Button, { variant: "tertiary", onClick: () => setShowDiscardConfirm(false), children: "Keep editing" }), _jsx(Button, { variant: "destructive", onClick: () => onOpenChange(false), children: "Discard" })] })) : conflictCheckTimedOut && pendingForm ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "typography-small text-muted-foreground mr-auto", children: "Conflict check timed out. Save without checking?" }), _jsx(Button, { variant: "tertiary", onClick: () => {
292
338
  setConflictCheckTimedOut(false);
293
339
  setPendingForm(null);
294
340
  }, disabled: isSaving, children: "Cancel" }), _jsx(Button, { onClick: () => {
295
341
  setConflictCheckTimedOut(false);
296
- void onSave(pendingForm, []);
342
+ void submit(pendingForm, []);
297
343
  setPendingForm(null);
298
344
  }, disabled: isSaving, children: isSaving ? "Saving…" : "Save anyway" })] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "tertiary", onClick: () => handleRequestClose(false), children: "Cancel" }), _jsx(Button, { onClick: handleSave, disabled: (submitted && hasErrors) || isBusy, children: getSaveLabel() })] })) })] }) }));
299
345
  }