@vertesia/ui 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260804.124748Z
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/lib/core/hooks/useScrollableSearch.d.ts +1 -1
- package/lib/core/hooks/useScrollableSearch.d.ts.map +1 -1
- package/lib/core/hooks/useScrollableSearch.js +15 -2
- package/lib/core/hooks/useScrollableSearch.js.map +1 -1
- package/lib/env/index.d.ts +4 -0
- package/lib/env/index.d.ts.map +1 -1
- package/lib/env/index.js.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.js +3 -8
- package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts +8 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +53 -17
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +25 -10
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +24 -9
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +15 -3
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +9 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +97 -2
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.js +12 -3
- package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/features/agent/chat/index.d.ts +1 -1
- package/lib/features/agent/chat/index.d.ts.map +1 -1
- package/lib/features/agent/chat/index.js.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.d.ts +8 -6
- package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.js +8 -3
- package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +4 -1
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts +31 -3
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts +128 -6
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts +2 -2
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -2
- package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.d.ts +2 -2
- package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts +2 -2
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +5 -1
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.js +2 -2
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
- package/lib/features/store/types/ObjectSchemaEditor.d.ts +2 -2
- package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentType.d.ts +2 -2
- package/lib/features/store/types/SelectContentType.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentType.js.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.d.ts +2 -2
- package/lib/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/store/types/TableLayoutEditor.d.ts +2 -2
- package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.d.ts +1267 -6
- package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.js +5 -0
- package/lib/features/store/types/TypeRegistry.js.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts +9 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.js +9 -1
- package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +1251 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
- package/lib/features/store/types/typeCatalogCache.d.ts +2 -2
- package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -1
- package/lib/features/store/types/typeCatalogCache.js +4 -0
- package/lib/features/store/types/typeCatalogCache.js.map +1 -1
- package/lib/features/user/UserInfo.d.ts +118 -7
- package/lib/features/user/UserInfo.d.ts.map +1 -1
- package/lib/i18n/locales/ar.json +2 -1
- package/lib/i18n/locales/de.json +2 -1
- package/lib/i18n/locales/en.json +5 -1
- package/lib/i18n/locales/es.json +2 -1
- package/lib/i18n/locales/fr.json +2 -1
- package/lib/i18n/locales/it.json +2 -1
- package/lib/i18n/locales/ja.json +2 -1
- package/lib/i18n/locales/ko.json +2 -1
- package/lib/i18n/locales/pt.json +2 -1
- package/lib/i18n/locales/ru.json +2 -1
- package/lib/i18n/locales/tr.json +2 -1
- package/lib/i18n/locales/zh-TW.json +2 -1
- package/lib/i18n/locales/zh.json +2 -1
- package/lib/session/UserSession.d.ts +18 -4
- package/lib/session/UserSession.d.ts.map +1 -1
- package/lib/shell/apps/AppInstallationProvider.d.ts +222 -2
- package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
- package/lib/shell/login/InviteAcceptModal.js.map +1 -1
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +34 -34
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +13 -13
- package/lib/vertesia-ui-widgets.js +18 -18
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts +7 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +62 -6
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/package.json +31 -31
- package/src/core/hooks/useScrollableSearch.test.tsx +139 -0
- package/src/core/hooks/useScrollableSearch.tsx +17 -3
- package/src/env/index.ts +2 -0
- package/src/features/agent/chat/AgentChatPlaybackControls.test.tsx +2 -0
- package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +51 -6
- package/src/features/agent/chat/AgentRequestInputOverlay.tsx +5 -7
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +195 -3
- package/src/features/agent/chat/ModernAgentConversation.tsx +106 -22
- package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +75 -20
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +112 -0
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +62 -10
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +36 -4
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +2 -2
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +71 -0
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +3 -1
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +18 -4
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +95 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +111 -1
- package/src/features/agent/chat/hooks/useAgentStream.test.tsx +57 -0
- package/src/features/agent/chat/hooks/useAgentStream.ts +12 -3
- package/src/features/agent/chat/index.ts +1 -0
- package/src/features/facets/PromptsFacetsNav.tsx +17 -9
- package/src/features/store/objects/components/ContentOverview.tsx +4 -1
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -2
- package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -2
- package/src/features/store/objects/selection/SelectionActions.tsx +2 -2
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +2 -2
- package/src/features/store/types/IntakePolicyEditor.tsx +12 -4
- package/src/features/store/types/IntakePolicyForm.tsx +25 -0
- package/src/features/store/types/ObjectSchemaEditor.tsx +2 -2
- package/src/features/store/types/SelectContentType.tsx +9 -9
- package/src/features/store/types/SelectContentTypeModal.tsx +5 -5
- package/src/features/store/types/TableLayoutEditor.tsx +2 -2
- package/src/features/store/types/TypeRegistry.ts +8 -3
- package/src/features/store/types/intake-policy-editor.logic.ts +10 -2
- package/src/features/store/types/typeCatalogCache.ts +10 -3
- package/src/i18n/locales/ar.json +2 -1
- package/src/i18n/locales/de.json +2 -1
- package/src/i18n/locales/en.json +5 -1
- package/src/i18n/locales/es.json +2 -1
- package/src/i18n/locales/fr.json +2 -1
- package/src/i18n/locales/it.json +2 -1
- package/src/i18n/locales/ja.json +2 -1
- package/src/i18n/locales/ko.json +2 -1
- package/src/i18n/locales/pt.json +2 -1
- package/src/i18n/locales/ru.json +2 -1
- package/src/i18n/locales/tr.json +2 -1
- package/src/i18n/locales/zh-TW.json +2 -1
- package/src/i18n/locales/zh.json +2 -1
- package/src/shell/login/InviteAcceptModal.tsx +4 -4
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +13 -9
- package/src/widgets/monacoEditor/MonacoEditor.tsx +83 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ContentObjectTypeCatalogEntry } from '@vertesia/common';
|
|
2
2
|
import { SelectBox } from '@vertesia/ui/core';
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { useEffect, useState } from 'react';
|
|
@@ -6,7 +6,7 @@ import { useTypeRegistry } from './TypeRegistryProvider.js';
|
|
|
6
6
|
|
|
7
7
|
interface SelectContentTypeProps {
|
|
8
8
|
defaultValue?: string | string[] | null; // the typeId
|
|
9
|
-
onChange: (type:
|
|
9
|
+
onChange: (type: ContentObjectTypeCatalogEntry | null | ContentObjectTypeCatalogEntry[]) => void;
|
|
10
10
|
className?: string;
|
|
11
11
|
isClearable?: boolean;
|
|
12
12
|
multiple?: boolean;
|
|
@@ -22,7 +22,7 @@ export function SelectContentType({
|
|
|
22
22
|
const { registry: typeRegistry } = useTypeRegistry();
|
|
23
23
|
const [isMounted, setIsMounted] = useState(false);
|
|
24
24
|
|
|
25
|
-
const optionLabel = (type:
|
|
25
|
+
const optionLabel = (type: ContentObjectTypeCatalogEntry | null) => {
|
|
26
26
|
if (type === null) return t('store.none');
|
|
27
27
|
|
|
28
28
|
return (
|
|
@@ -32,8 +32,8 @@ export function SelectContentType({
|
|
|
32
32
|
</div>
|
|
33
33
|
);
|
|
34
34
|
};
|
|
35
|
-
const [selectedType, setSelectedType] = useState<
|
|
36
|
-
const [selectedTypes, setSelectedTypes] = useState<
|
|
35
|
+
const [selectedType, setSelectedType] = useState<ContentObjectTypeCatalogEntry | undefined>();
|
|
36
|
+
const [selectedTypes, setSelectedTypes] = useState<ContentObjectTypeCatalogEntry[]>([]);
|
|
37
37
|
|
|
38
38
|
useEffect(() => {
|
|
39
39
|
if (!isMounted) {
|
|
@@ -51,12 +51,12 @@ export function SelectContentType({
|
|
|
51
51
|
}
|
|
52
52
|
}, [isMounted, typeRegistry, defaultValue, multiple]);
|
|
53
53
|
|
|
54
|
-
const _onChange = (option:
|
|
54
|
+
const _onChange = (option: ContentObjectTypeCatalogEntry | null) => {
|
|
55
55
|
setSelectedType(option || undefined);
|
|
56
56
|
onChange(option);
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
-
const _onChangeMultiple = (options:
|
|
59
|
+
const _onChangeMultiple = (options: ContentObjectTypeCatalogEntry[]) => {
|
|
60
60
|
setSelectedTypes(options);
|
|
61
61
|
onChange(options);
|
|
62
62
|
};
|
|
@@ -64,7 +64,7 @@ export function SelectContentType({
|
|
|
64
64
|
if (multiple) {
|
|
65
65
|
return (
|
|
66
66
|
<div className="flex flex-col gap-4 content-between">
|
|
67
|
-
<SelectBox<
|
|
67
|
+
<SelectBox<ContentObjectTypeCatalogEntry>
|
|
68
68
|
options={typeRegistry?.types || []}
|
|
69
69
|
value={selectedTypes}
|
|
70
70
|
onChange={_onChangeMultiple}
|
|
@@ -81,7 +81,7 @@ export function SelectContentType({
|
|
|
81
81
|
|
|
82
82
|
return (
|
|
83
83
|
<div className="flex flex-col gap-4 content-between">
|
|
84
|
-
<SelectBox<
|
|
84
|
+
<SelectBox<ContentObjectTypeCatalogEntry>
|
|
85
85
|
options={typeRegistry?.types || []}
|
|
86
86
|
value={selectedType}
|
|
87
87
|
onChange={_onChange}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ContentObjectTypeCatalogEntry } from '@vertesia/common';
|
|
2
2
|
import { Button, Modal, ModalBody, ModalFooter, ModalTitle, SelectBox, VTooltip } from '@vertesia/ui/core';
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { CheckCircleIcon, Info } from 'lucide-react';
|
|
@@ -18,7 +18,7 @@ interface SelectContentTypeModalProps {
|
|
|
18
18
|
/** Children to render in the modal */
|
|
19
19
|
children?: ReactNode;
|
|
20
20
|
/** Optional initial selected type */
|
|
21
|
-
initialSelectedType?:
|
|
21
|
+
initialSelectedType?: ContentObjectTypeCatalogEntry | null;
|
|
22
22
|
/** Optional description text */
|
|
23
23
|
description?: string;
|
|
24
24
|
/** Label for the confirm button */
|
|
@@ -45,7 +45,7 @@ export function SelectContentTypeModal({
|
|
|
45
45
|
const { t } = useUITranslation();
|
|
46
46
|
const resolvedTitle = title ?? t('store.selectContentType');
|
|
47
47
|
const { registry: typeRegistry } = useTypeRegistry();
|
|
48
|
-
const [selectedType, setSelectedType] = useState<
|
|
48
|
+
const [selectedType, setSelectedType] = useState<ContentObjectTypeCatalogEntry | null>(initialSelectedType);
|
|
49
49
|
|
|
50
50
|
// Get available types from the registry
|
|
51
51
|
const types = typeRegistry?.types || [];
|
|
@@ -79,7 +79,7 @@ export function SelectContentTypeModal({
|
|
|
79
79
|
value={selectedType}
|
|
80
80
|
optionLabel={(type) => (type ? type.name : t('store.selectContentTypeLabel'))}
|
|
81
81
|
placeholder={t('store.selectContentTypeAuto')}
|
|
82
|
-
onChange={(selected:
|
|
82
|
+
onChange={(selected: ContentObjectTypeCatalogEntry | null | undefined) =>
|
|
83
83
|
setSelectedType(selected || null)
|
|
84
84
|
}
|
|
85
85
|
filterBy="name"
|
|
@@ -91,7 +91,7 @@ export function SelectContentTypeModal({
|
|
|
91
91
|
value={selectedType}
|
|
92
92
|
optionLabel={(type) => (type ? type.name : t('store.selectContentTypeLabel'))}
|
|
93
93
|
placeholder={t('store.selectContentTypeLabel')}
|
|
94
|
-
onChange={(selected:
|
|
94
|
+
onChange={(selected: ContentObjectTypeCatalogEntry | null | undefined) =>
|
|
95
95
|
setSelectedType(selected || null)
|
|
96
96
|
}
|
|
97
97
|
filterBy="name"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColumnLayout,
|
|
1
|
+
import type { ColumnLayout, ContentObjectTypeCatalogEntry } from '@vertesia/common';
|
|
2
2
|
import { Button, errorMessage, Panel, useTheme, useToast } from '@vertesia/ui/core';
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { useUserSession } from '@vertesia/ui/session';
|
|
@@ -6,7 +6,7 @@ import { type EditorApi, MonacoEditor } from '@vertesia/ui/widgets';
|
|
|
6
6
|
import { useMemo, useRef, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
interface TableLayoutEditorProps {
|
|
9
|
-
objectType:
|
|
9
|
+
objectType: ContentObjectTypeCatalogEntry;
|
|
10
10
|
onLayoutUpdate: (value: ColumnLayout[] | undefined) => void;
|
|
11
11
|
readonly?: boolean;
|
|
12
12
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ContentObjectTypeCatalogEntry } from '@vertesia/common';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Holds the type catalog, which is `ContentObjectTypeCatalogEntry` rather than
|
|
5
|
+
* `ContentObjectTypeItem`: the listing includes system and app types, which are declared in code and
|
|
6
|
+
* therefore carry none of the four audit fields.
|
|
7
|
+
*/
|
|
3
8
|
export class TypeRegistry {
|
|
4
|
-
map: Record<string,
|
|
5
|
-
constructor(public types:
|
|
9
|
+
map: Record<string, ContentObjectTypeCatalogEntry> = {};
|
|
10
|
+
constructor(public types: ContentObjectTypeCatalogEntry[]) {
|
|
6
11
|
//sort types
|
|
7
12
|
types.sort((a, b) => a.name.localeCompare(b.name));
|
|
8
13
|
for (const type of types) {
|
|
@@ -34,13 +34,21 @@ export function updateIntakePolicy(
|
|
|
34
34
|
return next as ContentTypeIntakePolicy;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* `number[][]` in, `[number, number][]` out.
|
|
39
|
+
*
|
|
40
|
+
* The policy type says `number[][]` — JSON has no tuples, and the published component has always
|
|
41
|
+
* described a two-element array rather than a pair — so the editor takes what the policy holds and
|
|
42
|
+
* returns the pair shape the form rows render. The `[1, 1]` default is what makes the result honest:
|
|
43
|
+
* a short row read out of a stored policy is completed rather than assumed.
|
|
44
|
+
*/
|
|
37
45
|
export function replaceIntakeRange(
|
|
38
|
-
ranges: [
|
|
46
|
+
ranges: number[][] | undefined,
|
|
39
47
|
index: number,
|
|
40
48
|
endpoint: 0 | 1,
|
|
41
49
|
value: number,
|
|
42
50
|
): [number, number][] {
|
|
43
|
-
const next = ranges?.map((range) => [
|
|
51
|
+
const next: [number, number][] = ranges?.map((range) => [range[0] ?? 1, range[1] ?? 1]) ?? [];
|
|
44
52
|
const current = next[index] ?? [1, 1];
|
|
45
53
|
current[endpoint] = value;
|
|
46
54
|
next[index] = current;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VertesiaClient } from '@vertesia/client';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ContentObjectTypeCatalogEntry } from '@vertesia/common';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Browser-session cache for content-type catalog lookups, so render-time consumers
|
|
@@ -11,10 +11,17 @@ import type { ContentObjectTypeItem } from '@vertesia/common';
|
|
|
11
11
|
* lookups self-evict so the next view retries. In-app type edits must call
|
|
12
12
|
* `invalidateTypeCache` — edits made elsewhere (assistant, another tab) are picked up on
|
|
13
13
|
* the next session.
|
|
14
|
+
*
|
|
15
|
+
* Entries are `ContentObjectTypeCatalogEntry`, not `ContentObjectTypeItem`: the catalog resolves
|
|
16
|
+
* in-code types contributed by plugins, whose audit fields are absent, so `created_by` and its three
|
|
17
|
+
* siblings are optional here.
|
|
14
18
|
*/
|
|
15
|
-
const cachePerClient = new WeakMap<VertesiaClient, Map<string, Promise<
|
|
19
|
+
const cachePerClient = new WeakMap<VertesiaClient, Map<string, Promise<ContentObjectTypeCatalogEntry | undefined>>>();
|
|
16
20
|
|
|
17
|
-
export function resolveTypeCached(
|
|
21
|
+
export function resolveTypeCached(
|
|
22
|
+
client: VertesiaClient,
|
|
23
|
+
typeId: string,
|
|
24
|
+
): Promise<ContentObjectTypeCatalogEntry | undefined> {
|
|
18
25
|
let cache = cachePerClient.get(client);
|
|
19
26
|
if (!cache) {
|
|
20
27
|
cache = new Map();
|
package/src/i18n/locales/ar.json
CHANGED
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
"agent.rewind.jumpToLatest": "الانتقال إلى أحدث رسالة",
|
|
165
165
|
"agent.rewind.jumpToLive": "الانتقال إلى المباشر",
|
|
166
166
|
"agent.rewind.jumpToStart": "الانتقال إلى أول رسالة",
|
|
167
|
-
"agent.rewind.label": "
|
|
167
|
+
"agent.rewind.label": "تصحيح الأخطاء",
|
|
168
168
|
"agent.rewind.nextMessage": "الرسالة التالية",
|
|
169
169
|
"agent.rewind.pause": "إيقاف مؤقت",
|
|
170
170
|
"agent.rewind.positionInput": "موضع التشغيل",
|
|
@@ -200,6 +200,7 @@
|
|
|
200
200
|
"agent.summary": "ملخص",
|
|
201
201
|
"agent.taskProgress": "تقدم المهام",
|
|
202
202
|
"agent.tasksCompleted": "{{completed}}/{{total}} مكتملة",
|
|
203
|
+
"agent.thinking": "جارٍ التفكير...",
|
|
203
204
|
"agent.timeout": "انتهت المهلة",
|
|
204
205
|
"agent.toggleRightSidebar": "تبديل الشريط الجانبي الأيمن",
|
|
205
206
|
"agent.typeYourMessage": "اكتب رسالتك...",
|
package/src/i18n/locales/de.json
CHANGED
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"agent.rewind.jumpToLatest": "Zur neuesten Nachricht springen",
|
|
161
161
|
"agent.rewind.jumpToLive": "Zur Live-Ansicht springen",
|
|
162
162
|
"agent.rewind.jumpToStart": "Zur ersten Nachricht springen",
|
|
163
|
-
"agent.rewind.label": "
|
|
163
|
+
"agent.rewind.label": "Debuggen",
|
|
164
164
|
"agent.rewind.nextMessage": "Nächste Nachricht",
|
|
165
165
|
"agent.rewind.pause": "Pausieren",
|
|
166
166
|
"agent.rewind.positionInput": "Wiedergabeposition",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"agent.summary": "Zusammenfassung",
|
|
193
193
|
"agent.taskProgress": "Aufgabenfortschritt",
|
|
194
194
|
"agent.tasksCompleted": "{{completed}}/{{total}} abgeschlossen",
|
|
195
|
+
"agent.thinking": "Denke nach...",
|
|
195
196
|
"agent.timeout": "Zeitüberschreitung",
|
|
196
197
|
"agent.toggleRightSidebar": "Rechte Seitenleiste umschalten",
|
|
197
198
|
"agent.typeYourMessage": "Geben Sie Ihre Nachricht ein...",
|
package/src/i18n/locales/en.json
CHANGED
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
"agent.rewind.jumpToLatest": "Jump to latest message",
|
|
225
225
|
"agent.rewind.jumpToLive": "Jump to live",
|
|
226
226
|
"agent.rewind.jumpToStart": "Jump to first message",
|
|
227
|
-
"agent.rewind.label": "
|
|
227
|
+
"agent.rewind.label": "Debug",
|
|
228
228
|
"agent.rewind.nextMessage": "Next message",
|
|
229
229
|
"agent.rewind.pause": "Pause",
|
|
230
230
|
"agent.rewind.positionInput": "Playback position",
|
|
@@ -265,6 +265,7 @@
|
|
|
265
265
|
"agent.summary": "Summary",
|
|
266
266
|
"agent.taskProgress": "Task Progress",
|
|
267
267
|
"agent.tasksCompleted": "{{completed}}/{{total}} completed",
|
|
268
|
+
"agent.thinking": "Thinking...",
|
|
268
269
|
"agent.timeout": "Timed out",
|
|
269
270
|
"agent.toggleRightSidebar": "Toggle right sidebar",
|
|
270
271
|
"agent.typeYourMessage": "Type your message...",
|
|
@@ -464,6 +465,7 @@
|
|
|
464
465
|
"intakePolicy.field.rangeEnd": "Range end",
|
|
465
466
|
"intakePolicy.field.rangeStart": "Range start",
|
|
466
467
|
"intakePolicy.field.refreshOcr": "Refresh OCR",
|
|
468
|
+
"intakePolicy.field.renderDpi": "Render DPI",
|
|
467
469
|
"intakePolicy.field.renderingTemplate": "Rendering template",
|
|
468
470
|
"intakePolicy.field.reviewModel": "Review model",
|
|
469
471
|
"intakePolicy.field.reviewThreshold": "Review threshold",
|
|
@@ -517,9 +519,11 @@
|
|
|
517
519
|
"intakePolicy.placeholder.objectId": "Add an object ID",
|
|
518
520
|
"intakePolicy.section.classification": "Classification and defaults",
|
|
519
521
|
"intakePolicy.section.conversion": "Text conversion",
|
|
522
|
+
"intakePolicy.section.conversionModel": "Conversion model",
|
|
520
523
|
"intakePolicy.section.customConversion": "Custom conversion",
|
|
521
524
|
"intakePolicy.section.embeddings": "Search and generated content",
|
|
522
525
|
"intakePolicy.section.extraction": "Property extraction",
|
|
526
|
+
"intakePolicy.section.extractionModel": "Extraction model",
|
|
523
527
|
"intakePolicy.section.grounding": "Grounded extraction",
|
|
524
528
|
"intakePolicy.section.locate": "Relevant page locator",
|
|
525
529
|
"intakePolicy.section.models": "Extraction models",
|
package/src/i18n/locales/es.json
CHANGED
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"agent.rewind.jumpToLatest": "Ir al mensaje más reciente",
|
|
162
162
|
"agent.rewind.jumpToLive": "Ir a en vivo",
|
|
163
163
|
"agent.rewind.jumpToStart": "Ir al primer mensaje",
|
|
164
|
-
"agent.rewind.label": "
|
|
164
|
+
"agent.rewind.label": "Depuración",
|
|
165
165
|
"agent.rewind.nextMessage": "Mensaje siguiente",
|
|
166
166
|
"agent.rewind.pause": "Pausar",
|
|
167
167
|
"agent.rewind.positionInput": "Posición de reproducción",
|
|
@@ -194,6 +194,7 @@
|
|
|
194
194
|
"agent.summary": "Resumen",
|
|
195
195
|
"agent.taskProgress": "Progreso de tareas",
|
|
196
196
|
"agent.tasksCompleted": "{{completed}}/{{total}} completadas",
|
|
197
|
+
"agent.thinking": "Pensando...",
|
|
197
198
|
"agent.timeout": "Tiempo agotado",
|
|
198
199
|
"agent.toggleRightSidebar": "Alternar panel lateral",
|
|
199
200
|
"agent.typeYourMessage": "Escribe tu mensaje...",
|
package/src/i18n/locales/fr.json
CHANGED
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"agent.rewind.jumpToLatest": "Aller au dernier message",
|
|
162
162
|
"agent.rewind.jumpToLive": "Aller au direct",
|
|
163
163
|
"agent.rewind.jumpToStart": "Aller au premier message",
|
|
164
|
-
"agent.rewind.label": "
|
|
164
|
+
"agent.rewind.label": "Débogage",
|
|
165
165
|
"agent.rewind.nextMessage": "Message suivant",
|
|
166
166
|
"agent.rewind.pause": "Pause",
|
|
167
167
|
"agent.rewind.positionInput": "Position de lecture",
|
|
@@ -194,6 +194,7 @@
|
|
|
194
194
|
"agent.summary": "Résumé",
|
|
195
195
|
"agent.taskProgress": "Progression des tâches",
|
|
196
196
|
"agent.tasksCompleted": "{{completed}}/{{total}} terminées",
|
|
197
|
+
"agent.thinking": "Réflexion...",
|
|
197
198
|
"agent.timeout": "Délai dépassé",
|
|
198
199
|
"agent.toggleRightSidebar": "Basculer le panneau latéral",
|
|
199
200
|
"agent.typeYourMessage": "Saisissez votre message...",
|
package/src/i18n/locales/it.json
CHANGED
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"agent.rewind.jumpToLatest": "Vai al messaggio più recente",
|
|
162
162
|
"agent.rewind.jumpToLive": "Vai al live",
|
|
163
163
|
"agent.rewind.jumpToStart": "Vai al primo messaggio",
|
|
164
|
-
"agent.rewind.label": "
|
|
164
|
+
"agent.rewind.label": "Debug",
|
|
165
165
|
"agent.rewind.nextMessage": "Messaggio successivo",
|
|
166
166
|
"agent.rewind.pause": "Pausa",
|
|
167
167
|
"agent.rewind.positionInput": "Posizione di riproduzione",
|
|
@@ -194,6 +194,7 @@
|
|
|
194
194
|
"agent.summary": "Riepilogo",
|
|
195
195
|
"agent.taskProgress": "Progresso attività",
|
|
196
196
|
"agent.tasksCompleted": "{{completed}}/{{total}} completate",
|
|
197
|
+
"agent.thinking": "Sto pensando...",
|
|
197
198
|
"agent.timeout": "Tempo scaduto",
|
|
198
199
|
"agent.toggleRightSidebar": "Alterna pannello laterale",
|
|
199
200
|
"agent.typeYourMessage": "Scrivi il tuo messaggio...",
|
package/src/i18n/locales/ja.json
CHANGED
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"agent.rewind.jumpToLatest": "最新のメッセージへ移動",
|
|
161
161
|
"agent.rewind.jumpToLive": "ライブへ移動",
|
|
162
162
|
"agent.rewind.jumpToStart": "最初のメッセージへ移動",
|
|
163
|
-
"agent.rewind.label": "
|
|
163
|
+
"agent.rewind.label": "デバッグ",
|
|
164
164
|
"agent.rewind.nextMessage": "次のメッセージ",
|
|
165
165
|
"agent.rewind.pause": "一時停止",
|
|
166
166
|
"agent.rewind.positionInput": "再生位置",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"agent.summary": "概要",
|
|
193
193
|
"agent.taskProgress": "タスクの進捗",
|
|
194
194
|
"agent.tasksCompleted": "{{completed}}/{{total}} 完了",
|
|
195
|
+
"agent.thinking": "考え中...",
|
|
195
196
|
"agent.timeout": "タイムアウト",
|
|
196
197
|
"agent.toggleRightSidebar": "右サイドバーの切り替え",
|
|
197
198
|
"agent.typeYourMessage": "メッセージを入力...",
|
package/src/i18n/locales/ko.json
CHANGED
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"agent.rewind.jumpToLatest": "최신 메시지로 이동",
|
|
161
161
|
"agent.rewind.jumpToLive": "라이브로 이동",
|
|
162
162
|
"agent.rewind.jumpToStart": "첫 메시지로 이동",
|
|
163
|
-
"agent.rewind.label": "
|
|
163
|
+
"agent.rewind.label": "디버그",
|
|
164
164
|
"agent.rewind.nextMessage": "다음 메시지",
|
|
165
165
|
"agent.rewind.pause": "일시 중지",
|
|
166
166
|
"agent.rewind.positionInput": "재생 위치",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"agent.summary": "요약",
|
|
193
193
|
"agent.taskProgress": "작업 진행률",
|
|
194
194
|
"agent.tasksCompleted": "{{completed}}/{{total}} 완료",
|
|
195
|
+
"agent.thinking": "생각 중...",
|
|
195
196
|
"agent.timeout": "시간 초과",
|
|
196
197
|
"agent.toggleRightSidebar": "오른쪽 사이드바 전환",
|
|
197
198
|
"agent.typeYourMessage": "메시지를 입력하세요...",
|
package/src/i18n/locales/pt.json
CHANGED
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"agent.rewind.jumpToLatest": "Ir para a mensagem mais recente",
|
|
162
162
|
"agent.rewind.jumpToLive": "Ir para ao vivo",
|
|
163
163
|
"agent.rewind.jumpToStart": "Ir para a primeira mensagem",
|
|
164
|
-
"agent.rewind.label": "
|
|
164
|
+
"agent.rewind.label": "Depuração",
|
|
165
165
|
"agent.rewind.nextMessage": "Próxima mensagem",
|
|
166
166
|
"agent.rewind.pause": "Pausar",
|
|
167
167
|
"agent.rewind.positionInput": "Posição de reprodução",
|
|
@@ -194,6 +194,7 @@
|
|
|
194
194
|
"agent.summary": "Resumo",
|
|
195
195
|
"agent.taskProgress": "Progresso das tarefas",
|
|
196
196
|
"agent.tasksCompleted": "{{completed}}/{{total}} concluídas",
|
|
197
|
+
"agent.thinking": "Pensando...",
|
|
197
198
|
"agent.timeout": "Tempo esgotado",
|
|
198
199
|
"agent.toggleRightSidebar": "Alternar painel lateral",
|
|
199
200
|
"agent.typeYourMessage": "Digite sua mensagem...",
|
package/src/i18n/locales/ru.json
CHANGED
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"agent.rewind.jumpToLatest": "Перейти к последнему сообщению",
|
|
163
163
|
"agent.rewind.jumpToLive": "Перейти к live",
|
|
164
164
|
"agent.rewind.jumpToStart": "Перейти к первому сообщению",
|
|
165
|
-
"agent.rewind.label": "
|
|
165
|
+
"agent.rewind.label": "Отладка",
|
|
166
166
|
"agent.rewind.nextMessage": "Следующее сообщение",
|
|
167
167
|
"agent.rewind.pause": "Пауза",
|
|
168
168
|
"agent.rewind.positionInput": "Позиция воспроизведения",
|
|
@@ -196,6 +196,7 @@
|
|
|
196
196
|
"agent.summary": "Сводка",
|
|
197
197
|
"agent.taskProgress": "Прогресс задач",
|
|
198
198
|
"agent.tasksCompleted": "{{completed}}/{{total}} завершено",
|
|
199
|
+
"agent.thinking": "Размышляю...",
|
|
199
200
|
"agent.timeout": "Время ожидания истекло",
|
|
200
201
|
"agent.toggleRightSidebar": "Переключить правую панель",
|
|
201
202
|
"agent.typeYourMessage": "Введите сообщение...",
|
package/src/i18n/locales/tr.json
CHANGED
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"agent.rewind.jumpToLatest": "En yeni mesaja git",
|
|
161
161
|
"agent.rewind.jumpToLive": "Canlıya git",
|
|
162
162
|
"agent.rewind.jumpToStart": "İlk mesaja git",
|
|
163
|
-
"agent.rewind.label": "
|
|
163
|
+
"agent.rewind.label": "Hata ayıklama",
|
|
164
164
|
"agent.rewind.nextMessage": "Sonraki mesaj",
|
|
165
165
|
"agent.rewind.pause": "Duraklat",
|
|
166
166
|
"agent.rewind.positionInput": "Oynatma konumu",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"agent.summary": "Özet",
|
|
193
193
|
"agent.taskProgress": "Görev ilerlemesi",
|
|
194
194
|
"agent.tasksCompleted": "{{completed}}/{{total}} tamamlandı",
|
|
195
|
+
"agent.thinking": "Düşünüyor...",
|
|
195
196
|
"agent.timeout": "Zaman aşımına uğradı",
|
|
196
197
|
"agent.toggleRightSidebar": "Sağ kenar çubuğunu aç/kapat",
|
|
197
198
|
"agent.typeYourMessage": "Mesajınızı yazın...",
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"agent.rewind.jumpToLatest": "跳到最新訊息",
|
|
161
161
|
"agent.rewind.jumpToLive": "跳到即時",
|
|
162
162
|
"agent.rewind.jumpToStart": "跳到第一則訊息",
|
|
163
|
-
"agent.rewind.label": "
|
|
163
|
+
"agent.rewind.label": "偵錯",
|
|
164
164
|
"agent.rewind.nextMessage": "下一則訊息",
|
|
165
165
|
"agent.rewind.pause": "暫停",
|
|
166
166
|
"agent.rewind.positionInput": "播放位置",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"agent.summary": "摘要",
|
|
193
193
|
"agent.taskProgress": "任務進度",
|
|
194
194
|
"agent.tasksCompleted": "{{completed}}/{{total}} 已完成",
|
|
195
|
+
"agent.thinking": "思考中...",
|
|
195
196
|
"agent.timeout": "已逾時",
|
|
196
197
|
"agent.toggleRightSidebar": "切換右側邊欄",
|
|
197
198
|
"agent.typeYourMessage": "輸入訊息...",
|
package/src/i18n/locales/zh.json
CHANGED
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"agent.rewind.jumpToLatest": "跳到最新消息",
|
|
161
161
|
"agent.rewind.jumpToLive": "跳到实时",
|
|
162
162
|
"agent.rewind.jumpToStart": "跳到第一条消息",
|
|
163
|
-
"agent.rewind.label": "
|
|
163
|
+
"agent.rewind.label": "调试",
|
|
164
164
|
"agent.rewind.nextMessage": "下一条消息",
|
|
165
165
|
"agent.rewind.pause": "暂停",
|
|
166
166
|
"agent.rewind.positionInput": "播放位置",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"agent.summary": "摘要",
|
|
193
193
|
"agent.taskProgress": "任务进度",
|
|
194
194
|
"agent.tasksCompleted": "{{completed}}/{{total}} 已完成",
|
|
195
|
+
"agent.thinking": "思考中...",
|
|
195
196
|
"agent.timeout": "已超时",
|
|
196
197
|
"agent.toggleRightSidebar": "切换右侧边栏",
|
|
197
198
|
"agent.typeYourMessage": "输入消息...",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { UserInviteToken } from '@vertesia/common';
|
|
2
2
|
import { Button, Modal, ModalBody, ModalTitle } from '@vertesia/ui/core';
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { useUserSession } from '@vertesia/ui/session';
|
|
@@ -9,7 +9,7 @@ export function InviteAcceptModal() {
|
|
|
9
9
|
const { client } = session;
|
|
10
10
|
const { t } = useUITranslation();
|
|
11
11
|
const [showModal, setShowModal] = useState(false);
|
|
12
|
-
const [invites, setInvites] = useState<
|
|
12
|
+
const [invites, setInvites] = useState<UserInviteToken[]>([]);
|
|
13
13
|
|
|
14
14
|
useEffect(() => {
|
|
15
15
|
client.account
|
|
@@ -38,7 +38,7 @@ export function InviteAcceptModal() {
|
|
|
38
38
|
|
|
39
39
|
const closeModal = () => setShowModal(false);
|
|
40
40
|
|
|
41
|
-
const accept = async (invite:
|
|
41
|
+
const accept = async (invite: UserInviteToken) => {
|
|
42
42
|
await client.account.acceptInvite(invite.id);
|
|
43
43
|
await session.authCallback;
|
|
44
44
|
await session.fetchAccounts();
|
|
@@ -53,7 +53,7 @@ export function InviteAcceptModal() {
|
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
const reject = async (invite:
|
|
56
|
+
const reject = async (invite: UserInviteToken) => {
|
|
57
57
|
await client.account.rejectInvite(invite.id);
|
|
58
58
|
const remainingInvites = invites.filter((i) => i.id !== invite.id);
|
|
59
59
|
setInvites(remainingInvites);
|
|
@@ -13,6 +13,10 @@ import {
|
|
|
13
13
|
} from './ArtifactEditingSurface.js';
|
|
14
14
|
import type { MarkdownEditingAction } from './CollaborativeMarkdownRenderer.js';
|
|
15
15
|
|
|
16
|
+
// Document mode is loaded through React.lazy(). CI transforms many test files concurrently, so the
|
|
17
|
+
// first document-mode test can legitimately take longer than Testing Library's one-second default.
|
|
18
|
+
const LAZY_EDITOR_WAIT = { timeout: 5_000 } as const;
|
|
19
|
+
|
|
16
20
|
const mocks = vi.hoisted(() => {
|
|
17
21
|
const getArtifactContent = vi.fn();
|
|
18
22
|
const updateArtifactContent = vi.fn();
|
|
@@ -151,7 +155,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
151
155
|
const user = userEvent.setup();
|
|
152
156
|
renderSurface({ viewMode: 'document' });
|
|
153
157
|
|
|
154
|
-
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
158
|
+
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
155
159
|
await user.click(editor);
|
|
156
160
|
await user.type(editor, ' revised');
|
|
157
161
|
|
|
@@ -174,7 +178,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
174
178
|
onSendMessage: vi.fn(),
|
|
175
179
|
});
|
|
176
180
|
|
|
177
|
-
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
181
|
+
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
178
182
|
expect(editor.getAttribute('contenteditable')).toBe('false');
|
|
179
183
|
expect(screen.queryByRole('button', { name: 'Comment on selection' })).toBeNull();
|
|
180
184
|
});
|
|
@@ -188,7 +192,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
188
192
|
toolbarStatus: <span>AI is editing</span>,
|
|
189
193
|
});
|
|
190
194
|
|
|
191
|
-
const button = await screen.findByRole('button', { name: 'Send changes to agent' });
|
|
195
|
+
const button = await screen.findByRole('button', { name: 'Send changes to agent' }, LAZY_EDITOR_WAIT);
|
|
192
196
|
expect(screen.getByRole('toolbar').contains(button)).toBe(true);
|
|
193
197
|
expect(button.previousElementSibling?.textContent).toBe('AI is editing');
|
|
194
198
|
expect(button).toHaveProperty('disabled', false);
|
|
@@ -203,7 +207,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
203
207
|
> = { current: null };
|
|
204
208
|
renderSurface({ viewMode: 'document', flushChangesRef });
|
|
205
209
|
|
|
206
|
-
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
210
|
+
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
207
211
|
await user.click(editor);
|
|
208
212
|
await user.type(editor, ' immediate');
|
|
209
213
|
|
|
@@ -228,7 +232,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
228
232
|
});
|
|
229
233
|
const view = renderSurface({ viewMode: 'document' });
|
|
230
234
|
|
|
231
|
-
fireEvent.click(await screen.findByRole('button', { name: 'Edit Markdown source' }));
|
|
235
|
+
fireEvent.click(await screen.findByRole('button', { name: 'Edit Markdown source' }, LAZY_EDITOR_WAIT));
|
|
232
236
|
const sourceEditor = screen.getByRole('textbox', { name: 'Markdown source editor' });
|
|
233
237
|
fireEvent.focus(sourceEditor);
|
|
234
238
|
fireEvent.change(sourceEditor, {
|
|
@@ -249,7 +253,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
249
253
|
it('shows a navigable ruler for changes from the original document', async () => {
|
|
250
254
|
renderSurface({ viewMode: 'document', baselineContent: 'Different paragraph.' });
|
|
251
255
|
|
|
252
|
-
await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
256
|
+
await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
253
257
|
expect(screen.getByRole('navigation', { name: 'Change ruler' })).not.toBeNull();
|
|
254
258
|
expect(screen.getByRole('button', { name: 'Change near line 1' })).not.toBeNull();
|
|
255
259
|
});
|
|
@@ -257,7 +261,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
257
261
|
it('keeps the focused editor base generation when the agent refreshes the artifact', async () => {
|
|
258
262
|
const user = userEvent.setup();
|
|
259
263
|
const view = renderSurface({ viewMode: 'document' });
|
|
260
|
-
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
264
|
+
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
261
265
|
await user.click(editor);
|
|
262
266
|
|
|
263
267
|
mocks.getArtifactContent.mockResolvedValueOnce({
|
|
@@ -311,7 +315,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
311
315
|
.mockResolvedValueOnce({ path: 'drafts/document.md', generation: 'generation-merged' });
|
|
312
316
|
|
|
313
317
|
const view = renderSurface({ viewMode: 'document' });
|
|
314
|
-
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
318
|
+
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
315
319
|
await user.click(editor);
|
|
316
320
|
|
|
317
321
|
view.rerender(
|
|
@@ -363,7 +367,7 @@ describe('ArtifactEditingSurface', () => {
|
|
|
363
367
|
mocks.updateArtifactContent.mockRejectedValueOnce({ status: 412 });
|
|
364
368
|
renderSurface({ viewMode: 'document' });
|
|
365
369
|
|
|
366
|
-
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' });
|
|
370
|
+
const editor = await screen.findByRole('textbox', { name: 'Markdown document editor' }, LAZY_EDITOR_WAIT);
|
|
367
371
|
await user.click(editor);
|
|
368
372
|
await user.type(editor, ' local edit');
|
|
369
373
|
|