@manta-eu/react 0.1.0 → 0.1.2
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 +100 -37
- package/dist/components/breadcrumbs/index.d.ts +26 -0
- package/dist/components/breadcrumbs/index.d.ts.map +1 -0
- package/dist/components/breadcrumbs/index.js +36 -0
- package/dist/components/channel-icon/index.d.ts +1 -2
- package/dist/components/channel-icon/index.d.ts.map +1 -1
- package/dist/components/channel-icon/index.js +0 -4
- package/dist/components/chip/index.d.ts +14 -0
- package/dist/components/chip/index.d.ts.map +1 -0
- package/dist/components/chip/index.js +8 -0
- package/dist/components/editable-text/index.d.ts +13 -0
- package/dist/components/editable-text/index.d.ts.map +1 -0
- package/dist/components/editable-text/index.js +61 -0
- package/dist/components/explain-fact/ExplainFact.d.ts +16 -0
- package/dist/components/explain-fact/ExplainFact.d.ts.map +1 -0
- package/dist/components/{rdfox-explain/RDFoxExplain.js → explain-fact/ExplainFact.js} +12 -12
- package/dist/components/explain-fact/OutdatedFactNotice.d.ts.map +1 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.d.ts.map +1 -1
- package/dist/components/input/index.js +2 -0
- package/dist/components/input/input-numeric.d.ts +19 -0
- package/dist/components/input/input-numeric.d.ts.map +1 -0
- package/dist/components/input/input-numeric.js +85 -0
- package/dist/components/input/input-tags.d.ts +17 -0
- package/dist/components/input/input-tags.d.ts.map +1 -0
- package/dist/components/input/input-tags.js +46 -0
- package/dist/components/multi-select/index.d.ts +32 -0
- package/dist/components/multi-select/index.d.ts.map +1 -0
- package/dist/components/multi-select/index.js +33 -0
- package/dist/components/multi-select/toggle-value.d.ts +2 -0
- package/dist/components/multi-select/toggle-value.d.ts.map +1 -0
- package/dist/components/multi-select/toggle-value.js +3 -0
- package/dist/components/plan-row/index.d.ts +2 -1
- package/dist/components/plan-row/index.d.ts.map +1 -1
- package/dist/components/plan-row/index.js +2 -14
- package/dist/components/sidebar/index.d.ts +4 -1
- package/dist/components/sidebar/index.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +2 -2
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/tool-invocation-card/ExplainFactResultDisplay.d.ts +9 -0
- package/dist/components/tool-invocation-card/ExplainFactResultDisplay.d.ts.map +1 -0
- package/dist/components/tool-invocation-card/{ExplainRDFoxResultDisplay.js → ExplainFactResultDisplay.js} +3 -3
- package/dist/components/tool-invocation-card/ToolOutputRenderer.js +2 -2
- package/dist/components/tool-invocation-card/types.d.ts +4 -4
- package/dist/components/tool-invocation-card/types.d.ts.map +1 -1
- package/dist/components/tool-invocation-card/types.js +2 -2
- package/dist/components/tree-multi-select/index.d.ts +1 -1
- package/dist/components/tree-multi-select/index.d.ts.map +1 -1
- package/dist/components/tree-multi-select/index.js +1 -1
- package/dist/components/tree-multi-select/tree-multi-select-rows.d.ts +2 -1
- package/dist/components/tree-multi-select/tree-multi-select-rows.d.ts.map +1 -1
- package/dist/components/tree-multi-select/tree-multi-select-rows.js +21 -31
- package/dist/components/tree-multi-select/tree-multi-select.d.ts +2 -0
- package/dist/components/tree-multi-select/tree-multi-select.d.ts.map +1 -1
- package/dist/components/tree-multi-select/tree-multi-select.js +21 -8
- package/dist/explain-fact/DatalogCode.d.ts.map +1 -0
- package/dist/explain-fact/EntityChip.d.ts.map +1 -0
- package/dist/explain-fact/EntityChip.js +17 -0
- package/dist/explain-fact/ExplainCompactView.d.ts.map +1 -0
- package/dist/explain-fact/ExplainFactState.d.ts +7 -0
- package/dist/explain-fact/ExplainFactState.d.ts.map +1 -0
- package/dist/{rdfox-explain/RDFoxExplainState.js → explain-fact/ExplainFactState.js} +1 -1
- package/dist/explain-fact/ExplainFullView.d.ts.map +1 -0
- package/dist/explain-fact/ExplainStates.d.ts.map +1 -0
- package/dist/explain-fact/ExplainTag.d.ts.map +1 -0
- package/dist/explain-fact/FactNotice.d.ts +7 -0
- package/dist/explain-fact/FactNotice.d.ts.map +1 -0
- package/dist/explain-fact/FactNotice.js +25 -0
- package/dist/explain-fact/FactValue.d.ts.map +1 -0
- package/dist/explain-fact/NumDot.d.ts.map +1 -0
- package/dist/explain-fact/PanelLabel.d.ts.map +1 -0
- package/dist/explain-fact/ProofSubjectHeader.d.ts.map +1 -0
- package/dist/explain-fact/ProvenanceBadge.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/ProvenanceBadge.js +2 -1
- package/dist/explain-fact/RuleVariableTypes.d.ts.map +1 -0
- package/dist/explain-fact/SubstitutedFactNotice.d.ts.map +1 -0
- package/dist/explain-fact/ValuePill.d.ts.map +1 -0
- package/dist/explain-fact/conclusion/ConclusionCard.d.ts.map +1 -0
- package/dist/explain-fact/conclusion/ConclusionSubtitle.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/conclusion/ConclusionSubtitle.js +3 -1
- package/dist/explain-fact/conclusion/index.d.ts.map +1 -0
- package/dist/explain-fact/explain-styles.d.ts.map +1 -0
- package/dist/explain-fact/fact-token.d.ts.map +1 -0
- package/dist/explain-fact/formula-hues.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/index.d.ts +2 -3
- package/dist/explain-fact/index.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/index.js +2 -3
- package/dist/explain-fact/inspector/ExplainInspector.d.ts.map +1 -0
- package/dist/explain-fact/inspector/ExplainInspector.js +20 -0
- package/dist/explain-fact/inspector/InspectorBindings.d.ts.map +1 -0
- package/dist/explain-fact/inspector/InspectorFact.d.ts.map +1 -0
- package/dist/explain-fact/inspector/InspectorHeader.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/inspector/InspectorRule.d.ts +3 -0
- package/dist/explain-fact/inspector/InspectorRule.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/inspector/InspectorRule.js +4 -5
- package/dist/explain-fact/inspector/SupportsSection.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/inspector/SupportsSection.js +2 -1
- package/dist/explain-fact/inspector/index.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/ProofFactLabel.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/ProofRowBadge.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/ProofRowContent.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/ProofRowValue.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/ProofTree.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofTree.js +1 -1
- package/dist/explain-fact/proof-tree/ProofTreeFormulaFooter.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/ProofTreeNode.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/SupportsTag.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/SupportsTag.js +6 -0
- package/dist/explain-fact/proof-tree/index.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/proof-tree-navigation.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/proof-tree-root-view.d.ts.map +1 -0
- package/dist/explain-fact/proof-tree/visible-premises.d.ts.map +1 -0
- package/dist/explain-fact/rule-presentation.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/tree-model.d.ts +18 -9
- package/dist/explain-fact/tree-model.d.ts.map +1 -0
- package/dist/{rdfox-explain → explain-fact}/tree-model.js +19 -10
- package/dist/explain-fact/use-fact-measure.d.ts.map +1 -0
- package/dist/globals.css +383 -108
- package/dist/graph/nodes/AdMockupCard.js +1 -1
- package/dist/graph/nodes/CreativeMediaCard.js +1 -1
- package/dist/graph/nodes/EntityCardShell.js +1 -1
- package/dist/hooks/use-conversation-starters.d.ts +1 -1
- package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/ldo-ui.d.ts +1 -1
- package/dist/ldo-ui.d.ts.map +1 -1
- package/dist/ldo-ui.js +1 -1
- package/dist/lib/datastore-route-paths.d.ts +2 -2
- package/dist/lib/datastore-route-paths.d.ts.map +1 -1
- package/dist/lib/datastore-route-paths.js +2 -2
- package/dist/lib/datastore-route-table.d.ts +36 -0
- package/dist/lib/datastore-route-table.d.ts.map +1 -0
- package/dist/lib/datastore-route-table.js +43 -0
- package/dist/lib/datastore-routes.d.ts +1 -1
- package/dist/lib/datastore-routes.d.ts.map +1 -1
- package/dist/lib/datastore-routes.js +1 -1
- package/dist/lib/spa-routes.d.ts +3 -0
- package/dist/lib/spa-routes.d.ts.map +1 -0
- package/dist/lib/spa-routes.js +5 -0
- package/dist/routes/data-explorer/components/Breadcrumbs.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/Breadcrumbs.js +5 -5
- package/dist/routes/datastores/components/DatastoreFormDialog.d.ts +18 -0
- package/dist/routes/datastores/components/DatastoreFormDialog.d.ts.map +1 -0
- package/dist/routes/datastores/components/DatastoreFormDialog.js +27 -0
- package/dist/routes/datastores/components/DatastoreTableSkeleton.d.ts +2 -0
- package/dist/routes/datastores/components/DatastoreTableSkeleton.d.ts.map +1 -0
- package/dist/routes/datastores/components/DatastoreTableSkeleton.js +7 -0
- package/dist/routes/datastores/components/DatastoresToolbar.d.ts +18 -0
- package/dist/routes/datastores/components/DatastoresToolbar.d.ts.map +1 -0
- package/dist/routes/datastores/components/DatastoresToolbar.js +29 -0
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts +14 -0
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts.map +1 -0
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js +83 -0
- package/dist/routes/datastores/components/RenameDatastoreGroupDialog.d.ts +9 -0
- package/dist/routes/datastores/components/RenameDatastoreGroupDialog.d.ts.map +1 -0
- package/dist/routes/datastores/components/RenameDatastoreGroupDialog.js +21 -0
- package/dist/routes/datastores/components/StatusBadge.d.ts +21 -0
- package/dist/routes/datastores/components/StatusBadge.d.ts.map +1 -0
- package/dist/routes/datastores/components/StatusBadge.js +49 -0
- package/dist/routes/datastores/components/UnlinkedDatastoresPanel.d.ts +20 -0
- package/dist/routes/datastores/components/UnlinkedDatastoresPanel.d.ts.map +1 -0
- package/dist/routes/datastores/components/UnlinkedDatastoresPanel.js +13 -0
- package/dist/routes/datastores/flatten.d.ts +33 -0
- package/dist/routes/datastores/flatten.d.ts.map +1 -0
- package/dist/routes/datastores/flatten.js +86 -0
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +47 -0
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -0
- package/dist/routes/datastores/hooks/useDatastoreColumns.js +165 -0
- package/dist/routes/datastores/hooks/useDatastoreTable.d.ts +14 -0
- package/dist/routes/datastores/hooks/useDatastoreTable.d.ts.map +1 -0
- package/dist/routes/datastores/hooks/useDatastoreTable.js +45 -0
- package/dist/routes/datastores/index.d.ts +2 -0
- package/dist/routes/datastores/index.d.ts.map +1 -0
- package/dist/routes/datastores/index.js +467 -0
- package/dist/routes/explain/ExplainEmpty.d.ts +2 -0
- package/dist/routes/explain/ExplainEmpty.d.ts.map +1 -0
- package/dist/routes/explain/ExplainEmpty.js +8 -0
- package/dist/routes/explain/index.d.ts +2 -0
- package/dist/routes/explain/index.d.ts.map +1 -0
- package/dist/routes/explain/index.js +16 -0
- package/dist/routes/explain/url-params.d.ts +9 -0
- package/dist/routes/explain/url-params.d.ts.map +1 -0
- package/dist/routes/explain/url-params.js +21 -0
- package/dist/routes/integrations/components/ConnectionRow.d.ts.map +1 -1
- package/dist/routes/integrations/components/ConnectionRow.js +1 -1
- package/dist/routes/integrations/connection-view.d.ts.map +1 -1
- package/dist/routes/integrations/connection-view.js +17 -1
- package/dist/routes/integrations/types.d.ts +2 -1
- package/dist/routes/integrations/types.d.ts.map +1 -1
- package/dist/routes/memories/components/ChangeScopeDialog.d.ts +12 -0
- package/dist/routes/memories/components/ChangeScopeDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/ChangeScopeDialog.js +89 -0
- package/dist/routes/memories/components/ConflictMemoryCard.d.ts +13 -0
- package/dist/routes/memories/components/ConflictMemoryCard.d.ts.map +1 -0
- package/dist/routes/memories/components/ConflictMemoryCard.js +43 -0
- package/dist/routes/memories/components/ConflictTimeoutFooter.d.ts +7 -0
- package/dist/routes/memories/components/ConflictTimeoutFooter.d.ts.map +1 -0
- package/dist/routes/memories/components/ConflictTimeoutFooter.js +6 -0
- package/dist/routes/memories/components/ConsolidationReviewDialog.d.ts +61 -0
- package/dist/routes/memories/components/ConsolidationReviewDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/ConsolidationReviewDialog.js +121 -0
- package/dist/routes/memories/components/EmptyStates.d.ts +18 -0
- package/dist/routes/memories/components/EmptyStates.d.ts.map +1 -0
- package/dist/routes/memories/components/EmptyStates.js +22 -0
- package/dist/routes/memories/components/ImportanceSlider.d.ts +11 -0
- package/dist/routes/memories/components/ImportanceSlider.d.ts.map +1 -0
- package/dist/routes/memories/components/ImportanceSlider.js +31 -0
- package/dist/routes/memories/components/LiveContextTab.d.ts +6 -0
- package/dist/routes/memories/components/LiveContextTab.d.ts.map +1 -0
- package/dist/routes/memories/components/LiveContextTab.js +37 -0
- package/dist/routes/memories/components/LoadingSkeleton.d.ts +2 -0
- package/dist/routes/memories/components/LoadingSkeleton.d.ts.map +1 -0
- package/dist/routes/memories/components/LoadingSkeleton.js +7 -0
- package/dist/routes/memories/components/MemoriesFilters.d.ts +31 -0
- package/dist/routes/memories/components/MemoriesFilters.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoriesFilters.js +88 -0
- package/dist/routes/memories/components/MemoriesPanel.d.ts +6 -0
- package/dist/routes/memories/components/MemoriesPanel.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoriesPanel.js +99 -0
- package/dist/routes/memories/components/MemoriesTabPanel.d.ts +30 -0
- package/dist/routes/memories/components/MemoriesTabPanel.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoriesTabPanel.js +11 -0
- package/dist/routes/memories/components/MemoryActions.d.ts +12 -0
- package/dist/routes/memories/components/MemoryActions.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoryActions.js +24 -0
- package/dist/routes/memories/components/MemoryFields.d.ts +32 -0
- package/dist/routes/memories/components/MemoryFields.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoryFields.js +30 -0
- package/dist/routes/memories/components/MemoryFormDialog.d.ts +15 -0
- package/dist/routes/memories/components/MemoryFormDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoryFormDialog.js +299 -0
- package/dist/routes/memories/components/MemoryOnboardingWizard.d.ts +9 -0
- package/dist/routes/memories/components/MemoryOnboardingWizard.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoryOnboardingWizard.js +99 -0
- package/dist/routes/memories/components/RestoreBlockedDialog.d.ts +8 -0
- package/dist/routes/memories/components/RestoreBlockedDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/RestoreBlockedDialog.js +7 -0
- package/dist/routes/memories/components/SchemasTab.d.ts +6 -0
- package/dist/routes/memories/components/SchemasTab.d.ts.map +1 -0
- package/dist/routes/memories/components/SchemasTab.js +35 -0
- package/dist/routes/memories/components/SupersessionConflictDialog.d.ts +18 -0
- package/dist/routes/memories/components/SupersessionConflictDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/SupersessionConflictDialog.js +78 -0
- package/dist/routes/memories/components/TeamPicker.d.ts +8 -0
- package/dist/routes/memories/components/TeamPicker.d.ts.map +1 -0
- package/dist/routes/memories/components/TeamPicker.js +25 -0
- package/dist/routes/memories/components/badges.d.ts +50 -0
- package/dist/routes/memories/components/badges.d.ts.map +1 -0
- package/dist/routes/memories/components/badges.js +106 -0
- package/dist/routes/memories/expiry-utils.d.ts +23 -0
- package/dist/routes/memories/expiry-utils.d.ts.map +1 -0
- package/dist/routes/memories/expiry-utils.js +97 -0
- package/dist/routes/memories/hooks/useConflictCheck.d.ts +18 -0
- package/dist/routes/memories/hooks/useConflictCheck.d.ts.map +1 -0
- package/dist/routes/memories/hooks/useConflictCheck.js +35 -0
- package/dist/routes/memories/hooks/useDuplicateDetection.d.ts +11 -0
- package/dist/routes/memories/hooks/useDuplicateDetection.d.ts.map +1 -0
- package/dist/routes/memories/hooks/useDuplicateDetection.js +73 -0
- package/dist/routes/memories/hooks/useLiveContext.d.ts +23 -0
- package/dist/routes/memories/hooks/useLiveContext.d.ts.map +1 -0
- package/dist/routes/memories/hooks/useLiveContext.js +102 -0
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts +33 -0
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -0
- package/dist/routes/memories/hooks/useMemoryColumns.js +188 -0
- package/dist/routes/memories/hooks/useMemoryTable.d.ts +33 -0
- package/dist/routes/memories/hooks/useMemoryTable.d.ts.map +1 -0
- package/dist/routes/memories/hooks/useMemoryTable.js +121 -0
- package/dist/routes/memories/index.d.ts +11 -0
- package/dist/routes/memories/index.d.ts.map +1 -0
- package/dist/routes/memories/index.js +472 -0
- package/dist/routes/memories/memory-form-validation.d.ts +8 -0
- package/dist/routes/memories/memory-form-validation.d.ts.map +1 -0
- package/dist/routes/memories/memory-form-validation.js +33 -0
- package/dist/routes/memories/memory-mutation-input.d.ts +6 -0
- package/dist/routes/memories/memory-mutation-input.d.ts.map +1 -0
- package/dist/routes/memories/memory-mutation-input.js +41 -0
- package/dist/routes/plans/components/actionPlansTableConfig.d.ts +3 -3
- package/dist/routes/rules/components/CreateRuleChatModal.d.ts +10 -0
- package/dist/routes/rules/components/CreateRuleChatModal.d.ts.map +1 -0
- package/dist/routes/rules/components/CreateRuleChatModal.js +52 -0
- package/dist/routes/rules/components/RuleActionabilityBadge.d.ts +8 -0
- package/dist/routes/rules/components/RuleActionabilityBadge.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleActionabilityBadge.js +18 -0
- package/dist/routes/rules/components/RuleAffectedActionPlansSection.d.ts +6 -0
- package/dist/routes/rules/components/RuleAffectedActionPlansSection.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleAffectedActionPlansSection.js +151 -0
- package/dist/routes/rules/components/RuleAst.d.ts +6 -0
- package/dist/routes/rules/components/RuleAst.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleAst.js +23 -0
- package/dist/routes/rules/components/RuleDependentRulesSection.d.ts +6 -0
- package/dist/routes/rules/components/RuleDependentRulesSection.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleDependentRulesSection.js +16 -0
- package/dist/routes/rules/components/RuleDetailsPage.d.ts +14 -0
- package/dist/routes/rules/components/RuleDetailsPage.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleDetailsPage.js +51 -0
- package/dist/routes/rules/components/RuleProducersSection.d.ts +7 -0
- package/dist/routes/rules/components/RuleProducersSection.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleProducersSection.js +10 -0
- package/dist/routes/rules/components/RuleSampleFactsSection.d.ts +7 -0
- package/dist/routes/rules/components/RuleSampleFactsSection.d.ts.map +1 -0
- package/dist/routes/rules/components/RuleSampleFactsSection.js +70 -0
- package/dist/routes/rules/components/RulesOverviewHeaderActions.d.ts +17 -0
- package/dist/routes/rules/components/RulesOverviewHeaderActions.d.ts.map +1 -0
- package/dist/routes/rules/components/RulesOverviewHeaderActions.js +55 -0
- package/dist/routes/rules/components/RulesOverviewPage.d.ts +13 -0
- package/dist/routes/rules/components/RulesOverviewPage.d.ts.map +1 -0
- package/dist/routes/rules/components/RulesOverviewPage.js +236 -0
- package/dist/routes/rules/components/SupportedActionShapesList/SupportedActionShapeDetails.d.ts +7 -0
- package/dist/routes/rules/components/SupportedActionShapesList/SupportedActionShapeDetails.d.ts.map +1 -0
- package/dist/routes/rules/components/SupportedActionShapesList/SupportedActionShapeDetails.js +47 -0
- package/dist/routes/rules/components/SupportedActionShapesList/SupportedActionShapesList.d.ts +8 -0
- package/dist/routes/rules/components/SupportedActionShapesList/SupportedActionShapesList.d.ts.map +1 -0
- package/dist/routes/rules/components/SupportedActionShapesList/SupportedActionShapesList.js +76 -0
- package/dist/routes/rules/components/SupportedActionShapesList/TokenList.d.ts +6 -0
- package/dist/routes/rules/components/SupportedActionShapesList/TokenList.d.ts.map +1 -0
- package/dist/routes/rules/components/SupportedActionShapesList/TokenList.js +9 -0
- package/dist/routes/rules/components/SupportedActionShapesList/index.d.ts +2 -0
- package/dist/routes/rules/components/SupportedActionShapesList/index.d.ts.map +1 -0
- package/dist/routes/rules/components/SupportedActionShapesList/index.js +1 -0
- package/dist/routes/rules/components/SupportedActionShapesList/shacl-shape.d.ts +20 -0
- package/dist/routes/rules/components/SupportedActionShapesList/shacl-shape.d.ts.map +1 -0
- package/dist/routes/rules/components/SupportedActionShapesList/shacl-shape.js +48 -0
- package/dist/routes/rules/components/datalog-editor/BindingsPreview.d.ts +9 -0
- package/dist/routes/rules/components/datalog-editor/BindingsPreview.d.ts.map +1 -0
- package/dist/routes/rules/components/datalog-editor/BindingsPreview.js +38 -0
- package/dist/routes/rules/components/datalog-editor/FactsPreview.d.ts +10 -0
- package/dist/routes/rules/components/datalog-editor/FactsPreview.d.ts.map +1 -0
- package/dist/routes/rules/components/datalog-editor/FactsPreview.js +43 -0
- package/dist/routes/rules/components/datalog-editor/PreviewPanel.d.ts +7 -0
- package/dist/routes/rules/components/datalog-editor/PreviewPanel.d.ts.map +1 -0
- package/dist/routes/rules/components/datalog-editor/PreviewPanel.js +8 -0
- package/dist/routes/rules/components/datalog-editor/QueryResults.d.ts +9 -0
- package/dist/routes/rules/components/datalog-editor/QueryResults.d.ts.map +1 -0
- package/dist/routes/rules/components/datalog-editor/QueryResults.js +22 -0
- package/dist/routes/rules/components/datalog-editor/SparqlQueryPanel.d.ts +11 -0
- package/dist/routes/rules/components/datalog-editor/SparqlQueryPanel.d.ts.map +1 -0
- package/dist/routes/rules/components/datalog-editor/SparqlQueryPanel.js +21 -0
- package/dist/routes/rules/components/rule-producers.d.ts +15 -0
- package/dist/routes/rules/components/rule-producers.d.ts.map +1 -0
- package/dist/routes/rules/components/rule-producers.js +76 -0
- package/dist/routes/rules/components/sample-facts-query.d.ts +9 -0
- package/dist/routes/rules/components/sample-facts-query.d.ts.map +1 -0
- package/dist/routes/rules/components/sample-facts-query.js +71 -0
- package/dist/routes/rules/datalog-editor.d.ts +6 -0
- package/dist/routes/rules/datalog-editor.d.ts.map +1 -0
- package/dist/routes/rules/datalog-editor.js +7 -0
- package/dist/routes/rules/hooks/useRuleFactsPreview.d.ts +53 -0
- package/dist/routes/rules/hooks/useRuleFactsPreview.d.ts.map +1 -0
- package/dist/routes/rules/hooks/useRuleFactsPreview.js +214 -0
- package/dist/routes/rules/hooks/useSparqlQueryExecution.d.ts +14 -0
- package/dist/routes/rules/hooks/useSparqlQueryExecution.d.ts.map +1 -0
- package/dist/routes/rules/hooks/useSparqlQueryExecution.js +77 -0
- package/dist/routes/rules/pages.d.ts +6 -0
- package/dist/routes/rules/pages.d.ts.map +1 -0
- package/dist/routes/rules/pages.js +7 -0
- package/dist/rules/RuleNameLink.d.ts +6 -0
- package/dist/rules/RuleNameLink.d.ts.map +1 -0
- package/dist/rules/RuleNameLink.js +8 -0
- package/package.json +64 -24
- package/src/globals.css +18 -18
- package/src/themes/manta-dark.css +1 -4
- package/src/themes/manta.css +1 -0
- package/src/themes/standard.css +12 -11
- package/dist/components/channel-icon/marketer-icon.d.ts +0 -4
- package/dist/components/channel-icon/marketer-icon.d.ts.map +0 -1
- package/dist/components/channel-icon/marketer-icon.js +0 -6
- package/dist/components/rdfox-explain/OutdatedFactNotice.d.ts.map +0 -1
- package/dist/components/rdfox-explain/RDFoxExplain.d.ts +0 -16
- package/dist/components/rdfox-explain/RDFoxExplain.d.ts.map +0 -1
- package/dist/components/tool-invocation-card/ExplainRDFoxResultDisplay.d.ts +0 -9
- package/dist/components/tool-invocation-card/ExplainRDFoxResultDisplay.d.ts.map +0 -1
- package/dist/lib/test-utils.d.ts +0 -4
- package/dist/lib/test-utils.d.ts.map +0 -1
- package/dist/lib/test-utils.js +0 -16
- package/dist/rdfox-explain/AbsentFactNotice.d.ts +0 -5
- package/dist/rdfox-explain/AbsentFactNotice.d.ts.map +0 -1
- package/dist/rdfox-explain/AbsentFactNotice.js +0 -6
- package/dist/rdfox-explain/DatalogCode.d.ts.map +0 -1
- package/dist/rdfox-explain/EntityChip.d.ts.map +0 -1
- package/dist/rdfox-explain/EntityChip.js +0 -9
- package/dist/rdfox-explain/ExplainCompactView.d.ts.map +0 -1
- package/dist/rdfox-explain/ExplainFullView.d.ts.map +0 -1
- package/dist/rdfox-explain/ExplainStates.d.ts.map +0 -1
- package/dist/rdfox-explain/ExplainTag.d.ts.map +0 -1
- package/dist/rdfox-explain/FactValue.d.ts.map +0 -1
- package/dist/rdfox-explain/NumDot.d.ts.map +0 -1
- package/dist/rdfox-explain/PanelLabel.d.ts.map +0 -1
- package/dist/rdfox-explain/ProofSubjectHeader.d.ts.map +0 -1
- package/dist/rdfox-explain/ProvenanceBadge.d.ts.map +0 -1
- package/dist/rdfox-explain/RDFoxExplainState.d.ts +0 -7
- package/dist/rdfox-explain/RDFoxExplainState.d.ts.map +0 -1
- package/dist/rdfox-explain/RuleVariableTypes.d.ts.map +0 -1
- package/dist/rdfox-explain/StoredFactNotice.d.ts +0 -5
- package/dist/rdfox-explain/StoredFactNotice.d.ts.map +0 -1
- package/dist/rdfox-explain/StoredFactNotice.js +0 -6
- package/dist/rdfox-explain/SubstitutedFactNotice.d.ts.map +0 -1
- package/dist/rdfox-explain/ValuePill.d.ts.map +0 -1
- package/dist/rdfox-explain/busy-aggregate-fixture.d.ts +0 -7
- package/dist/rdfox-explain/busy-aggregate-fixture.d.ts.map +0 -1
- package/dist/rdfox-explain/busy-aggregate-fixture.js +0 -6
- package/dist/rdfox-explain/conclusion/ConclusionCard.d.ts.map +0 -1
- package/dist/rdfox-explain/conclusion/ConclusionSubtitle.d.ts.map +0 -1
- package/dist/rdfox-explain/conclusion/index.d.ts.map +0 -1
- package/dist/rdfox-explain/explain-styles.d.ts.map +0 -1
- package/dist/rdfox-explain/fact-token.d.ts.map +0 -1
- package/dist/rdfox-explain/formula-hues.d.ts.map +0 -1
- package/dist/rdfox-explain/index.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/ExplainInspector.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/ExplainInspector.js +0 -22
- package/dist/rdfox-explain/inspector/InspectorBindings.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/InspectorFact.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/InspectorHeader.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/InspectorRule.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/SupportsSection.d.ts.map +0 -1
- package/dist/rdfox-explain/inspector/index.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofFactLabel.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofRowBadge.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofRowContent.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofRowValue.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofTree.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofTreeFormulaFooter.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/ProofTreeNode.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/SupportsTag.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/SupportsTag.js +0 -6
- package/dist/rdfox-explain/proof-tree/index.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/proof-tree-navigation.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/proof-tree-root-view.d.ts.map +0 -1
- package/dist/rdfox-explain/proof-tree/visible-premises.d.ts.map +0 -1
- package/dist/rdfox-explain/rule-presentation.d.ts.map +0 -1
- package/dist/rdfox-explain/tree-model.d.ts.map +0 -1
- package/dist/rdfox-explain/use-fact-measure.d.ts.map +0 -1
- package/dist/test-support.d.ts +0 -9
- package/dist/test-support.d.ts.map +0 -1
- package/dist/test-support.js +0 -18
- package/src/themes/marketer-dark.css +0 -70
- /package/dist/components/{rdfox-explain → explain-fact}/OutdatedFactNotice.d.ts +0 -0
- /package/dist/components/{rdfox-explain → explain-fact}/OutdatedFactNotice.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/DatalogCode.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/DatalogCode.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/EntityChip.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainCompactView.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainCompactView.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainFullView.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainFullView.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainStates.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainStates.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainTag.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ExplainTag.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/FactValue.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/FactValue.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/NumDot.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/NumDot.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/PanelLabel.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/PanelLabel.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ProofSubjectHeader.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ProofSubjectHeader.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ProvenanceBadge.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/RuleVariableTypes.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/RuleVariableTypes.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/SubstitutedFactNotice.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/SubstitutedFactNotice.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ValuePill.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/ValuePill.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/conclusion/ConclusionCard.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/conclusion/ConclusionCard.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/conclusion/ConclusionSubtitle.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/conclusion/index.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/conclusion/index.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/explain-styles.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/explain-styles.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/fact-token.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/fact-token.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/formula-hues.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/formula-hues.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/ExplainInspector.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/InspectorBindings.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/InspectorBindings.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/InspectorFact.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/InspectorFact.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/InspectorHeader.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/InspectorHeader.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/SupportsSection.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/index.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/inspector/index.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofFactLabel.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofFactLabel.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofRowBadge.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofRowBadge.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofRowContent.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofRowContent.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofRowValue.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofRowValue.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofTree.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofTreeFormulaFooter.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofTreeFormulaFooter.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofTreeNode.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/ProofTreeNode.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/SupportsTag.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/index.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/index.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/proof-tree-navigation.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/proof-tree-navigation.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/proof-tree-root-view.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/proof-tree-root-view.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/visible-premises.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/proof-tree/visible-premises.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/rule-presentation.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/rule-presentation.js +0 -0
- /package/dist/{rdfox-explain → explain-fact}/use-fact-measure.d.ts +0 -0
- /package/dist/{rdfox-explain → explain-fact}/use-fact-measure.js +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useAvailableTeamsQuery } from "@manta-eu/client";
|
|
3
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
4
|
+
import { ChevronDown, Users, X } from "lucide-react";
|
|
5
|
+
import { Button } from "#components/button/index";
|
|
6
|
+
import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxList, ComboboxTrigger, } from "#components/combobox/index";
|
|
7
|
+
import { useMantaClient } from "#providers/index";
|
|
8
|
+
function getTeamName(path) {
|
|
9
|
+
return path.split("/").filter(Boolean).pop() ?? path;
|
|
10
|
+
}
|
|
11
|
+
export function TeamPicker(props) {
|
|
12
|
+
const { selected, onChange, isOperator, error } = props;
|
|
13
|
+
const { mantaClient } = useMantaClient();
|
|
14
|
+
const { data } = useAvailableTeamsQuery(mantaClient, undefined, { enabled: isOperator });
|
|
15
|
+
const availableTeams = data?.availableTeams.teams.map((g) => g.name) ?? [];
|
|
16
|
+
function toggle(path) {
|
|
17
|
+
onChange(selected.includes(path) ? selected.filter((t) => t !== path) : [...selected, path]);
|
|
18
|
+
}
|
|
19
|
+
const triggerLabel = !isPresent(selected)
|
|
20
|
+
? "Select teams…"
|
|
21
|
+
: selected.length === 1
|
|
22
|
+
? getTeamName(selected[0] ?? "")
|
|
23
|
+
: `${selected.length} teams selected`;
|
|
24
|
+
return (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "typography-small text-default-foreground", children: "Target Teams" }), _jsxs(Combobox, { children: [_jsx(ComboboxTrigger, { asChild: true, children: _jsxs(Button, { variant: "tertiary", size: "base", rounded: "lg", className: "w-full justify-start", children: [_jsx(Users, { className: "size-4 shrink-0 text-muted-foreground" }), _jsx("span", { className: "flex-1 text-left truncate", children: triggerLabel }), _jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground" })] }) }), _jsxs(ComboboxContent, { align: "start", className: "w-full", children: [_jsx(ComboboxInput, { placeholder: "Search teams\u2026" }), _jsxs(ComboboxList, { children: [_jsx(ComboboxEmpty, { children: "No teams found" }), availableTeams.map((path) => (_jsx(ComboboxItem, { value: path, selected: selected.includes(path), closeOnSelect: false, onSelect: () => toggle(path), children: getTeamName(path) }, path)))] })] })] }), isPresent(selected) && (_jsx("div", { className: "flex flex-wrap gap-1.5 mt-1", children: selected.map((path) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full px-2 py-0.5 typography-tiny bg-accent/10 text-accent-foreground", children: [getTeamName(path), _jsx("button", { type: "button", onClick: () => toggle(path), className: "size-3 flex items-center justify-center hover:opacity-70", "aria-label": `Remove ${path}`, children: _jsx(X, { className: "size-2.5" }) })] }, path))) })), error && _jsx("p", { className: "typography-small text-error-foreground", children: error })] }));
|
|
25
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { GQLMemoryScope, type GQLMemoryKind } from "@manta-eu/client";
|
|
2
|
+
import { type MemoryPreloadCandidate } from "@manta-eu/client/shared/memory-preload-gate";
|
|
3
|
+
import { type MemoryWindowState } from "../expiry-utils.js";
|
|
4
|
+
export type ScopeBadgeProps = {
|
|
5
|
+
scope: GQLMemoryScope;
|
|
6
|
+
};
|
|
7
|
+
export declare function ScopeBadge(props: ScopeBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function AutoCapturedBadge(props: {
|
|
9
|
+
confidence: number;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export type DuplicateMatch = {
|
|
12
|
+
label: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function DuplicateBadge(props: {
|
|
16
|
+
matches: DuplicateMatch[];
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
export type KindBadgeProps = {
|
|
19
|
+
kind: GQLMemoryKind;
|
|
20
|
+
};
|
|
21
|
+
export declare function KindBadge(props: KindBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export type SchemaBadgeProps = {
|
|
23
|
+
label?: string | null;
|
|
24
|
+
};
|
|
25
|
+
export declare function SchemaBadge(props: SchemaBadgeProps): import("react/jsx-runtime").JSX.Element | null;
|
|
26
|
+
export type OutOfWindowBadgeProps = {
|
|
27
|
+
state: Exclude<MemoryWindowState, "active">;
|
|
28
|
+
};
|
|
29
|
+
export declare function OutOfWindowBadge(props: OutOfWindowBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export type PreloadedBadgeProps = {
|
|
31
|
+
memory: MemoryPreloadCandidate;
|
|
32
|
+
};
|
|
33
|
+
export type PreloadBadgeTone = "pinned" | "heldOut" | "unreachable";
|
|
34
|
+
export type PreloadBadgeContent = {
|
|
35
|
+
label: "Pinned" | "Unconfirmed" | "Unreachable" | "Cold";
|
|
36
|
+
preloaded: boolean;
|
|
37
|
+
tone: PreloadBadgeTone;
|
|
38
|
+
why: string;
|
|
39
|
+
};
|
|
40
|
+
export declare function preloadBadgeContent(memory: MemoryPreloadCandidate, now?: Date): PreloadBadgeContent | null;
|
|
41
|
+
export declare function PreloadedBadge(props: PreloadedBadgeProps): import("react/jsx-runtime").JSX.Element | null;
|
|
42
|
+
export type MemoryEvidenceProps = {
|
|
43
|
+
evidence?: string | null;
|
|
44
|
+
};
|
|
45
|
+
export declare function MemoryEvidence(props: MemoryEvidenceProps): import("react/jsx-runtime").JSX.Element | null;
|
|
46
|
+
export type MemoryAboutProps = {
|
|
47
|
+
aboutEntityIris?: string[] | null;
|
|
48
|
+
};
|
|
49
|
+
export declare function MemoryAbout(props: MemoryAboutProps): import("react/jsx-runtime").JSX.Element | null;
|
|
50
|
+
//# sourceMappingURL=badges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badges.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/components/badges.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAKL,KAAK,sBAAsB,EAC5B,MAAM,6CAA6C,CAAC;AAKrD,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKlF,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAExD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAahD;AAeD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,2CAa9D;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,kDAwBlE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAQ9C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,kDASlD;AAaD,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;CAAE,CAAC;AAEpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAa5D;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,mBAAmB,GAAG,IAAI,CAc1G;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAcxD;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAkBxD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAErE,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,kDAclD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { GQLMemoryScope } from "@manta-eu/client";
|
|
3
|
+
import { describeMemoryPreloadExclusions, isMemoryArchived, isMemorySearchable, memoryPreloadExclusions, } from "@manta-eu/client/shared/memory-preload-gate";
|
|
4
|
+
import { formatEntityName } from "@manta-eu/client/shared/rdf-namespaces";
|
|
5
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
6
|
+
import { CopyCheck, Link2, Quote } from "lucide-react";
|
|
7
|
+
import { match, P } from "ts-pattern";
|
|
8
|
+
import { unconfirmedHorizonLabel } from "../expiry-utils.js";
|
|
9
|
+
import { Badge } from "#components/badge/index";
|
|
10
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "#components/tooltip/index";
|
|
11
|
+
import { cn } from "#lib/utils";
|
|
12
|
+
export function ScopeBadge(props) {
|
|
13
|
+
const { scope } = props;
|
|
14
|
+
const { className, label } = match(scope)
|
|
15
|
+
.with(GQLMemoryScope.Company, () => ({ className: "bg-accent/10 text-accent-foreground", label: "Company" }))
|
|
16
|
+
.with(GQLMemoryScope.Team, () => ({ className: "bg-warning/10 text-warning-foreground", label: "Team" }))
|
|
17
|
+
.with(GQLMemoryScope.User, () => ({ className: "bg-muted-foreground/10 text-muted-foreground", label: "Personal" }))
|
|
18
|
+
.exhaustive();
|
|
19
|
+
return (_jsx(Badge, { size: "sm", className: className, children: label }));
|
|
20
|
+
}
|
|
21
|
+
function autoCapturedTooltip(confidence) {
|
|
22
|
+
const pct = Math.round(confidence * 100);
|
|
23
|
+
const prefix = `Auto-captured from chat history (${pct}% confidence).`;
|
|
24
|
+
// TODO: revisit these confidence tiers/copy - refine until good enough or drop entirely.
|
|
25
|
+
const note = match(confidence)
|
|
26
|
+
.with(P.number.gte(0.9), () => "Likely accurate, but worth a quick glance.")
|
|
27
|
+
.with(P.number.gte(0.7), () => "Decent signal - review before relying on it.")
|
|
28
|
+
.with(P.number.gte(0.5), () => "Moderate confidence - verify this.")
|
|
29
|
+
.otherwise(() => "Low confidence - treat with caution.");
|
|
30
|
+
return `${prefix} ${note}`;
|
|
31
|
+
}
|
|
32
|
+
export function AutoCapturedBadge(props) {
|
|
33
|
+
const { confidence } = props;
|
|
34
|
+
const pct = Math.round(confidence * 100);
|
|
35
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Badge, { size: "sm", className: "bg-faint border border-muted-border text-muted-foreground cursor-default", children: ["Captured \u00B7 ", pct, "%"] }) }), _jsx(TooltipContent, { className: "max-w-xs typography-small", children: autoCapturedTooltip(confidence) })] }));
|
|
36
|
+
}
|
|
37
|
+
export function DuplicateBadge(props) {
|
|
38
|
+
const { matches } = props;
|
|
39
|
+
if (!isPresent(matches))
|
|
40
|
+
return null;
|
|
41
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Badge, { size: "sm", className: "bg-warning/10 text-warning-foreground border border-warning/30 cursor-default", children: [_jsx(CopyCheck, { className: "size-3" }), "Possible duplicate"] }) }), _jsx(TooltipContent, { className: "max-w-xs typography-small text-left", children: _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground", children: "Looks like it duplicates:" }), matches.map((match) => (_jsxs("div", { children: [_jsx("span", { className: "typography-small-medium", children: match.label }), match.reason ? ` - ${match.reason}` : ""] }, match.label)))] }) })] }));
|
|
42
|
+
}
|
|
43
|
+
export function KindBadge(props) {
|
|
44
|
+
const { kind } = props;
|
|
45
|
+
return (_jsx(Badge, { size: "sm", variant: "secondary", className: "capitalize", children: kind }));
|
|
46
|
+
}
|
|
47
|
+
export function SchemaBadge(props) {
|
|
48
|
+
const { label } = props;
|
|
49
|
+
if (!label)
|
|
50
|
+
return null;
|
|
51
|
+
return (_jsx(Badge, { size: "sm", variant: "secondary", className: "max-w-[28ch] truncate", title: label, children: label }));
|
|
52
|
+
}
|
|
53
|
+
const outOfWindowCopy = {
|
|
54
|
+
expired: {
|
|
55
|
+
label: "Expired",
|
|
56
|
+
why: "Its expiry date has passed, so the agent can neither pre-load nor search it. Nothing was deleted — edit the expiry date to bring it back.",
|
|
57
|
+
},
|
|
58
|
+
scheduled: {
|
|
59
|
+
label: "Scheduled",
|
|
60
|
+
why: "Its start date is in the future, so the agent cannot use it yet. Edit the start date to bring it forward.",
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
export function OutOfWindowBadge(props) {
|
|
64
|
+
const { label, why } = outOfWindowCopy[props.state];
|
|
65
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Badge, { size: "sm", className: "bg-warning/10 text-warning-foreground border border-warning/30 cursor-default", children: label }) }), _jsx(TooltipContent, { className: "max-w-xs typography-small", children: why })] }));
|
|
66
|
+
}
|
|
67
|
+
export function preloadBadgeContent(memory, now) {
|
|
68
|
+
if (isMemoryArchived(memory))
|
|
69
|
+
return null;
|
|
70
|
+
const exclusions = memoryPreloadExclusions(memory, now);
|
|
71
|
+
const preloaded = !isPresent(exclusions);
|
|
72
|
+
const why = describeMemoryPreloadExclusions(memory, exclusions);
|
|
73
|
+
if (preloaded)
|
|
74
|
+
return { label: "Pinned", preloaded, tone: "pinned", why };
|
|
75
|
+
if (!isMemorySearchable(memory))
|
|
76
|
+
return { label: "Unreachable", preloaded, tone: "unreachable", why };
|
|
77
|
+
if (exclusions.includes("importance"))
|
|
78
|
+
return null;
|
|
79
|
+
if (exclusions.length === 1 && exclusions[0] === "cold") {
|
|
80
|
+
return { label: "Cold", preloaded, tone: "heldOut", why };
|
|
81
|
+
}
|
|
82
|
+
return { label: unconfirmedHorizonLabel, preloaded, tone: "heldOut", why };
|
|
83
|
+
}
|
|
84
|
+
const preloadBadgeToneClass = {
|
|
85
|
+
pinned: "bg-faint border-muted-border text-default-foreground",
|
|
86
|
+
heldOut: "bg-muted-foreground/10 border-muted-border text-muted-foreground",
|
|
87
|
+
unreachable: "bg-warning/10 border-warning/30 text-warning-foreground",
|
|
88
|
+
};
|
|
89
|
+
export function PreloadedBadge(props) {
|
|
90
|
+
const content = preloadBadgeContent(props.memory);
|
|
91
|
+
if (!content)
|
|
92
|
+
return null;
|
|
93
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Badge, { size: "sm", className: cn("border cursor-default", preloadBadgeToneClass[content.tone]), children: content.label }) }), _jsx(TooltipContent, { className: "max-w-xs typography-small", children: content.why })] }));
|
|
94
|
+
}
|
|
95
|
+
export function MemoryEvidence(props) {
|
|
96
|
+
const { evidence } = props;
|
|
97
|
+
if (!isPresent(evidence))
|
|
98
|
+
return null;
|
|
99
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "mt-1 flex cursor-default items-start gap-1.5 border-l-2 border-muted-border pl-2 typography-tiny italic text-muted-foreground", children: [_jsx(Quote, { className: "mt-0.5 size-3 shrink-0" }), _jsx("span", { className: "line-clamp-2 break-words", children: evidence })] }) }), _jsx(TooltipContent, { className: "max-w-xs typography-small text-left", children: "What the user said that this memory was extracted from. Chat history is deleted after 30 days, so this quote stays as the record of where the memory came from." })] }));
|
|
100
|
+
}
|
|
101
|
+
export function MemoryAbout(props) {
|
|
102
|
+
const { aboutEntityIris } = props;
|
|
103
|
+
if (!isPresent(aboutEntityIris))
|
|
104
|
+
return null;
|
|
105
|
+
return (_jsxs("span", { className: "mt-1 flex flex-wrap items-center gap-1", children: [_jsx(Link2, { className: "size-3 shrink-0 text-muted-foreground" }), aboutEntityIris.map((iri) => (_jsx(Badge, { size: "sm", variant: "secondary", className: "max-w-[24ch] truncate", title: iri, children: formatEntityName(iri) }, iri)))] }));
|
|
106
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare function formatExpiryRelative(expiresAt: Date | string | null | undefined, now?: Date): string;
|
|
2
|
+
export declare function formatExpiryDate(expiresAt: Date | string | null | undefined, now?: Date): string;
|
|
3
|
+
export type MemoryHorizon = {
|
|
4
|
+
kind: "none";
|
|
5
|
+
at: null;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "expiry";
|
|
8
|
+
at: Date | string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: "trust";
|
|
11
|
+
at: Date | string;
|
|
12
|
+
};
|
|
13
|
+
export declare function memoryHorizon(memoryValidUntil: Date | string | null | undefined, memoryTrustedUntil: Date | string | null | undefined): MemoryHorizon;
|
|
14
|
+
export type MemoryWindowState = "active" | "expired" | "scheduled";
|
|
15
|
+
export declare function memoryWindowState(memoryValidFrom: Date | string | null | undefined, memoryValidUntil: Date | string | null | undefined, now?: Date): MemoryWindowState;
|
|
16
|
+
export declare function isTrustExpired(memoryTrustedUntil: Date | string | null | undefined, now?: Date): boolean;
|
|
17
|
+
export declare const unconfirmedHorizonLabel = "Unconfirmed";
|
|
18
|
+
export declare function formatHorizonDate(horizon: MemoryHorizon, now?: Date): string;
|
|
19
|
+
export declare function formatHorizonRelative(horizon: MemoryHorizon, now?: Date): string;
|
|
20
|
+
export declare function compareMemoryHorizons(a: MemoryHorizon, b: MemoryHorizon): number;
|
|
21
|
+
export declare function shouldShowValidFrom(updatedAt: Date | string | null | undefined, memoryValidFrom: Date | string | null | undefined): boolean;
|
|
22
|
+
export declare function formatHorizonTooltip(horizon: MemoryHorizon, now?: Date): string;
|
|
23
|
+
//# sourceMappingURL=expiry-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry-utils.d.ts","sourceRoot":"","sources":["../../../src/routes/memories/expiry-utils.ts"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAQhH;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAK5G;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAAC;AAEzC,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAClD,kBAAkB,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GACnD,aAAa,CAIf;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAEnE,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACjD,gBAAgB,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAClD,GAAG,GAAE,IAAiB,GACrB,iBAAiB,CAMnB;AAGD,wBAAgB,cAAc,CAAC,kBAAkB,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAEpH;AAED,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAUxF;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAM5F;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAKhF;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC3C,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAChD,OAAO,CAKT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAU3F"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { isPastTrustedUntilAt, parseMemoryDate, validFromWorthShowingDays, } from "@manta-eu/client/shared/memory-preload-gate";
|
|
2
|
+
import { differenceInCalendarDays, format } from "date-fns";
|
|
3
|
+
import { match } from "ts-pattern";
|
|
4
|
+
// Compares by timestamp, not calendar day, so a memory expiring tonight is not expired yet.
|
|
5
|
+
export function formatExpiryRelative(expiresAt, now = new Date()) {
|
|
6
|
+
const at = parseMemoryDate(expiresAt);
|
|
7
|
+
if (!at)
|
|
8
|
+
return "Never expires";
|
|
9
|
+
if (at.getTime() <= now.getTime())
|
|
10
|
+
return "Expired";
|
|
11
|
+
const days = differenceInCalendarDays(at, now);
|
|
12
|
+
if (days <= 0)
|
|
13
|
+
return "Expires today";
|
|
14
|
+
if (days === 1)
|
|
15
|
+
return "Expires tomorrow";
|
|
16
|
+
return `Expires in ${days}d`;
|
|
17
|
+
}
|
|
18
|
+
export function formatExpiryDate(expiresAt, now = new Date()) {
|
|
19
|
+
const at = parseMemoryDate(expiresAt);
|
|
20
|
+
if (!at)
|
|
21
|
+
return "Never";
|
|
22
|
+
if (at.getTime() <= now.getTime())
|
|
23
|
+
return "Expired";
|
|
24
|
+
return format(at, "MMM d, yyyy");
|
|
25
|
+
}
|
|
26
|
+
export function memoryHorizon(memoryValidUntil, memoryTrustedUntil) {
|
|
27
|
+
if (memoryValidUntil)
|
|
28
|
+
return { kind: "expiry", at: memoryValidUntil };
|
|
29
|
+
if (memoryTrustedUntil)
|
|
30
|
+
return { kind: "trust", at: memoryTrustedUntil };
|
|
31
|
+
return { kind: "none", at: null };
|
|
32
|
+
}
|
|
33
|
+
export function memoryWindowState(memoryValidFrom, memoryValidUntil, now = new Date()) {
|
|
34
|
+
const until = parseMemoryDate(memoryValidUntil);
|
|
35
|
+
if (until && until.getTime() <= now.getTime())
|
|
36
|
+
return "expired";
|
|
37
|
+
const from = parseMemoryDate(memoryValidFrom);
|
|
38
|
+
if (from && from.getTime() > now.getTime())
|
|
39
|
+
return "scheduled";
|
|
40
|
+
return "active";
|
|
41
|
+
}
|
|
42
|
+
// Past horizon means the data is still valid and never deleted, just no longer relied on.
|
|
43
|
+
export function isTrustExpired(memoryTrustedUntil, now = new Date()) {
|
|
44
|
+
return isPastTrustedUntilAt(memoryTrustedUntil, now);
|
|
45
|
+
}
|
|
46
|
+
export const unconfirmedHorizonLabel = "Unconfirmed";
|
|
47
|
+
export function formatHorizonDate(horizon, now = new Date()) {
|
|
48
|
+
return match(horizon)
|
|
49
|
+
.with({ kind: "none" }, () => "Never")
|
|
50
|
+
.with({ kind: "expiry" }, ({ at }) => formatExpiryDate(at, now))
|
|
51
|
+
.with({ kind: "trust" }, ({ at }) => {
|
|
52
|
+
const parsed = parseMemoryDate(at);
|
|
53
|
+
if (!parsed)
|
|
54
|
+
return "Never";
|
|
55
|
+
return isTrustExpired(at, now) ? unconfirmedHorizonLabel : `~${format(parsed, "MMM d, yyyy")}`;
|
|
56
|
+
})
|
|
57
|
+
.exhaustive();
|
|
58
|
+
}
|
|
59
|
+
function trustedForLabel(at, now) {
|
|
60
|
+
const parsed = parseMemoryDate(at);
|
|
61
|
+
if (!parsed)
|
|
62
|
+
return "Never expires";
|
|
63
|
+
const days = differenceInCalendarDays(parsed, now);
|
|
64
|
+
if (days <= 0)
|
|
65
|
+
return "Trusted until today";
|
|
66
|
+
return days === 1 ? "Trusted until tomorrow" : `Trusted for ${days}d`;
|
|
67
|
+
}
|
|
68
|
+
export function formatHorizonRelative(horizon, now = new Date()) {
|
|
69
|
+
return match(horizon)
|
|
70
|
+
.with({ kind: "none" }, () => "Never expires")
|
|
71
|
+
.with({ kind: "expiry" }, ({ at }) => formatExpiryRelative(at, now))
|
|
72
|
+
.with({ kind: "trust" }, ({ at }) => (isTrustExpired(at, now) ? unconfirmedHorizonLabel : trustedForLabel(at, now)))
|
|
73
|
+
.exhaustive();
|
|
74
|
+
}
|
|
75
|
+
export function compareMemoryHorizons(a, b) {
|
|
76
|
+
const left = parseMemoryDate(a.at);
|
|
77
|
+
const right = parseMemoryDate(b.at);
|
|
78
|
+
if (!left || !right)
|
|
79
|
+
return left ? -1 : right ? 1 : 0;
|
|
80
|
+
return left.getTime() - right.getTime();
|
|
81
|
+
}
|
|
82
|
+
export function shouldShowValidFrom(updatedAt, memoryValidFrom) {
|
|
83
|
+
const since = parseMemoryDate(memoryValidFrom);
|
|
84
|
+
const recorded = parseMemoryDate(updatedAt);
|
|
85
|
+
if (!since || !recorded)
|
|
86
|
+
return false;
|
|
87
|
+
return differenceInCalendarDays(recorded, since) >= validFromWorthShowingDays;
|
|
88
|
+
}
|
|
89
|
+
export function formatHorizonTooltip(horizon, now = new Date()) {
|
|
90
|
+
return match(horizon)
|
|
91
|
+
.with({ kind: "none" }, () => "Never expires")
|
|
92
|
+
.with({ kind: "expiry" }, ({ at }) => `No longer true after this date. ${formatExpiryRelative(at, now)}`)
|
|
93
|
+
.with({ kind: "trust" }, (trust) => isTrustExpired(trust.at, now)
|
|
94
|
+
? "Past the date it was trusted until, so it no longer pre-loads into conversations. Still true, still searchable, and never deleted."
|
|
95
|
+
: `Stops pre-loading into conversations after this date, but stays searchable. ${formatHorizonRelative(trust, now)}`)
|
|
96
|
+
.exhaustive();
|
|
97
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GQLMemoryScope, type GQLConflictingMemory } from "@manta-eu/client";
|
|
2
|
+
export type ConflictCheckInput = {
|
|
3
|
+
label: string;
|
|
4
|
+
description: string;
|
|
5
|
+
scope: GQLMemoryScope;
|
|
6
|
+
teams?: string[];
|
|
7
|
+
excludeIri?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ConflictCheckResult = {
|
|
10
|
+
conflicts: GQLConflictingMemory[];
|
|
11
|
+
timedOut: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type UseConflictCheckResult = {
|
|
14
|
+
check: (input: ConflictCheckInput) => Promise<ConflictCheckResult>;
|
|
15
|
+
isChecking: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare function useConflictCheck(): UseConflictCheckResult;
|
|
18
|
+
//# sourceMappingURL=useConflictCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConflictCheck.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/hooks/useConflictCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,KAAK,oBAAoB,EAG1B,MAAM,kBAAkB,CAAC;AAM1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnE,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,sBAAsB,CAmCzD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DetectMemoryConflictsDocument, GQLMemoryScope, } from "@manta-eu/client";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { useMantaClient } from "#providers/index";
|
|
4
|
+
const conflictCheckTimeoutMs = 15_000;
|
|
5
|
+
export function useConflictCheck() {
|
|
6
|
+
const { mantaClient } = useMantaClient();
|
|
7
|
+
const [isChecking, setIsChecking] = useState(false);
|
|
8
|
+
const check = useCallback(async (input) => {
|
|
9
|
+
setIsChecking(true);
|
|
10
|
+
try {
|
|
11
|
+
const result = await mantaClient.request({
|
|
12
|
+
document: DetectMemoryConflictsDocument,
|
|
13
|
+
variables: {
|
|
14
|
+
input: {
|
|
15
|
+
label: input.label,
|
|
16
|
+
description: input.description,
|
|
17
|
+
scope: input.scope,
|
|
18
|
+
teams: input.scope === GQLMemoryScope.Team ? (input.teams ?? []) : undefined,
|
|
19
|
+
excludeIri: input.excludeIri ?? undefined,
|
|
20
|
+
wantToStopAfterMs: conflictCheckTimeoutMs,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
signal: AbortSignal.timeout(conflictCheckTimeoutMs + 5_000),
|
|
24
|
+
});
|
|
25
|
+
return result.detectMemoryConflicts;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return { conflicts: [], timedOut: false };
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
setIsChecking(false);
|
|
32
|
+
}
|
|
33
|
+
}, [mantaClient]);
|
|
34
|
+
return { check, isChecking };
|
|
35
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GQLConflictingMemory, GQLMemory } from "@manta-eu/client";
|
|
2
|
+
export type DuplicateMatches = Map<string, GQLConflictingMemory[]>;
|
|
3
|
+
export declare function pickDuplicateTargets(memories: GQLMemory[], max?: number): GQLMemory[];
|
|
4
|
+
export declare function useDuplicateDetection(memories: GQLMemory[], options?: {
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
max?: number;
|
|
7
|
+
}): {
|
|
8
|
+
duplicates: DuplicateMatches;
|
|
9
|
+
isDetecting: boolean;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useDuplicateDetection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDuplicateDetection.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/hooks/useDuplicateDetection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKxE,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAOnE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,GAAE,MAAyB,GAAG,SAAS,EAAE,CAEvG;AAeD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD;IAAE,UAAU,EAAE,gBAAgB,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAyDxD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useConflictCheck } from "./useConflictCheck.js";
|
|
4
|
+
// Caps how many memories run semantic detection in one pass, so a large unreviewed queue
|
|
5
|
+
// cannot fan out into an unbounded number of detection calls.
|
|
6
|
+
const defaultMaxChecks = 25;
|
|
7
|
+
// Only memories with a description carry enough signal for semantic comparison.
|
|
8
|
+
export function pickDuplicateTargets(memories, max = defaultMaxChecks) {
|
|
9
|
+
return memories.filter((m) => isPresent(m.description)).slice(0, max);
|
|
10
|
+
}
|
|
11
|
+
function buildMemoryKey(memory) {
|
|
12
|
+
return `${memory.iri}:${memory.scope}:${memory.label}:${memory.description ?? ""}`;
|
|
13
|
+
}
|
|
14
|
+
function targetSignature(memories) {
|
|
15
|
+
return memories.map(buildMemoryKey).join("|");
|
|
16
|
+
}
|
|
17
|
+
// Runs the existing semantic conflict check (SEMSIM recall pre-filter + LLM precision judge)
|
|
18
|
+
// across a set of memories and returns, per memory IRI, the existing memories it likely
|
|
19
|
+
// duplicates. Results are cached by IRI+label+description so re-renders and tab switches do
|
|
20
|
+
// not re-issue detection for unchanged memories. Nothing is mutated — this only surfaces
|
|
21
|
+
// candidates; the user still confirms any supersession in the review dialog.
|
|
22
|
+
export function useDuplicateDetection(memories, options = {}) {
|
|
23
|
+
const { enabled = true, max = defaultMaxChecks } = options;
|
|
24
|
+
const { check } = useConflictCheck();
|
|
25
|
+
const targets = useMemo(() => (enabled ? pickDuplicateTargets(memories, max) : []), [memories, enabled, max]);
|
|
26
|
+
const signature = useMemo(() => targetSignature(targets), [targets]);
|
|
27
|
+
const [duplicates, setDuplicates] = useState(new Map());
|
|
28
|
+
const [isDetecting, setIsDetecting] = useState(false);
|
|
29
|
+
const cacheRef = useRef(new Map());
|
|
30
|
+
const checkRef = useRef(check);
|
|
31
|
+
checkRef.current = check;
|
|
32
|
+
const targetsRef = useRef(targets);
|
|
33
|
+
targetsRef.current = targets;
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const current = targetsRef.current;
|
|
36
|
+
if (!isPresent(current)) {
|
|
37
|
+
setDuplicates(new Map());
|
|
38
|
+
setIsDetecting(false);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
let cancelled = false;
|
|
42
|
+
setIsDetecting(true);
|
|
43
|
+
void (async () => {
|
|
44
|
+
const next = new Map();
|
|
45
|
+
for (const memory of current) {
|
|
46
|
+
const key = buildMemoryKey(memory);
|
|
47
|
+
let conflicts = cacheRef.current.get(key);
|
|
48
|
+
if (conflicts == null) {
|
|
49
|
+
const result = await checkRef.current({
|
|
50
|
+
label: memory.label,
|
|
51
|
+
description: memory.description ?? "",
|
|
52
|
+
scope: memory.scope,
|
|
53
|
+
excludeIri: memory.iri,
|
|
54
|
+
});
|
|
55
|
+
if (cancelled)
|
|
56
|
+
return;
|
|
57
|
+
conflicts = result.conflicts;
|
|
58
|
+
cacheRef.current.set(key, conflicts);
|
|
59
|
+
}
|
|
60
|
+
if (isPresent(conflicts))
|
|
61
|
+
next.set(memory.iri, conflicts);
|
|
62
|
+
}
|
|
63
|
+
if (!cancelled) {
|
|
64
|
+
setDuplicates(next);
|
|
65
|
+
setIsDetecting(false);
|
|
66
|
+
}
|
|
67
|
+
})();
|
|
68
|
+
return () => {
|
|
69
|
+
cancelled = true;
|
|
70
|
+
};
|
|
71
|
+
}, [signature]);
|
|
72
|
+
return { duplicates, isDetecting };
|
|
73
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type SparqlJsonResults } from "@manta-eu/client/types/sparql-types";
|
|
2
|
+
export declare const liveContextSelectQuery = "SELECT ?entity ?property ?value WHERE {\n :LiveContext_Chat :includes ?entity .\n ?entity ?property ?value .\n FILTER NOT EXISTS {\n ?entity a :Memory .\n {\n ?entity :memoryTrustedUntil ?horizon .\n FILTER(?horizon <= NOW())\n } UNION {\n ?entity :memoryValidUntil ?expiry .\n FILTER(?expiry <= NOW())\n } UNION {\n ?entity :memoryValidFrom ?validFrom .\n FILTER(?validFrom > NOW())\n }\n }\n}";
|
|
3
|
+
export type EntityProperty = {
|
|
4
|
+
predicate: string;
|
|
5
|
+
value: string;
|
|
6
|
+
isUri: boolean;
|
|
7
|
+
datatype?: string;
|
|
8
|
+
};
|
|
9
|
+
export type LiveContextEntity = {
|
|
10
|
+
iri: string;
|
|
11
|
+
compactedIri: string;
|
|
12
|
+
types: string[];
|
|
13
|
+
properties: EntityProperty[];
|
|
14
|
+
};
|
|
15
|
+
export type LiveContextGroup = {
|
|
16
|
+
type: string;
|
|
17
|
+
typeLabel: string;
|
|
18
|
+
entities: LiveContextEntity[];
|
|
19
|
+
};
|
|
20
|
+
export declare function parseLiveContext(data: SparqlJsonResults): LiveContextGroup[];
|
|
21
|
+
export declare const liveContextQueryKey: readonly ["live-context"];
|
|
22
|
+
export declare function useLiveContext(): import("@tanstack/react-query").UseQueryResult<LiveContextGroup[], Error>;
|
|
23
|
+
//# sourceMappingURL=useLiveContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveContext.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/hooks/useLiveContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAOtH,eAAO,MAAM,sBAAsB,gfAIjC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CA+D5E;AAED,eAAO,MAAM,mBAAmB,2BAA4B,CAAC;AAE7D,wBAAgB,cAAc,8EAwB7B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { liveContextMemoryDateFilter } from "@manta-eu/client/shared/live-context";
|
|
2
|
+
import { compactUri, prependMissingSparqlPrefixes } from "@manta-eu/client/shared/rdf-namespaces";
|
|
3
|
+
import { isSparqlJsonResults } from "@manta-eu/client/types/sparql-types";
|
|
4
|
+
import { useQuery } from "@tanstack/react-query";
|
|
5
|
+
import { useMantaClient } from "#providers/index";
|
|
6
|
+
const rdfTypeIri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
7
|
+
const trivialTypePrefixes = ["rdf:", "rdfs:", "owl:", "xsd:"];
|
|
8
|
+
export const liveContextSelectQuery = `SELECT ?entity ?property ?value WHERE {
|
|
9
|
+
:LiveContext_Chat :includes ?entity .
|
|
10
|
+
?entity ?property ?value .
|
|
11
|
+
${liveContextMemoryDateFilter}
|
|
12
|
+
}`;
|
|
13
|
+
function formatTypeLabel(compacted) {
|
|
14
|
+
const localName = compacted.includes(":") ? (compacted.split(":")[1] ?? compacted) : compacted;
|
|
15
|
+
return localName.replace(/([A-Z])/g, " $1").trim();
|
|
16
|
+
}
|
|
17
|
+
function sparqlValueIsUri(node) {
|
|
18
|
+
return node.type === "uri";
|
|
19
|
+
}
|
|
20
|
+
function sparqlValueDatatype(node) {
|
|
21
|
+
if ("datatype" in node && typeof node.datatype === "string") {
|
|
22
|
+
return node.datatype;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
export function parseLiveContext(data) {
|
|
27
|
+
const entityMap = new Map();
|
|
28
|
+
for (const binding of data.results.bindings) {
|
|
29
|
+
const entityNode = binding["entity"];
|
|
30
|
+
const propertyNode = binding["property"];
|
|
31
|
+
const valueNode = binding["value"];
|
|
32
|
+
if (!entityNode || !propertyNode || !valueNode)
|
|
33
|
+
continue;
|
|
34
|
+
const entityIri = entityNode.value;
|
|
35
|
+
const propertyIri = propertyNode.value;
|
|
36
|
+
if (!entityMap.has(entityIri)) {
|
|
37
|
+
entityMap.set(entityIri, { types: [], properties: [] });
|
|
38
|
+
}
|
|
39
|
+
const entry = entityMap.get(entityIri);
|
|
40
|
+
if (!entry)
|
|
41
|
+
continue;
|
|
42
|
+
if (propertyIri === rdfTypeIri) {
|
|
43
|
+
const compacted = compactUri(valueNode.value);
|
|
44
|
+
if (!trivialTypePrefixes.some((p) => compacted.startsWith(p))) {
|
|
45
|
+
if (!entry.types.includes(compacted)) {
|
|
46
|
+
entry.types.push(compacted);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const isUri = sparqlValueIsUri(valueNode);
|
|
52
|
+
entry.properties.push({
|
|
53
|
+
predicate: compactUri(propertyIri),
|
|
54
|
+
value: isUri ? compactUri(valueNode.value) : valueNode.value,
|
|
55
|
+
isUri,
|
|
56
|
+
datatype: sparqlValueDatatype(valueNode),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const groupMap = new Map();
|
|
61
|
+
for (const [iri, { types, properties }] of entityMap) {
|
|
62
|
+
const primaryType = types[0] ?? "Unknown";
|
|
63
|
+
if (!groupMap.has(primaryType)) {
|
|
64
|
+
groupMap.set(primaryType, {
|
|
65
|
+
type: primaryType,
|
|
66
|
+
typeLabel: formatTypeLabel(primaryType),
|
|
67
|
+
entities: [],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const group = groupMap.get(primaryType);
|
|
71
|
+
if (!group)
|
|
72
|
+
continue;
|
|
73
|
+
group.entities.push({
|
|
74
|
+
iri,
|
|
75
|
+
compactedIri: compactUri(iri),
|
|
76
|
+
types,
|
|
77
|
+
properties: [...properties].sort((a, b) => a.predicate.localeCompare(b.predicate)),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return [...groupMap.values()].sort((a, b) => a.typeLabel.localeCompare(b.typeLabel));
|
|
81
|
+
}
|
|
82
|
+
export const liveContextQueryKey = ["live-context"];
|
|
83
|
+
export function useLiveContext() {
|
|
84
|
+
const { sparqlFetch, onUnauthorized } = useMantaClient();
|
|
85
|
+
return useQuery({
|
|
86
|
+
queryKey: liveContextQueryKey,
|
|
87
|
+
queryFn: async () => {
|
|
88
|
+
const response = await sparqlFetch(prependMissingSparqlPrefixes(liveContextSelectQuery));
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
if (response.status === 401) {
|
|
91
|
+
onUnauthorized();
|
|
92
|
+
}
|
|
93
|
+
throw new Error(`SPARQL query failed: ${response.status}`);
|
|
94
|
+
}
|
|
95
|
+
const raw = await response.json();
|
|
96
|
+
if (!isSparqlJsonResults(raw)) {
|
|
97
|
+
throw new Error("Invalid SPARQL results format");
|
|
98
|
+
}
|
|
99
|
+
return parseLiveContext(raw);
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type GQLConflictingMemory, type GQLMemory, type GQLMemorySchema } from "@manta-eu/client";
|
|
2
|
+
import type { ColumnDef } from "@tanstack/react-table";
|
|
3
|
+
export declare const memoryColumnIds: {
|
|
4
|
+
readonly label: "label";
|
|
5
|
+
readonly description: "description";
|
|
6
|
+
readonly kind: "kind";
|
|
7
|
+
readonly teams: "teams";
|
|
8
|
+
readonly used: "used";
|
|
9
|
+
readonly actions: "actions";
|
|
10
|
+
};
|
|
11
|
+
export type MemoryColumnId = (typeof memoryColumnIds)[keyof typeof memoryColumnIds];
|
|
12
|
+
export declare const memoryColumnLabels: {
|
|
13
|
+
label: string;
|
|
14
|
+
description: string;
|
|
15
|
+
kind: string;
|
|
16
|
+
teams: string;
|
|
17
|
+
used: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const defaultColumnOrder: string[];
|
|
20
|
+
type UseMemoryColumnsArgs = {
|
|
21
|
+
isOperator?: boolean;
|
|
22
|
+
userId: string;
|
|
23
|
+
schemas?: GQLMemorySchema[];
|
|
24
|
+
onEdit: (memory: GQLMemory) => void;
|
|
25
|
+
onDelete: (iri: string) => void;
|
|
26
|
+
onMove?: (memory: GQLMemory) => void;
|
|
27
|
+
onRestore?: (iri: string) => void;
|
|
28
|
+
onReconfirm?: (iri: string) => void;
|
|
29
|
+
duplicates?: Map<string, GQLConflictingMemory[]>;
|
|
30
|
+
};
|
|
31
|
+
export declare function useMemoryColumns(args: UseMemoryColumnsArgs): ColumnDef<GQLMemory>[];
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=useMemoryColumns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMemoryColumns.d.ts","sourceRoot":"","sources":["../../../../src/routes/memories/hooks/useMemoryColumns.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA2BvD,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAGpF,eAAO,MAAM,kBAAkB;;;;;;CAMkB,CAAC;AAElD,eAAO,MAAM,kBAAkB,UAW9B,CAAC;AAyBF,KAAK,oBAAoB,GAAG;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;CAClD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CA8PnF"}
|