@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.
- package/README.md +59 -0
- package/dist/components/AppErrorBoundary.d.ts.map +1 -1
- package/dist/components/AppErrorBoundary.js +14 -11
- package/dist/components/AppErrorBoundary.js.map +1 -1
- package/dist/components/app-gate/AppGate.d.ts +8 -0
- package/dist/components/app-gate/AppGate.d.ts.map +1 -0
- package/dist/components/app-gate/AppGate.js +68 -0
- package/dist/components/app-gate/AppGate.js.map +1 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.d.ts +7 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.d.ts.map +1 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.js +19 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.js.map +1 -0
- package/dist/components/app-gate/EnterDatastoreRoute.d.ts +2 -0
- package/dist/components/app-gate/EnterDatastoreRoute.d.ts.map +1 -0
- package/dist/components/app-gate/EnterDatastoreRoute.js +25 -0
- package/dist/components/app-gate/EnterDatastoreRoute.js.map +1 -0
- package/dist/components/app-gate/ErrorRoute.d.ts +2 -0
- package/dist/components/app-gate/ErrorRoute.d.ts.map +1 -0
- package/dist/components/app-gate/ErrorRoute.js +27 -0
- package/dist/components/app-gate/ErrorRoute.js.map +1 -0
- package/dist/components/app-gate/FailureAlert.d.ts +5 -0
- package/dist/components/app-gate/FailureAlert.d.ts.map +1 -0
- package/dist/components/app-gate/FailureAlert.js +9 -0
- package/dist/components/app-gate/FailureAlert.js.map +1 -0
- package/dist/components/app-gate/NoDatastoreAccess.d.ts +8 -0
- package/dist/components/app-gate/NoDatastoreAccess.d.ts.map +1 -0
- package/dist/components/app-gate/NoDatastoreAccess.js +9 -0
- package/dist/components/app-gate/NoDatastoreAccess.js.map +1 -0
- package/dist/components/app-gate/NotFoundRoute.d.ts +2 -0
- package/dist/components/app-gate/NotFoundRoute.d.ts.map +1 -0
- package/dist/components/app-gate/NotFoundRoute.js +9 -0
- package/dist/components/app-gate/NotFoundRoute.js.map +1 -0
- package/dist/components/app-gate/PendingInvitations.d.ts +5 -0
- package/dist/components/app-gate/PendingInvitations.d.ts.map +1 -0
- package/dist/components/app-gate/PendingInvitations.js +58 -0
- package/dist/components/app-gate/PendingInvitations.js.map +1 -0
- package/dist/components/app-gate/ServiceError.d.ts +8 -0
- package/dist/components/app-gate/ServiceError.d.ts.map +1 -0
- package/dist/components/app-gate/ServiceError.js +10 -0
- package/dist/components/app-gate/ServiceError.js.map +1 -0
- package/dist/components/app-gate/index.d.ts +3 -0
- package/dist/components/app-gate/index.d.ts.map +1 -0
- package/dist/components/app-gate/index.js +3 -0
- package/dist/components/app-gate/index.js.map +1 -0
- package/dist/components/app-gate/sdk-route-elements.d.ts +23 -0
- package/dist/components/app-gate/sdk-route-elements.d.ts.map +1 -0
- package/dist/components/app-gate/sdk-route-elements.js +35 -0
- package/dist/components/app-gate/sdk-route-elements.js.map +1 -0
- package/dist/components/app-shell/AppShell.d.ts +7 -0
- package/dist/components/app-shell/AppShell.d.ts.map +1 -0
- package/dist/components/app-shell/AppShell.js +10 -0
- package/dist/components/app-shell/AppShell.js.map +1 -0
- package/dist/components/app-shell/AppShellRoutes.d.ts +9 -0
- package/dist/components/app-shell/AppShellRoutes.d.ts.map +1 -0
- package/dist/components/app-shell/AppShellRoutes.js +20 -0
- package/dist/components/app-shell/AppShellRoutes.js.map +1 -0
- package/dist/components/app-shell/GroupDatastores.d.ts +8 -0
- package/dist/components/app-shell/GroupDatastores.d.ts.map +1 -0
- package/dist/components/app-shell/GroupDatastores.js +15 -0
- package/dist/components/app-shell/GroupDatastores.js.map +1 -0
- package/dist/components/app-shell/GroupRoute.d.ts +2 -0
- package/dist/components/app-shell/GroupRoute.d.ts.map +1 -0
- package/dist/components/app-shell/GroupRoute.js +22 -0
- package/dist/components/app-shell/GroupRoute.js.map +1 -0
- package/dist/components/app-shell/index.d.ts +3 -0
- package/dist/components/app-shell/index.d.ts.map +1 -0
- package/dist/components/app-shell/index.js +3 -0
- package/dist/components/app-shell/index.js.map +1 -0
- package/dist/components/authenticated-chat/index.d.ts +1 -2
- package/dist/components/authenticated-chat/index.d.ts.map +1 -1
- package/dist/components/authenticated-chat/index.js +1 -12
- package/dist/components/authenticated-chat/index.js.map +1 -1
- package/dist/components/chat-view/Chat.d.ts +2 -1
- package/dist/components/chat-view/Chat.d.ts.map +1 -1
- package/dist/components/chat-view/Chat.js +3 -2
- package/dist/components/chat-view/Chat.js.map +1 -1
- package/dist/components/chat-view/MessageItem.d.ts.map +1 -1
- package/dist/components/chat-view/MessageItem.js +4 -2
- package/dist/components/chat-view/MessageItem.js.map +1 -1
- package/dist/components/chat-view/tool-part-rendering.d.ts +1 -0
- package/dist/components/chat-view/tool-part-rendering.d.ts.map +1 -1
- package/dist/components/chat-view/tool-part-rendering.js +8 -1
- package/dist/components/chat-view/tool-part-rendering.js.map +1 -1
- package/dist/components/chip/index.d.ts +1 -0
- package/dist/components/chip/index.d.ts.map +1 -1
- package/dist/components/chip/index.js +2 -1
- package/dist/components/chip/index.js.map +1 -1
- package/dist/components/embedded-chat/index.d.ts +1 -1
- package/dist/components/embedded-chat/index.d.ts.map +1 -1
- package/dist/components/embedded-chat/index.js +1 -1
- package/dist/components/embedded-chat/index.js.map +1 -1
- package/dist/components/input/input-date-time.d.ts +6 -0
- package/dist/components/input/input-date-time.d.ts.map +1 -1
- package/dist/components/input/input-date-time.js +2 -1
- package/dist/components/input/input-date-time.js.map +1 -1
- package/dist/components/input/input-date.d.ts +22 -0
- package/dist/components/input/input-date.d.ts.map +1 -1
- package/dist/components/input/input-date.js +28 -14
- package/dist/components/input/input-date.js.map +1 -1
- package/dist/components/input/input-time.d.ts +9 -0
- package/dist/components/input/input-time.d.ts.map +1 -1
- package/dist/components/input/input-time.js +29 -18
- package/dist/components/input/input-time.js.map +1 -1
- package/dist/components/layouts/RouteLayout.d.ts +0 -9
- package/dist/components/layouts/RouteLayout.d.ts.map +1 -1
- package/dist/components/layouts/RouteLayout.js +7 -4
- package/dist/components/layouts/RouteLayout.js.map +1 -1
- package/dist/components/layouts/Sidebar.d.ts +1 -8
- package/dist/components/layouts/Sidebar.d.ts.map +1 -1
- package/dist/components/layouts/Sidebar.js +7 -14
- package/dist/components/layouts/Sidebar.js.map +1 -1
- package/dist/components/plan-limits/PlanLimitsDialog.d.ts +20 -0
- package/dist/components/plan-limits/PlanLimitsDialog.d.ts.map +1 -0
- package/dist/components/plan-limits/PlanLimitsDialog.js +109 -0
- package/dist/components/plan-limits/PlanLimitsDialog.js.map +1 -0
- package/dist/components/plan-limits/index.d.ts +4 -0
- package/dist/components/plan-limits/index.d.ts.map +1 -0
- package/dist/components/plan-limits/index.js +2 -0
- package/dist/components/plan-limits/index.js.map +1 -0
- package/dist/components/plan-limits/plan-limits-client.d.ts +15 -0
- package/dist/components/plan-limits/plan-limits-client.d.ts.map +1 -0
- package/dist/components/plan-limits/plan-limits-client.js +44 -0
- package/dist/components/plan-limits/plan-limits-client.js.map +1 -0
- package/dist/components/plan-limits/plan-limits-model.d.ts +66 -0
- package/dist/components/plan-limits/plan-limits-model.d.ts.map +1 -0
- package/dist/components/plan-limits/plan-limits-model.js +123 -0
- package/dist/components/plan-limits/plan-limits-model.js.map +1 -0
- package/dist/components/plan-limits/plan-limits-save.d.ts +31 -0
- package/dist/components/plan-limits/plan-limits-save.d.ts.map +1 -0
- package/dist/components/plan-limits/plan-limits-save.js +43 -0
- package/dist/components/plan-limits/plan-limits-save.js.map +1 -0
- package/dist/components/planning/PlanLimitsAction.d.ts +6 -0
- package/dist/components/planning/PlanLimitsAction.d.ts.map +1 -0
- package/dist/components/planning/PlanLimitsAction.js +19 -0
- package/dist/components/planning/PlanLimitsAction.js.map +1 -0
- package/dist/components/slider/index.d.ts.map +1 -1
- package/dist/components/slider/index.js +2 -1
- package/dist/components/slider/index.js.map +1 -1
- package/dist/datastore-picker/datastore-picker-rows.d.ts +7 -0
- package/dist/datastore-picker/datastore-picker-rows.d.ts.map +1 -1
- package/dist/datastore-picker/datastore-picker-rows.js +26 -22
- package/dist/datastore-picker/datastore-picker-rows.js.map +1 -1
- package/dist/globals.css +85 -2
- package/dist/hooks/use-action-plans-list.d.ts +3 -0
- package/dist/hooks/use-action-plans-list.d.ts.map +1 -1
- package/dist/hooks/use-action-plans-list.js +8 -9
- package/dist/hooks/use-action-plans-list.js.map +1 -1
- package/dist/hooks/use-activity-feed.d.ts +10 -1
- package/dist/hooks/use-activity-feed.d.ts.map +1 -1
- package/dist/hooks/use-activity-feed.js +9 -11
- package/dist/hooks/use-activity-feed.js.map +1 -1
- package/dist/hooks/use-entity.d.ts +4 -3
- package/dist/hooks/use-entity.d.ts.map +1 -1
- package/dist/hooks/use-entity.js +4 -4
- package/dist/hooks/use-entity.js.map +1 -1
- package/dist/hooks/use-manual-actions.d.ts +1 -1
- package/dist/hooks/use-manual-actions.d.ts.map +1 -1
- package/dist/hooks/use-manual-actions.js +5 -5
- package/dist/hooks/use-manual-actions.js.map +1 -1
- package/dist/hooks/use-unsaved-changes-warning.d.ts +2 -0
- package/dist/hooks/use-unsaved-changes-warning.d.ts.map +1 -0
- package/dist/hooks/use-unsaved-changes-warning.js +13 -0
- package/dist/hooks/use-unsaved-changes-warning.js.map +1 -0
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +4 -3
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useChatPanelSync.d.ts.map +1 -1
- package/dist/hooks/useChatPanelSync.js +2 -3
- package/dist/hooks/useChatPanelSync.js.map +1 -1
- package/dist/hooks/useDatastoreSelection.d.ts.map +1 -1
- package/dist/hooks/useDatastoreSelection.js +11 -4
- package/dist/hooks/useDatastoreSelection.js.map +1 -1
- package/dist/hooks/useExecuteAction.d.ts +1 -0
- package/dist/hooks/useExecuteAction.d.ts.map +1 -1
- package/dist/hooks/useExecuteAction.js.map +1 -1
- package/dist/hooks/useLoginRedirect.d.ts +6 -0
- package/dist/hooks/useLoginRedirect.d.ts.map +1 -0
- package/dist/hooks/useLoginRedirect.js +51 -0
- package/dist/hooks/useLoginRedirect.js.map +1 -0
- package/dist/hooks/usePlanLimits.d.ts +18 -0
- package/dist/hooks/usePlanLimits.d.ts.map +1 -0
- package/dist/hooks/usePlanLimits.js +56 -0
- package/dist/hooks/usePlanLimits.js.map +1 -0
- package/dist/ldo-ui.d.ts +1 -1
- package/dist/ldo-ui.d.ts.map +1 -1
- package/dist/ldo-ui.js.map +1 -1
- package/dist/lib/app-tools.d.ts +18 -0
- package/dist/lib/app-tools.d.ts.map +1 -0
- package/dist/lib/app-tools.js +42 -0
- package/dist/lib/app-tools.js.map +1 -0
- package/dist/lib/chat-types.d.ts +3 -0
- package/dist/lib/chat-types.d.ts.map +1 -1
- package/dist/lib/chat-types.js.map +1 -1
- package/dist/lib/datastore-route-table.d.ts +3 -0
- package/dist/lib/datastore-route-table.d.ts.map +1 -1
- package/dist/lib/datastore-route-table.js +6 -0
- package/dist/lib/datastore-route-table.js.map +1 -1
- package/dist/lib/graphql-error.d.ts +2 -0
- package/dist/lib/graphql-error.d.ts.map +1 -0
- package/dist/lib/graphql-error.js +7 -0
- package/dist/lib/graphql-error.js.map +1 -0
- package/dist/lib/update-notice.d.ts +2 -1
- package/dist/lib/update-notice.d.ts.map +1 -1
- package/dist/lib/update-notice.js +8 -2
- package/dist/lib/update-notice.js.map +1 -1
- package/dist/providers/ActiveChatProvider.d.ts +2 -0
- package/dist/providers/ActiveChatProvider.d.ts.map +1 -1
- package/dist/providers/ActiveChatProvider.js +6 -3
- package/dist/providers/ActiveChatProvider.js.map +1 -1
- package/dist/providers/ActiveDatastoreProvider.d.ts +12 -0
- package/dist/providers/ActiveDatastoreProvider.d.ts.map +1 -1
- package/dist/providers/ActiveDatastoreProvider.js +114 -11
- package/dist/providers/ActiveDatastoreProvider.js.map +1 -1
- package/dist/providers/AuthContext.d.ts +1 -0
- package/dist/providers/AuthContext.d.ts.map +1 -1
- package/dist/providers/AuthContext.js.map +1 -1
- package/dist/providers/MantaClientProvider.d.ts.map +1 -1
- package/dist/providers/MantaClientProvider.js +3 -3
- package/dist/providers/MantaClientProvider.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/routes/activity/detail/ActivityDetailRoute.d.ts.map +1 -1
- package/dist/routes/activity/detail/ActivityDetailRoute.js +1 -3
- package/dist/routes/activity/detail/ActivityDetailRoute.js.map +1 -1
- package/dist/routes/activity/index.d.ts.map +1 -1
- package/dist/routes/activity/index.js +1 -3
- package/dist/routes/activity/index.js.map +1 -1
- package/dist/routes/chat/index.d.ts +2 -21
- package/dist/routes/chat/index.d.ts.map +1 -1
- package/dist/routes/chat/index.js +4 -2
- package/dist/routes/chat/index.js.map +1 -1
- package/dist/routes/data-collection/index.d.ts.map +1 -1
- package/dist/routes/data-collection/index.js +1 -3
- package/dist/routes/data-collection/index.js.map +1 -1
- package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/DataExplorerLayout.js +1 -3
- package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
- package/dist/routes/data-explorer/components/class-detail/UsedByRules.js +2 -2
- package/dist/routes/data-explorer/components/class-detail/UsedByRules.js.map +1 -1
- package/dist/routes/datastores/index.d.ts.map +1 -1
- package/dist/routes/datastores/index.js +2 -2
- package/dist/routes/datastores/index.js.map +1 -1
- package/dist/routes/explain/index.d.ts.map +1 -1
- package/dist/routes/explain/index.js +1 -3
- package/dist/routes/explain/index.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts +0 -1
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js +3 -2
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts +0 -1
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js +4 -3
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js.map +1 -1
- package/dist/routes/integrations/types.d.ts +2 -1
- package/dist/routes/integrations/types.d.ts.map +1 -1
- package/dist/routes/integrations/types.js +16 -0
- package/dist/routes/integrations/types.js.map +1 -1
- package/dist/routes/memories/components/DateValueInput.d.ts +16 -0
- package/dist/routes/memories/components/DateValueInput.d.ts.map +1 -0
- package/dist/routes/memories/components/DateValueInput.js +35 -0
- package/dist/routes/memories/components/DateValueInput.js.map +1 -0
- package/dist/routes/memories/components/EntityValuePicker.d.ts +11 -0
- package/dist/routes/memories/components/EntityValuePicker.d.ts.map +1 -0
- package/dist/routes/memories/components/EntityValuePicker.js +61 -0
- package/dist/routes/memories/components/EntityValuePicker.js.map +1 -0
- package/dist/routes/memories/components/FieldLabel.d.ts +12 -0
- package/dist/routes/memories/components/FieldLabel.d.ts.map +1 -0
- package/dist/routes/memories/components/FieldLabel.js +12 -0
- package/dist/routes/memories/components/FieldLabel.js.map +1 -0
- package/dist/routes/memories/components/ImportanceSlider.d.ts +2 -0
- package/dist/routes/memories/components/ImportanceSlider.d.ts.map +1 -1
- package/dist/routes/memories/components/ImportanceSlider.js +4 -1
- package/dist/routes/memories/components/ImportanceSlider.js.map +1 -1
- package/dist/routes/memories/components/MemoriesFilters.d.ts +2 -2
- package/dist/routes/memories/components/MemoriesFilters.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoriesFilters.js.map +1 -1
- package/dist/routes/memories/components/MemoriesPanel.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoriesPanel.js +4 -0
- package/dist/routes/memories/components/MemoriesPanel.js.map +1 -1
- package/dist/routes/memories/components/MemoriesTabPanel.d.ts +2 -2
- package/dist/routes/memories/components/MemoriesTabPanel.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryActions.d.ts +2 -0
- package/dist/routes/memories/components/MemoryActions.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryActions.js +3 -3
- package/dist/routes/memories/components/MemoryActions.js.map +1 -1
- package/dist/routes/memories/components/MemoryFields.d.ts +15 -3
- package/dist/routes/memories/components/MemoryFields.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryFields.js +34 -5
- package/dist/routes/memories/components/MemoryFields.js.map +1 -1
- package/dist/routes/memories/components/MemoryFormDialog.d.ts +6 -3
- package/dist/routes/memories/components/MemoryFormDialog.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryFormDialog.js +105 -59
- package/dist/routes/memories/components/MemoryFormDialog.js.map +1 -1
- package/dist/routes/memories/components/MemoryPropertyFields.d.ts +10 -0
- package/dist/routes/memories/components/MemoryPropertyFields.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoryPropertyFields.js +67 -0
- package/dist/routes/memories/components/MemoryPropertyFields.js.map +1 -0
- package/dist/routes/memories/components/RuleDraftDialog.d.ts +7 -0
- package/dist/routes/memories/components/RuleDraftDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/RuleDraftDialog.js +20 -0
- package/dist/routes/memories/components/RuleDraftDialog.js.map +1 -0
- package/dist/routes/memories/components/SchemasTab.d.ts +17 -2
- package/dist/routes/memories/components/SchemasTab.d.ts.map +1 -1
- package/dist/routes/memories/components/SchemasTab.js +146 -28
- package/dist/routes/memories/components/SchemasTab.js.map +1 -1
- package/dist/routes/memories/components/badges.d.ts +7 -0
- package/dist/routes/memories/components/badges.d.ts.map +1 -1
- package/dist/routes/memories/components/badges.js +11 -3
- package/dist/routes/memories/components/badges.js.map +1 -1
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts +4 -2
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -1
- package/dist/routes/memories/hooks/useMemoryColumns.js +31 -15
- package/dist/routes/memories/hooks/useMemoryColumns.js.map +1 -1
- package/dist/routes/memories/index.d.ts +2 -1
- package/dist/routes/memories/index.d.ts.map +1 -1
- package/dist/routes/memories/index.js +72 -30
- package/dist/routes/memories/index.js.map +1 -1
- package/dist/routes/memories/memory-mutation-input.d.ts.map +1 -1
- package/dist/routes/memories/memory-mutation-input.js +5 -2
- package/dist/routes/memories/memory-mutation-input.js.map +1 -1
- package/dist/routes/memories/memory-property-values.d.ts +13 -0
- package/dist/routes/memories/memory-property-values.d.ts.map +1 -0
- package/dist/routes/memories/memory-property-values.js +40 -0
- package/dist/routes/memories/memory-property-values.js.map +1 -0
- package/dist/routes/memories/schemas/AllowedValuesField.d.ts +14 -0
- package/dist/routes/memories/schemas/AllowedValuesField.d.ts.map +1 -0
- package/dist/routes/memories/schemas/AllowedValuesField.js +64 -0
- package/dist/routes/memories/schemas/AllowedValuesField.js.map +1 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.d.ts +127 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.d.ts.map +1 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.js +285 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.d.ts +20 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.js +54 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.d.ts +15 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.js +8 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.d.ts +15 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.js +74 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.d.ts +10 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.js +242 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.d.ts +13 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.js +13 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.js.map +1 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.d.ts +12 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.d.ts.map +1 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.js +10 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.js.map +1 -0
- package/dist/routes/memories/schemas/schema-form.d.ts +72 -0
- package/dist/routes/memories/schemas/schema-form.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-form.js +279 -0
- package/dist/routes/memories/schemas/schema-form.js.map +1 -0
- package/dist/routes/memories/schemas/schema-impact.d.ts +13 -0
- package/dist/routes/memories/schemas/schema-impact.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-impact.js +40 -0
- package/dist/routes/memories/schemas/schema-impact.js.map +1 -0
- package/dist/routes/memories/schemas/schema-route.d.ts +18 -0
- package/dist/routes/memories/schemas/schema-route.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-route.js +21 -0
- package/dist/routes/memories/schemas/schema-route.js.map +1 -0
- package/dist/routes/memories/schemas/schema-rule-context.d.ts +17 -0
- package/dist/routes/memories/schemas/schema-rule-context.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-rule-context.js +83 -0
- package/dist/routes/memories/schemas/schema-rule-context.js.map +1 -0
- package/dist/routes/memories/schemas/schema-table.d.ts +11 -0
- package/dist/routes/memories/schemas/schema-table.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-table.js +34 -0
- package/dist/routes/memories/schemas/schema-table.js.map +1 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.d.ts +32 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.js +31 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.js.map +1 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.d.ts +51 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.js +175 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.js.map +1 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.d.ts +46 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.js +93 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.js.map +1 -0
- package/dist/routes/memories/schemas/useSchemasTab.d.ts +18 -0
- package/dist/routes/memories/schemas/useSchemasTab.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useSchemasTab.js +92 -0
- package/dist/routes/memories/schemas/useSchemasTab.js.map +1 -0
- package/dist/routes/plans/index.d.ts.map +1 -1
- package/dist/routes/plans/index.js +2 -2
- package/dist/routes/plans/index.js.map +1 -1
- package/dist/routes/rules/components/CreateRuleChatModal.d.ts +7 -1
- package/dist/routes/rules/components/CreateRuleChatModal.d.ts.map +1 -1
- package/dist/routes/rules/components/CreateRuleChatModal.js +9 -4
- package/dist/routes/rules/components/CreateRuleChatModal.js.map +1 -1
- package/dist/routes/rules/components/RuleValueControls.d.ts.map +1 -1
- package/dist/routes/rules/components/RuleValueControls.js +3 -24
- package/dist/routes/rules/components/RuleValueControls.js.map +1 -1
- package/dist/routes/rules/components/rule-value-input.d.ts +11 -0
- package/dist/routes/rules/components/rule-value-input.d.ts.map +1 -0
- package/dist/routes/rules/components/rule-value-input.js +24 -0
- package/dist/routes/rules/components/rule-value-input.js.map +1 -0
- package/dist/routes/rules/components/rules.utils.d.ts +5 -0
- package/dist/routes/rules/components/rules.utils.d.ts.map +1 -1
- package/dist/routes/rules/components/rules.utils.js +18 -3
- package/dist/routes/rules/components/rules.utils.js.map +1 -1
- package/dist/routes/rules/pages.d.ts +1 -1
- package/dist/routes/rules/pages.d.ts.map +1 -1
- package/dist/routes/rules/pages.js +1 -1
- package/dist/routes/rules/pages.js.map +1 -1
- package/dist/shared/graph-derived-queries.d.ts.map +1 -1
- package/dist/shared/graph-derived-queries.js +4 -1
- package/dist/shared/graph-derived-queries.js.map +1 -1
- package/dist/worker/index.d.ts +22 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +110 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/policy.d.ts +21 -0
- package/dist/worker/policy.d.ts.map +1 -0
- package/dist/worker/policy.js +42 -0
- package/dist/worker/policy.js.map +1 -0
- package/dist/worker/proxy.d.ts +14 -0
- package/dist/worker/proxy.d.ts.map +1 -0
- package/dist/worker/proxy.js +58 -0
- package/dist/worker/proxy.js.map +1 -0
- package/dist/worker/session.d.ts +24 -0
- package/dist/worker/session.d.ts.map +1 -0
- package/dist/worker/session.js +72 -0
- package/dist/worker/session.js.map +1 -0
- package/package.json +52 -7
- package/src/app-subpaths.json +9 -1
- package/src/components/AppErrorBoundary.tsx +14 -11
- package/src/components/app-gate/AppGate.tsx +122 -0
- package/src/components/app-gate/AwaitingDatastoreStatus.tsx +35 -0
- package/src/components/app-gate/EnterDatastoreRoute.tsx +30 -0
- package/src/components/app-gate/ErrorRoute.tsx +43 -0
- package/src/components/app-gate/FailureAlert.tsx +15 -0
- package/src/components/app-gate/NoDatastoreAccess.tsx +26 -0
- package/src/components/app-gate/NotFoundRoute.tsx +20 -0
- package/src/components/app-gate/PendingInvitations.tsx +134 -0
- package/src/components/app-gate/ServiceError.tsx +27 -0
- package/src/components/app-gate/index.ts +2 -0
- package/src/components/app-gate/sdk-route-elements.tsx +46 -0
- package/src/components/app-shell/AppShell.tsx +22 -0
- package/src/components/app-shell/AppShellRoutes.tsx +34 -0
- package/src/components/app-shell/GroupDatastores.tsx +28 -0
- package/src/components/app-shell/GroupRoute.tsx +34 -0
- package/src/components/app-shell/index.ts +2 -0
- package/src/components/authenticated-chat/index.tsx +1 -34
- package/src/components/chat-view/Chat.tsx +9 -3
- package/src/components/chat-view/MessageItem.tsx +10 -2
- package/src/components/chat-view/tool-part-rendering.ts +10 -1
- package/src/components/chip/index.tsx +8 -1
- package/src/components/embedded-chat/index.tsx +2 -1
- package/src/components/input/input-date-time.tsx +10 -3
- package/src/components/input/input-date.tsx +93 -21
- package/src/components/input/input-time.tsx +59 -26
- package/src/components/layouts/RouteLayout.tsx +11 -50
- package/src/components/layouts/Sidebar.tsx +21 -23
- package/src/components/plan-limits/PlanLimitsDialog.tsx +331 -0
- package/src/components/plan-limits/index.tsx +3 -0
- package/src/components/plan-limits/plan-limits-client.ts +71 -0
- package/src/components/plan-limits/plan-limits-model.ts +180 -0
- package/src/components/plan-limits/plan-limits-save.ts +68 -0
- package/src/components/planning/PlanLimitsAction.tsx +44 -0
- package/src/components/slider/index.tsx +2 -1
- package/src/datastore-picker/datastore-picker-rows.ts +36 -20
- package/src/hooks/use-action-plans-list.ts +20 -12
- package/src/hooks/use-activity-feed.ts +30 -14
- package/src/hooks/use-entity.ts +11 -6
- package/src/hooks/use-manual-actions.ts +11 -6
- package/src/hooks/use-unsaved-changes-warning.ts +12 -0
- package/src/hooks/useAuth.ts +5 -3
- package/src/hooks/useChatPanelSync.ts +2 -3
- package/src/hooks/useDatastoreSelection.ts +10 -4
- package/src/hooks/useExecuteAction.ts +2 -0
- package/src/hooks/useLoginRedirect.ts +66 -0
- package/src/hooks/usePlanLimits.ts +97 -0
- package/src/ldo-ui.ts +1 -0
- package/src/lib/app-tools.ts +63 -0
- package/src/lib/chat-types.ts +5 -0
- package/src/lib/datastore-route-table.ts +9 -0
- package/src/lib/graphql-error.ts +7 -0
- package/src/lib/update-notice.ts +12 -2
- package/src/providers/ActiveChatProvider.tsx +8 -3
- package/src/providers/ActiveDatastoreProvider.tsx +179 -9
- package/src/providers/AuthContext.ts +1 -0
- package/src/providers/MantaClientProvider.tsx +8 -3
- package/src/providers/index.tsx +7 -4
- package/src/routes/activity/detail/ActivityDetailRoute.tsx +1 -10
- package/src/routes/activity/index.tsx +1 -10
- package/src/routes/chat/index.tsx +11 -47
- package/src/routes/data-collection/index.tsx +1 -11
- package/src/routes/data-explorer/components/DataExplorerLayout.tsx +1 -11
- package/src/routes/data-explorer/components/class-detail/UsedByRules.tsx +2 -2
- package/src/routes/datastores/index.tsx +3 -9
- package/src/routes/explain/index.tsx +1 -11
- package/src/routes/integrations/components/connect-forms/DashConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/GoogleAdsConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/InferalCredentialConnectForm.tsx +5 -3
- package/src/routes/integrations/components/connect-forms/KlaviyoConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/OAuthSetupConnectForm.tsx +7 -7
- package/src/routes/integrations/components/connect-forms/TriplewhaleConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/WoocommerceConnectForm.tsx +0 -1
- package/src/routes/integrations/types.ts +22 -6
- package/src/routes/memories/components/DateValueInput.tsx +72 -0
- package/src/routes/memories/components/EntityValuePicker.tsx +132 -0
- package/src/routes/memories/components/FieldLabel.tsx +49 -0
- package/src/routes/memories/components/ImportanceSlider.tsx +5 -1
- package/src/routes/memories/components/MemoriesFilters.tsx +2 -2
- package/src/routes/memories/components/MemoriesPanel.tsx +7 -3
- package/src/routes/memories/components/MemoriesTabPanel.tsx +2 -2
- package/src/routes/memories/components/MemoryActions.tsx +26 -2
- package/src/routes/memories/components/MemoryFields.tsx +75 -12
- package/src/routes/memories/components/MemoryFormDialog.tsx +305 -199
- package/src/routes/memories/components/MemoryPropertyFields.tsx +288 -0
- package/src/routes/memories/components/RuleDraftDialog.tsx +35 -0
- package/src/routes/memories/components/SchemasTab.tsx +481 -118
- package/src/routes/memories/components/badges.tsx +16 -4
- package/src/routes/memories/hooks/useMemoryColumns.tsx +69 -35
- package/src/routes/memories/index.tsx +125 -51
- package/src/routes/memories/memory-mutation-input.ts +5 -2
- package/src/routes/memories/memory-property-values.ts +83 -0
- package/src/routes/memories/schemas/AllowedValuesField.tsx +188 -0
- package/src/routes/memories/schemas/MemorySchemaPage.tsx +476 -0
- package/src/routes/memories/schemas/SchemaChangeReviewDialog.tsx +290 -0
- package/src/routes/memories/schemas/SchemaConfirmDialog.tsx +62 -0
- package/src/routes/memories/schemas/SchemaDetailPage.tsx +373 -0
- package/src/routes/memories/schemas/SchemaEditorForm.tsx +990 -0
- package/src/routes/memories/schemas/SchemaTemplatesDialog.tsx +81 -0
- package/src/routes/memories/schemas/ValueTypeSelect.tsx +37 -0
- package/src/routes/memories/schemas/schema-form.ts +360 -0
- package/src/routes/memories/schemas/schema-impact.ts +66 -0
- package/src/routes/memories/schemas/schema-route.ts +30 -0
- package/src/routes/memories/schemas/schema-rule-context.ts +103 -0
- package/src/routes/memories/schemas/schema-table.ts +54 -0
- package/src/routes/memories/schemas/useMemorySchemaMutations.ts +49 -0
- package/src/routes/memories/schemas/useSchemaChangeReview.ts +238 -0
- package/src/routes/memories/schemas/useSchemaLifecycle.tsx +151 -0
- package/src/routes/memories/schemas/useSchemasTab.ts +119 -0
- package/src/routes/plans/index.tsx +3 -14
- package/src/routes/rules/components/CreateRuleChatModal.tsx +46 -22
- package/src/routes/rules/components/RuleValueControls.tsx +3 -35
- package/src/routes/rules/components/rule-value-input.ts +34 -0
- package/src/routes/rules/components/rules.utils.ts +25 -3
- package/src/routes/rules/pages.ts +5 -1
- package/src/shared/graph-derived-queries.ts +6 -0
- package/src/themes/manta-dark.css +4 -0
- package/src/worker/index.ts +175 -0
- package/src/worker/policy.ts +62 -0
- package/src/worker/proxy.ts +101 -0
- 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":";AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
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
|
|
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:
|
|
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?:
|
|
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,
|
|
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
|
-
|
|
27
|
-
|
|
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(
|
|
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":";AAAA,OAAO,EAAE,aAAa,
|
|
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
|
|
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<
|
|
11
|
+
onSave: (form: MemoryFormState, supersedesMemoryIris?: string[]) => Promise<MemorySaveResult>;
|
|
9
12
|
isSaving: boolean;
|
|
10
13
|
canManageSharedMemories?: boolean;
|
|
11
|
-
schemas?:
|
|
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,
|
|
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 {
|
|
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,
|
|
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
|
|
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
|
|
55
|
-
const { id,
|
|
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
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
207
|
-
}, [pendingForm, clearConflicts,
|
|
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
|
|
220
|
-
}, [pendingForm, pendingConflicts, conflictChecked, conflictMerging, isTeam, clearConflicts,
|
|
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
|
|
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",
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
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
|
|
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
|
}
|