@semiont/react-ui 0.2.33-build.79 → 0.2.33-build.80
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/dist/EventBusContext-7GvDyO0d.d.mts +414 -0
- package/dist/{PdfAnnotationCanvas.client-ADC4FFSE.mjs → PdfAnnotationCanvas.client-RAJRPQLU.mjs} +42 -27
- package/dist/PdfAnnotationCanvas.client-RAJRPQLU.mjs.map +1 -0
- package/dist/{ar-EMHEHPCJ.mjs → ar-4ZEORRW2.mjs} +7 -4
- package/dist/ar-4ZEORRW2.mjs.map +1 -0
- package/dist/{bn-OVCI4F6X.mjs → bn-SEDE5BQJ.mjs} +7 -4
- package/dist/bn-SEDE5BQJ.mjs.map +1 -0
- package/dist/{chunk-LIHZTECW.mjs → chunk-D7NBW4RV.mjs} +7 -4
- package/dist/chunk-D7NBW4RV.mjs.map +1 -0
- package/dist/{chunk-JZIO2A3B.mjs → chunk-ZR4ZV2LY.mjs} +206 -146
- package/dist/chunk-ZR4ZV2LY.mjs.map +1 -0
- package/dist/{cs-FAN66Q2F.mjs → cs-7W4WF5WD.mjs} +7 -4
- package/dist/cs-7W4WF5WD.mjs.map +1 -0
- package/dist/{da-YBBIHI2O.mjs → da-75XGBCBK.mjs} +7 -4
- package/dist/da-75XGBCBK.mjs.map +1 -0
- package/dist/{de-MAYU33LB.mjs → de-ODJVFLHM.mjs} +7 -4
- package/dist/de-ODJVFLHM.mjs.map +1 -0
- package/dist/{el-MKGSWN4O.mjs → el-C4PM4WB3.mjs} +7 -4
- package/dist/el-C4PM4WB3.mjs.map +1 -0
- package/dist/{en-DDLIXJCU.mjs → en-KJCJQ4OO.mjs} +2 -2
- package/dist/{es-52LHUWJD.mjs → es-WD33R7QL.mjs} +7 -4
- package/dist/es-WD33R7QL.mjs.map +1 -0
- package/dist/{fa-FJICRANB.mjs → fa-2BP6V56P.mjs} +7 -4
- package/dist/fa-2BP6V56P.mjs.map +1 -0
- package/dist/{fi-O455XFCR.mjs → fi-USRRW24J.mjs} +7 -4
- package/dist/fi-USRRW24J.mjs.map +1 -0
- package/dist/{fr-TXIXHOOE.mjs → fr-EC5S6WVF.mjs} +7 -4
- package/dist/fr-EC5S6WVF.mjs.map +1 -0
- package/dist/{he-JBSOX5IN.mjs → he-7TBVIKAA.mjs} +7 -4
- package/dist/he-7TBVIKAA.mjs.map +1 -0
- package/dist/{hi-KGHI3XVT.mjs → hi-FO4VIZLA.mjs} +7 -4
- package/dist/hi-FO4VIZLA.mjs.map +1 -0
- package/dist/{id-5OCPPZLO.mjs → id-7U7GGVWY.mjs} +7 -4
- package/dist/id-7U7GGVWY.mjs.map +1 -0
- package/dist/index.css +123 -85
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +645 -471
- package/dist/index.mjs +3461 -3025
- package/dist/index.mjs.map +1 -1
- package/dist/{it-PNBBZSM2.mjs → it-Y4OPL6I2.mjs} +7 -4
- package/dist/it-Y4OPL6I2.mjs.map +1 -0
- package/dist/{ja-LDD7R3TJ.mjs → ja-PK7SQL55.mjs} +7 -4
- package/dist/ja-PK7SQL55.mjs.map +1 -0
- package/dist/{ko-F47ZDEY3.mjs → ko-L25PXMYD.mjs} +7 -4
- package/dist/ko-L25PXMYD.mjs.map +1 -0
- package/dist/{ms-Z7LMXJWL.mjs → ms-STH777QM.mjs} +7 -4
- package/dist/ms-STH777QM.mjs.map +1 -0
- package/dist/{nl-6SJFBPJ3.mjs → nl-Y7LECDDR.mjs} +7 -4
- package/dist/nl-Y7LECDDR.mjs.map +1 -0
- package/dist/{no-YXPBPSGF.mjs → no-KEKCEWU6.mjs} +7 -4
- package/dist/no-KEKCEWU6.mjs.map +1 -0
- package/dist/{pl-P4AZ2QME.mjs → pl-7A7OC75O.mjs} +7 -4
- package/dist/pl-7A7OC75O.mjs.map +1 -0
- package/dist/{pt-LHWUS6U6.mjs → pt-35HTM7RA.mjs} +7 -4
- package/dist/pt-35HTM7RA.mjs.map +1 -0
- package/dist/{ro-EA5J2ZON.mjs → ro-VAWL5KQA.mjs} +7 -4
- package/dist/ro-VAWL5KQA.mjs.map +1 -0
- package/dist/{sv-DATBS3UQ.mjs → sv-7ZK5EQEB.mjs} +7 -4
- package/dist/sv-7ZK5EQEB.mjs.map +1 -0
- package/dist/test-utils.d.mts +18 -8
- package/dist/test-utils.mjs +36 -14
- package/dist/test-utils.mjs.map +1 -1
- package/dist/{th-WTFJRWPT.mjs → th-UDWZ4X34.mjs} +7 -4
- package/dist/th-UDWZ4X34.mjs.map +1 -0
- package/dist/{tr-IKO3RXOX.mjs → tr-4WMPK3UX.mjs} +7 -4
- package/dist/tr-4WMPK3UX.mjs.map +1 -0
- package/dist/{uk-CF6CTTRK.mjs → uk-SSLASQYJ.mjs} +7 -4
- package/dist/uk-SSLASQYJ.mjs.map +1 -0
- package/dist/{vi-AJLTXPZQ.mjs → vi-IF42Z5PU.mjs} +7 -4
- package/dist/vi-IF42Z5PU.mjs.map +1 -0
- package/dist/{zh-U3ORHHYH.mjs → zh-HRQTNTAI.mjs} +7 -4
- package/dist/zh-HRQTNTAI.mjs.map +1 -0
- package/package.json +3 -1
- package/src/components/CodeMirrorRenderer.tsx +66 -93
- package/src/components/DetectionProgressWidget.tsx +16 -5
- package/src/components/LiveRegion.tsx +18 -18
- package/src/components/ResizeHandle.tsx +10 -4
- package/src/components/SessionTimer.tsx +2 -2
- package/src/components/Toolbar.tsx +18 -9
- package/src/components/__tests__/SessionTimer.test.tsx +9 -9
- package/src/components/annotation/AnnotateToolbar.tsx +17 -15
- package/src/components/annotation/__tests__/AnnotateToolbar.test.tsx +165 -63
- package/src/components/annotation/annotation-entries.css +10 -0
- package/src/components/annotation-popups/JsonLdView.tsx +8 -2
- package/src/components/image-annotation/AnnotationOverlay.tsx +42 -22
- package/src/components/image-annotation/SvgDrawingCanvas.tsx +27 -30
- package/src/components/layout/__tests__/LeftSidebar.test.tsx +12 -33
- package/src/components/layout/__tests__/PageLayout.test.tsx +37 -32
- package/src/components/layout/__tests__/UnifiedHeader.test.tsx +21 -40
- package/src/components/modals/ResourceSearchModal.tsx +2 -2
- package/src/components/modals/SearchModal.tsx +1 -1
- package/src/components/navigation/CollapsibleResourceNavigation.tsx +14 -9
- package/src/components/navigation/NavigationTabs.css +36 -24
- package/src/components/navigation/ObservableLink.tsx +91 -0
- package/src/components/navigation/SimpleNavigation.tsx +20 -16
- package/src/components/navigation/SortableResourceTab.tsx +11 -5
- package/src/components/pdf-annotation/PdfAnnotationCanvas.tsx +51 -26
- package/src/components/pdf-annotation/__tests__/PdfAnnotationCanvas.test.tsx +28 -22
- package/src/components/resource/AnnotateView.tsx +64 -134
- package/src/components/resource/BrowseView.tsx +86 -166
- package/src/components/resource/HistoryEvent.tsx +13 -7
- package/src/components/resource/ResourceViewer.tsx +122 -264
- package/src/components/resource/__tests__/BrowseView.test.tsx +631 -0
- package/src/components/resource/__tests__/ResourceViewer.mode-switch.test.tsx +231 -0
- package/src/components/resource/panels/AssessmentEntry.tsx +25 -33
- package/src/components/resource/panels/AssessmentPanel.tsx +106 -28
- package/src/components/resource/panels/CommentEntry.tsx +38 -32
- package/src/components/resource/panels/CommentsPanel.tsx +121 -28
- package/src/components/resource/panels/DetectSection.css +36 -1
- package/src/components/resource/panels/DetectSection.tsx +38 -10
- package/src/components/resource/panels/HighlightEntry.tsx +25 -33
- package/src/components/resource/panels/HighlightPanel.tsx +100 -25
- package/src/components/resource/panels/ReferenceEntry.tsx +61 -75
- package/src/components/resource/panels/ReferencesPanel.tsx +134 -42
- package/src/components/resource/panels/ResourceInfoPanel.tsx +47 -48
- package/src/components/resource/panels/TagEntry.tsx +25 -33
- package/src/components/resource/panels/TaggingPanel.tsx +119 -30
- package/src/components/resource/panels/UnifiedAnnotationsPanel.tsx +30 -92
- package/src/components/resource/panels/__tests__/AssessmentPanel.test.tsx +129 -110
- package/src/components/resource/panels/__tests__/CommentEntry.test.tsx +86 -78
- package/src/components/resource/panels/__tests__/CommentsPanel.test.tsx +144 -149
- package/src/components/resource/panels/__tests__/DetectSection.test.tsx +480 -0
- package/src/components/resource/panels/__tests__/HighlightPanel.detectionProgress.test.tsx +362 -0
- package/src/components/resource/panels/__tests__/ReferencesPanel.test.tsx +226 -111
- package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +117 -61
- package/src/components/resource/panels/__tests__/TaggingPanel.test.tsx +128 -106
- package/src/components/settings/SettingsPanel.tsx +15 -12
- package/src/features/admin-devops/__tests__/AdminDevOpsPage.test.tsx +1 -46
- package/src/features/admin-devops/components/AdminDevOpsPage.tsx +0 -9
- package/src/features/admin-security/__tests__/AdminSecurityPage.test.tsx +0 -3
- package/src/features/admin-security/components/AdminSecurityPage.tsx +0 -9
- package/src/features/admin-users/__tests__/AdminUsersPage.test.tsx +0 -3
- package/src/features/admin-users/components/AdminUsersPage.tsx +0 -9
- package/src/features/moderate-entity-tags/__tests__/EntityTagsPage.test.tsx +0 -3
- package/src/features/moderate-entity-tags/components/EntityTagsPage.tsx +1 -9
- package/src/features/moderate-recent/__tests__/RecentDocumentsPage.test.tsx +0 -32
- package/src/features/moderate-recent/components/RecentDocumentsPage.tsx +1 -9
- package/src/features/moderate-tag-schemas/__tests__/TagSchemasPage.test.tsx +0 -32
- package/src/features/moderate-tag-schemas/components/TagSchemasPage.tsx +1 -9
- package/src/features/resource-compose/__tests__/ResourceComposePage.test.tsx +51 -54
- package/src/features/resource-compose/components/ResourceComposePage.tsx +3 -13
- package/src/features/resource-discovery/__tests__/ResourceDiscoveryPage.test.tsx +39 -45
- package/src/features/resource-discovery/components/ResourceDiscoveryPage.tsx +9 -13
- package/src/features/resource-viewer/__tests__/AnnotationDeletionIntegration.test.tsx +231 -0
- package/src/features/resource-viewer/__tests__/DetectionFlowBug.test.tsx +234 -0
- package/src/features/resource-viewer/__tests__/DetectionFlowIntegration.test.tsx +388 -0
- package/src/features/resource-viewer/__tests__/DetectionProgressDismissal.test.tsx +318 -0
- package/src/features/resource-viewer/__tests__/GenerationFlowIntegration.test.tsx +504 -0
- package/src/features/resource-viewer/__tests__/ResourceViewerPage.test.tsx +135 -88
- package/src/features/resource-viewer/__tests__/detection-progress-flow.test.tsx +322 -0
- package/src/features/resource-viewer/components/ResourceViewerPage.tsx +308 -528
- package/translations/ar.json +6 -3
- package/translations/bn.json +6 -3
- package/translations/cs.json +6 -3
- package/translations/da.json +6 -3
- package/translations/de.json +6 -3
- package/translations/el.json +6 -3
- package/translations/en.json +6 -3
- package/translations/es.json +6 -3
- package/translations/fa.json +6 -3
- package/translations/fi.json +6 -3
- package/translations/fr.json +6 -3
- package/translations/he.json +6 -3
- package/translations/hi.json +6 -3
- package/translations/id.json +6 -3
- package/translations/it.json +6 -3
- package/translations/ja.json +6 -3
- package/translations/ko.json +6 -3
- package/translations/ms.json +6 -3
- package/translations/nl.json +6 -3
- package/translations/no.json +6 -3
- package/translations/pl.json +6 -3
- package/translations/pt.json +6 -3
- package/translations/ro.json +6 -3
- package/translations/sv.json +6 -3
- package/translations/th.json +6 -3
- package/translations/tr.json +6 -3
- package/translations/uk.json +6 -3
- package/translations/vi.json +6 -3
- package/translations/zh.json +6 -3
- package/dist/PdfAnnotationCanvas.client-ADC4FFSE.mjs.map +0 -1
- package/dist/TranslationManager-Co_5fSxl.d.mts +0 -118
- package/dist/ar-EMHEHPCJ.mjs.map +0 -1
- package/dist/bn-OVCI4F6X.mjs.map +0 -1
- package/dist/chunk-JZIO2A3B.mjs.map +0 -1
- package/dist/chunk-LIHZTECW.mjs.map +0 -1
- package/dist/cs-FAN66Q2F.mjs.map +0 -1
- package/dist/da-YBBIHI2O.mjs.map +0 -1
- package/dist/de-MAYU33LB.mjs.map +0 -1
- package/dist/el-MKGSWN4O.mjs.map +0 -1
- package/dist/es-52LHUWJD.mjs.map +0 -1
- package/dist/fa-FJICRANB.mjs.map +0 -1
- package/dist/fi-O455XFCR.mjs.map +0 -1
- package/dist/fr-TXIXHOOE.mjs.map +0 -1
- package/dist/he-JBSOX5IN.mjs.map +0 -1
- package/dist/hi-KGHI3XVT.mjs.map +0 -1
- package/dist/id-5OCPPZLO.mjs.map +0 -1
- package/dist/it-PNBBZSM2.mjs.map +0 -1
- package/dist/ja-LDD7R3TJ.mjs.map +0 -1
- package/dist/ko-F47ZDEY3.mjs.map +0 -1
- package/dist/ms-Z7LMXJWL.mjs.map +0 -1
- package/dist/nl-6SJFBPJ3.mjs.map +0 -1
- package/dist/no-YXPBPSGF.mjs.map +0 -1
- package/dist/pl-P4AZ2QME.mjs.map +0 -1
- package/dist/pt-LHWUS6U6.mjs.map +0 -1
- package/dist/ro-EA5J2ZON.mjs.map +0 -1
- package/dist/sv-DATBS3UQ.mjs.map +0 -1
- package/dist/th-WTFJRWPT.mjs.map +0 -1
- package/dist/tr-IKO3RXOX.mjs.map +0 -1
- package/dist/uk-CF6CTTRK.mjs.map +0 -1
- package/dist/vi-AJLTXPZQ.mjs.map +0 -1
- package/dist/zh-U3ORHHYH.mjs.map +0 -1
- /package/dist/{en-DDLIXJCU.mjs.map → en-KJCJQ4OO.mjs.map} +0 -0
|
@@ -21,11 +21,8 @@ const createMockProps = (overrides?: Partial<AdminSecurityPageProps>): AdminSecu
|
|
|
21
21
|
allowedDomains: ['example.com'],
|
|
22
22
|
isLoading: false,
|
|
23
23
|
theme: 'light',
|
|
24
|
-
onThemeChange: vi.fn(),
|
|
25
24
|
showLineNumbers: false,
|
|
26
|
-
onLineNumbersToggle: vi.fn(),
|
|
27
25
|
activePanel: null,
|
|
28
|
-
onPanelToggle: vi.fn(),
|
|
29
26
|
translations: {
|
|
30
27
|
title: 'Security Settings',
|
|
31
28
|
subtitle: 'Configure authentication and authorization',
|
|
@@ -26,11 +26,8 @@ export interface AdminSecurityPageProps {
|
|
|
26
26
|
|
|
27
27
|
// UI state
|
|
28
28
|
theme: 'light' | 'dark' | 'system';
|
|
29
|
-
onThemeChange: (theme: 'light' | 'dark' | 'system') => void;
|
|
30
29
|
showLineNumbers: boolean;
|
|
31
|
-
onLineNumbersToggle: () => void;
|
|
32
30
|
activePanel: string | null;
|
|
33
|
-
onPanelToggle: (panel: string | null) => void;
|
|
34
31
|
|
|
35
32
|
// Translations
|
|
36
33
|
translations: {
|
|
@@ -63,11 +60,8 @@ export function AdminSecurityPage({
|
|
|
63
60
|
allowedDomains,
|
|
64
61
|
isLoading,
|
|
65
62
|
theme,
|
|
66
|
-
onThemeChange,
|
|
67
63
|
showLineNumbers,
|
|
68
|
-
onLineNumbersToggle,
|
|
69
64
|
activePanel,
|
|
70
|
-
onPanelToggle,
|
|
71
65
|
translations: t,
|
|
72
66
|
ToolbarPanels,
|
|
73
67
|
Toolbar,
|
|
@@ -182,15 +176,12 @@ export function AdminSecurityPage({
|
|
|
182
176
|
<ToolbarPanels
|
|
183
177
|
activePanel={activePanel}
|
|
184
178
|
theme={theme}
|
|
185
|
-
onThemeChange={onThemeChange}
|
|
186
179
|
showLineNumbers={showLineNumbers}
|
|
187
|
-
onLineNumbersToggle={onLineNumbersToggle}
|
|
188
180
|
/>
|
|
189
181
|
|
|
190
182
|
<Toolbar
|
|
191
183
|
context="simple"
|
|
192
184
|
activePanel={activePanel}
|
|
193
|
-
onPanelToggle={onPanelToggle}
|
|
194
185
|
/>
|
|
195
186
|
</div>
|
|
196
187
|
</div>
|
|
@@ -78,11 +78,8 @@ const createMockProps = (overrides?: Partial<AdminUsersPageProps>): AdminUsersPa
|
|
|
78
78
|
onAddUser: vi.fn(),
|
|
79
79
|
onExportUsers: vi.fn(),
|
|
80
80
|
theme: 'light',
|
|
81
|
-
onThemeChange: vi.fn(),
|
|
82
81
|
showLineNumbers: false,
|
|
83
|
-
onLineNumbersToggle: vi.fn(),
|
|
84
82
|
activePanel: null,
|
|
85
|
-
onPanelToggle: vi.fn(),
|
|
86
83
|
translations: createMockTranslations(),
|
|
87
84
|
ToolbarPanels: ({ children }: any) => <div data-testid="toolbar-panels">{children}</div>,
|
|
88
85
|
Toolbar: () => <div data-testid="toolbar">Toolbar</div>,
|
|
@@ -151,11 +151,8 @@ export interface AdminUsersPageProps {
|
|
|
151
151
|
|
|
152
152
|
// UI state
|
|
153
153
|
theme: 'light' | 'dark' | 'system';
|
|
154
|
-
onThemeChange: (theme: 'light' | 'dark' | 'system') => void;
|
|
155
154
|
showLineNumbers: boolean;
|
|
156
|
-
onLineNumbersToggle: () => void;
|
|
157
155
|
activePanel: string | null;
|
|
158
|
-
onPanelToggle: (panel: string | null) => void;
|
|
159
156
|
|
|
160
157
|
// Translations
|
|
161
158
|
translations: {
|
|
@@ -215,11 +212,8 @@ export function AdminUsersPage({
|
|
|
215
212
|
onAddUser,
|
|
216
213
|
onExportUsers,
|
|
217
214
|
theme,
|
|
218
|
-
onThemeChange,
|
|
219
215
|
showLineNumbers,
|
|
220
|
-
onLineNumbersToggle,
|
|
221
216
|
activePanel,
|
|
222
|
-
onPanelToggle,
|
|
223
217
|
translations: t,
|
|
224
218
|
ToolbarPanels,
|
|
225
219
|
Toolbar,
|
|
@@ -458,15 +452,12 @@ export function AdminUsersPage({
|
|
|
458
452
|
<ToolbarPanels
|
|
459
453
|
activePanel={activePanel}
|
|
460
454
|
theme={theme}
|
|
461
|
-
onThemeChange={onThemeChange}
|
|
462
455
|
showLineNumbers={showLineNumbers}
|
|
463
|
-
onLineNumbersToggle={onLineNumbersToggle}
|
|
464
456
|
/>
|
|
465
457
|
|
|
466
458
|
<Toolbar
|
|
467
459
|
context="simple"
|
|
468
460
|
activePanel={activePanel}
|
|
469
|
-
onPanelToggle={onPanelToggle}
|
|
470
461
|
/>
|
|
471
462
|
</div>
|
|
472
463
|
</div>
|
|
@@ -19,11 +19,8 @@ const createMockProps = (overrides?: Partial<EntityTagsPageProps>): EntityTagsPa
|
|
|
19
19
|
onAddTag: vi.fn(),
|
|
20
20
|
isAddingTag: false,
|
|
21
21
|
theme: 'light',
|
|
22
|
-
onThemeChange: vi.fn(),
|
|
23
22
|
showLineNumbers: false,
|
|
24
|
-
onLineNumbersToggle: vi.fn(),
|
|
25
23
|
activePanel: null,
|
|
26
|
-
onPanelToggle: vi.fn(),
|
|
27
24
|
translations: {
|
|
28
25
|
pageTitle: 'Entity Tags',
|
|
29
26
|
pageDescription: 'Manage entity type tags',
|
|
@@ -28,11 +28,8 @@ export interface EntityTagsPageProps {
|
|
|
28
28
|
|
|
29
29
|
// UI state
|
|
30
30
|
theme: 'light' | 'dark' | 'system';
|
|
31
|
-
onThemeChange: (theme: 'light' | 'dark' | 'system') => void;
|
|
32
31
|
showLineNumbers: boolean;
|
|
33
|
-
onLineNumbersToggle: () => void;
|
|
34
32
|
activePanel: string | null;
|
|
35
|
-
onPanelToggle: (panel: string | null) => void;
|
|
36
33
|
|
|
37
34
|
// Translations
|
|
38
35
|
translations: {
|
|
@@ -58,15 +55,13 @@ export function EntityTagsPage({
|
|
|
58
55
|
onAddTag,
|
|
59
56
|
isAddingTag,
|
|
60
57
|
theme,
|
|
61
|
-
onThemeChange,
|
|
62
58
|
showLineNumbers,
|
|
63
|
-
onLineNumbersToggle,
|
|
64
59
|
activePanel,
|
|
65
|
-
onPanelToggle,
|
|
66
60
|
translations: t,
|
|
67
61
|
ToolbarPanels,
|
|
68
62
|
Toolbar,
|
|
69
63
|
}: EntityTagsPageProps) {
|
|
64
|
+
|
|
70
65
|
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
|
71
66
|
if (e.key === 'Enter') {
|
|
72
67
|
onAddTag();
|
|
@@ -155,15 +150,12 @@ export function EntityTagsPage({
|
|
|
155
150
|
<ToolbarPanels
|
|
156
151
|
activePanel={activePanel}
|
|
157
152
|
theme={theme}
|
|
158
|
-
onThemeChange={onThemeChange}
|
|
159
153
|
showLineNumbers={showLineNumbers}
|
|
160
|
-
onLineNumbersToggle={onLineNumbersToggle}
|
|
161
154
|
/>
|
|
162
155
|
|
|
163
156
|
<Toolbar
|
|
164
157
|
context="simple"
|
|
165
158
|
activePanel={activePanel}
|
|
166
|
-
onPanelToggle={onPanelToggle}
|
|
167
159
|
/>
|
|
168
160
|
</div>
|
|
169
161
|
</div>
|
|
@@ -14,11 +14,8 @@ const createMockProps = (overrides?: Partial<RecentDocumentsPageProps>): RecentD
|
|
|
14
14
|
hasDocuments: false,
|
|
15
15
|
isLoading: false,
|
|
16
16
|
theme: 'light',
|
|
17
|
-
onThemeChange: vi.fn(),
|
|
18
17
|
showLineNumbers: false,
|
|
19
|
-
onLineNumbersToggle: vi.fn(),
|
|
20
18
|
activePanel: null,
|
|
21
|
-
onPanelToggle: vi.fn(),
|
|
22
19
|
translations: {
|
|
23
20
|
pageTitle: 'Recent Documents',
|
|
24
21
|
pageDescription: 'View recently moderated documents',
|
|
@@ -219,35 +216,6 @@ describe('RecentDocumentsPage', () => {
|
|
|
219
216
|
);
|
|
220
217
|
});
|
|
221
218
|
|
|
222
|
-
it('passes callbacks to toolbar components', () => {
|
|
223
|
-
const onThemeChange = vi.fn();
|
|
224
|
-
const onLineNumbersToggle = vi.fn();
|
|
225
|
-
const onPanelToggle = vi.fn();
|
|
226
|
-
const ToolbarPanels = vi.fn(() => <div data-testid="toolbar-panels" />);
|
|
227
|
-
const Toolbar = vi.fn(() => <div data-testid="toolbar" />);
|
|
228
|
-
|
|
229
|
-
const props = createMockProps({
|
|
230
|
-
onThemeChange,
|
|
231
|
-
onLineNumbersToggle,
|
|
232
|
-
onPanelToggle,
|
|
233
|
-
ToolbarPanels,
|
|
234
|
-
Toolbar,
|
|
235
|
-
});
|
|
236
|
-
render(<RecentDocumentsPage {...props} />);
|
|
237
|
-
|
|
238
|
-
expect(ToolbarPanels).toHaveBeenCalledWith(
|
|
239
|
-
expect.objectContaining({
|
|
240
|
-
onThemeChange,
|
|
241
|
-
onLineNumbersToggle,
|
|
242
|
-
}),
|
|
243
|
-
expect.anything()
|
|
244
|
-
);
|
|
245
|
-
|
|
246
|
-
expect(Toolbar).toHaveBeenCalledWith(
|
|
247
|
-
expect.objectContaining({ onPanelToggle }),
|
|
248
|
-
expect.anything()
|
|
249
|
-
);
|
|
250
|
-
});
|
|
251
219
|
|
|
252
220
|
it('passes context to toolbar', () => {
|
|
253
221
|
const Toolbar = vi.fn(() => <div data-testid="toolbar" />);
|
|
@@ -15,11 +15,8 @@ export interface RecentDocumentsPageProps {
|
|
|
15
15
|
|
|
16
16
|
// UI state
|
|
17
17
|
theme: 'light' | 'dark' | 'system';
|
|
18
|
-
onThemeChange: (theme: 'light' | 'dark' | 'system') => void;
|
|
19
18
|
showLineNumbers: boolean;
|
|
20
|
-
onLineNumbersToggle: () => void;
|
|
21
19
|
activePanel: string | null;
|
|
22
|
-
onPanelToggle: (panel: string | null) => void;
|
|
23
20
|
|
|
24
21
|
// Translations
|
|
25
22
|
translations: {
|
|
@@ -40,15 +37,13 @@ export interface RecentDocumentsPageProps {
|
|
|
40
37
|
export function RecentDocumentsPage({
|
|
41
38
|
isLoading,
|
|
42
39
|
theme,
|
|
43
|
-
onThemeChange,
|
|
44
40
|
showLineNumbers,
|
|
45
|
-
onLineNumbersToggle,
|
|
46
41
|
activePanel,
|
|
47
|
-
onPanelToggle,
|
|
48
42
|
translations: t,
|
|
49
43
|
ToolbarPanels,
|
|
50
44
|
Toolbar,
|
|
51
45
|
}: RecentDocumentsPageProps) {
|
|
46
|
+
|
|
52
47
|
if (isLoading) {
|
|
53
48
|
return (
|
|
54
49
|
<div className="semiont-page__loading">
|
|
@@ -100,15 +95,12 @@ export function RecentDocumentsPage({
|
|
|
100
95
|
<ToolbarPanels
|
|
101
96
|
activePanel={activePanel}
|
|
102
97
|
theme={theme}
|
|
103
|
-
onThemeChange={onThemeChange}
|
|
104
98
|
showLineNumbers={showLineNumbers}
|
|
105
|
-
onLineNumbersToggle={onLineNumbersToggle}
|
|
106
99
|
/>
|
|
107
100
|
|
|
108
101
|
<Toolbar
|
|
109
102
|
context="simple"
|
|
110
103
|
activePanel={activePanel}
|
|
111
|
-
onPanelToggle={onPanelToggle}
|
|
112
104
|
/>
|
|
113
105
|
</div>
|
|
114
106
|
</div>
|
|
@@ -61,11 +61,8 @@ const createMockProps = (overrides?: Partial<TagSchemasPageProps>): TagSchemasPa
|
|
|
61
61
|
schemas: mockSchemas,
|
|
62
62
|
isLoading: false,
|
|
63
63
|
theme: 'light',
|
|
64
|
-
onThemeChange: vi.fn(),
|
|
65
64
|
showLineNumbers: false,
|
|
66
|
-
onLineNumbersToggle: vi.fn(),
|
|
67
65
|
activePanel: null,
|
|
68
|
-
onPanelToggle: vi.fn(),
|
|
69
66
|
translations: {
|
|
70
67
|
pageTitle: 'Tag Schemas',
|
|
71
68
|
pageDescription: 'View available tag schemas for content analysis',
|
|
@@ -290,35 +287,6 @@ describe('TagSchemasPage', () => {
|
|
|
290
287
|
);
|
|
291
288
|
});
|
|
292
289
|
|
|
293
|
-
it('passes callbacks to toolbar components', () => {
|
|
294
|
-
const onThemeChange = vi.fn();
|
|
295
|
-
const onLineNumbersToggle = vi.fn();
|
|
296
|
-
const onPanelToggle = vi.fn();
|
|
297
|
-
const ToolbarPanels = vi.fn(() => <div data-testid="toolbar-panels" />);
|
|
298
|
-
const Toolbar = vi.fn(() => <div data-testid="toolbar" />);
|
|
299
|
-
|
|
300
|
-
const props = createMockProps({
|
|
301
|
-
onThemeChange,
|
|
302
|
-
onLineNumbersToggle,
|
|
303
|
-
onPanelToggle,
|
|
304
|
-
ToolbarPanels,
|
|
305
|
-
Toolbar,
|
|
306
|
-
});
|
|
307
|
-
render(<TagSchemasPage {...props} />);
|
|
308
|
-
|
|
309
|
-
expect(ToolbarPanels).toHaveBeenCalledWith(
|
|
310
|
-
expect.objectContaining({
|
|
311
|
-
onThemeChange,
|
|
312
|
-
onLineNumbersToggle,
|
|
313
|
-
}),
|
|
314
|
-
expect.anything()
|
|
315
|
-
);
|
|
316
|
-
|
|
317
|
-
expect(Toolbar).toHaveBeenCalledWith(
|
|
318
|
-
expect.objectContaining({ onPanelToggle }),
|
|
319
|
-
expect.anything()
|
|
320
|
-
);
|
|
321
|
-
});
|
|
322
290
|
});
|
|
323
291
|
|
|
324
292
|
describe('Layout and Structure', () => {
|
|
@@ -20,11 +20,8 @@ export interface TagSchemasPageProps {
|
|
|
20
20
|
|
|
21
21
|
// UI state
|
|
22
22
|
theme: 'light' | 'dark' | 'system';
|
|
23
|
-
onThemeChange: (theme: 'light' | 'dark' | 'system') => void;
|
|
24
23
|
showLineNumbers: boolean;
|
|
25
|
-
onLineNumbersToggle: () => void;
|
|
26
24
|
activePanel: string | null;
|
|
27
|
-
onPanelToggle: (panel: string | null) => void;
|
|
28
25
|
|
|
29
26
|
// Translations
|
|
30
27
|
translations: {
|
|
@@ -55,15 +52,13 @@ export function TagSchemasPage({
|
|
|
55
52
|
schemas,
|
|
56
53
|
isLoading,
|
|
57
54
|
theme,
|
|
58
|
-
onThemeChange,
|
|
59
55
|
showLineNumbers,
|
|
60
|
-
onLineNumbersToggle,
|
|
61
56
|
activePanel,
|
|
62
|
-
onPanelToggle,
|
|
63
57
|
translations: t,
|
|
64
58
|
ToolbarPanels,
|
|
65
59
|
Toolbar,
|
|
66
60
|
}: TagSchemasPageProps) {
|
|
61
|
+
|
|
67
62
|
if (isLoading) {
|
|
68
63
|
return (
|
|
69
64
|
<div className="semiont-page__loading">
|
|
@@ -156,15 +151,12 @@ export function TagSchemasPage({
|
|
|
156
151
|
<ToolbarPanels
|
|
157
152
|
activePanel={activePanel}
|
|
158
153
|
theme={theme}
|
|
159
|
-
onThemeChange={onThemeChange}
|
|
160
154
|
showLineNumbers={showLineNumbers}
|
|
161
|
-
onLineNumbersToggle={onLineNumbersToggle}
|
|
162
155
|
/>
|
|
163
156
|
|
|
164
157
|
<Toolbar
|
|
165
158
|
context="simple"
|
|
166
159
|
activePanel={activePanel}
|
|
167
|
-
onPanelToggle={onPanelToggle}
|
|
168
160
|
/>
|
|
169
161
|
</div>
|
|
170
162
|
</div>
|
|
@@ -9,26 +9,19 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
|
9
9
|
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
|
10
10
|
import { ResourceComposePage } from '../components/ResourceComposePage';
|
|
11
11
|
import type { ResourceComposePageProps, SaveResourceParams } from '../components/ResourceComposePage';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
value={content}
|
|
26
|
-
onChange={(e) => editable && onChange?.(e.target.value)}
|
|
27
|
-
disabled={!editable}
|
|
28
|
-
/>
|
|
29
|
-
),
|
|
30
|
-
};
|
|
31
|
-
});
|
|
12
|
+
import { EventBusProvider, resetEventBusForTesting } from '../../../contexts/EventBusContext';
|
|
13
|
+
|
|
14
|
+
// Mock CodeMirrorRenderer to avoid CodeMirror dependencies
|
|
15
|
+
vi.mock('../../../components/CodeMirrorRenderer', () => ({
|
|
16
|
+
CodeMirrorRenderer: ({ content, onChange, editable }: any) => (
|
|
17
|
+
<textarea
|
|
18
|
+
data-testid="code-editor"
|
|
19
|
+
value={content}
|
|
20
|
+
onChange={(e) => editable && onChange?.(e.target.value)}
|
|
21
|
+
disabled={!editable}
|
|
22
|
+
/>
|
|
23
|
+
),
|
|
24
|
+
}));
|
|
32
25
|
|
|
33
26
|
const createMockTranslations = () => ({
|
|
34
27
|
title: 'Compose Resource',
|
|
@@ -69,11 +62,8 @@ const createMockProps = (overrides?: Partial<ResourceComposePageProps>): Resourc
|
|
|
69
62
|
availableEntityTypes: ['Document', 'Article', 'Report'],
|
|
70
63
|
initialLocale: 'en',
|
|
71
64
|
theme: 'light',
|
|
72
|
-
onThemeChange: vi.fn(),
|
|
73
65
|
showLineNumbers: false,
|
|
74
|
-
onLineNumbersToggle: vi.fn(),
|
|
75
66
|
activePanel: null,
|
|
76
|
-
onPanelToggle: vi.fn(),
|
|
77
67
|
onSaveResource: vi.fn().mockResolvedValue(undefined),
|
|
78
68
|
onCancel: vi.fn(),
|
|
79
69
|
translations: createMockTranslations(),
|
|
@@ -82,18 +72,27 @@ const createMockProps = (overrides?: Partial<ResourceComposePageProps>): Resourc
|
|
|
82
72
|
...overrides,
|
|
83
73
|
});
|
|
84
74
|
|
|
75
|
+
// Helper to render with EventBusProvider
|
|
76
|
+
const renderWithProviders = (ui: React.ReactElement) => {
|
|
77
|
+
return render(<EventBusProvider>{ui}</EventBusProvider>);
|
|
78
|
+
};
|
|
79
|
+
|
|
85
80
|
describe('ResourceComposePage', () => {
|
|
81
|
+
beforeEach(() => {
|
|
82
|
+
resetEventBusForTesting();
|
|
83
|
+
});
|
|
84
|
+
|
|
86
85
|
describe('Basic Rendering - New Resource Mode', () => {
|
|
87
86
|
it('renders without crashing', () => {
|
|
88
87
|
const props = createMockProps();
|
|
89
|
-
|
|
88
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
90
89
|
|
|
91
90
|
expect(screen.getByText('Compose Resource')).toBeInTheDocument();
|
|
92
91
|
});
|
|
93
92
|
|
|
94
93
|
it('renders resource name input', () => {
|
|
95
94
|
const props = createMockProps();
|
|
96
|
-
|
|
95
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
97
96
|
|
|
98
97
|
expect(screen.getByLabelText('Resource Name')).toBeInTheDocument();
|
|
99
98
|
expect(screen.getByPlaceholderText('Enter resource name')).toBeInTheDocument();
|
|
@@ -101,7 +100,7 @@ describe('ResourceComposePage', () => {
|
|
|
101
100
|
|
|
102
101
|
it('renders entity type selection', () => {
|
|
103
102
|
const props = createMockProps();
|
|
104
|
-
|
|
103
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
105
104
|
|
|
106
105
|
expect(screen.getByText('Entity Types')).toBeInTheDocument();
|
|
107
106
|
expect(screen.getByRole('button', { name: /Document entity type/ })).toBeInTheDocument();
|
|
@@ -111,14 +110,14 @@ describe('ResourceComposePage', () => {
|
|
|
111
110
|
|
|
112
111
|
it('renders language selector', () => {
|
|
113
112
|
const props = createMockProps();
|
|
114
|
-
|
|
113
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
115
114
|
|
|
116
115
|
expect(screen.getByLabelText('Language')).toBeInTheDocument();
|
|
117
116
|
});
|
|
118
117
|
|
|
119
118
|
it('renders content source toggle', () => {
|
|
120
119
|
const props = createMockProps();
|
|
121
|
-
|
|
120
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
122
121
|
|
|
123
122
|
expect(screen.getByText('Upload File')).toBeInTheDocument();
|
|
124
123
|
expect(screen.getByText('Write Content')).toBeInTheDocument();
|
|
@@ -126,7 +125,7 @@ describe('ResourceComposePage', () => {
|
|
|
126
125
|
|
|
127
126
|
it('renders toolbar component', () => {
|
|
128
127
|
const props = createMockProps();
|
|
129
|
-
|
|
128
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
130
129
|
|
|
131
130
|
expect(screen.getByTestId('toolbar')).toBeInTheDocument();
|
|
132
131
|
});
|
|
@@ -144,7 +143,7 @@ describe('ResourceComposePage', () => {
|
|
|
144
143
|
sourceContent: 'Original content',
|
|
145
144
|
},
|
|
146
145
|
});
|
|
147
|
-
|
|
146
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
148
147
|
|
|
149
148
|
expect(screen.getByText('Edit Cloned Resource')).toBeInTheDocument();
|
|
150
149
|
expect(screen.getByText('Editing a cloned resource')).toBeInTheDocument();
|
|
@@ -161,7 +160,7 @@ describe('ResourceComposePage', () => {
|
|
|
161
160
|
sourceContent: 'Original content',
|
|
162
161
|
},
|
|
163
162
|
});
|
|
164
|
-
|
|
163
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
165
164
|
|
|
166
165
|
const nameInput = screen.getByLabelText('Resource Name') as HTMLInputElement;
|
|
167
166
|
expect(nameInput.value).toBe('Original Resource');
|
|
@@ -181,7 +180,7 @@ describe('ResourceComposePage', () => {
|
|
|
181
180
|
sourceContent: 'Original content',
|
|
182
181
|
},
|
|
183
182
|
});
|
|
184
|
-
|
|
183
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
185
184
|
|
|
186
185
|
expect(screen.getByLabelText('Archive original resource')).toBeInTheDocument();
|
|
187
186
|
});
|
|
@@ -197,7 +196,7 @@ describe('ResourceComposePage', () => {
|
|
|
197
196
|
sourceContent: 'Original content',
|
|
198
197
|
},
|
|
199
198
|
});
|
|
200
|
-
|
|
199
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
201
200
|
|
|
202
201
|
expect(screen.queryByText('Upload File')).not.toBeInTheDocument();
|
|
203
202
|
expect(screen.queryByText('Write Content')).not.toBeInTheDocument();
|
|
@@ -215,7 +214,7 @@ describe('ResourceComposePage', () => {
|
|
|
215
214
|
entityTypes: ['Document'],
|
|
216
215
|
},
|
|
217
216
|
});
|
|
218
|
-
|
|
217
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
219
218
|
|
|
220
219
|
expect(screen.getByText('Complete Reference')).toBeInTheDocument();
|
|
221
220
|
expect(screen.getByText('Creating a new resource for reference')).toBeInTheDocument();
|
|
@@ -232,7 +231,7 @@ describe('ResourceComposePage', () => {
|
|
|
232
231
|
entityTypes: ['Document', 'Article'],
|
|
233
232
|
},
|
|
234
233
|
});
|
|
235
|
-
|
|
234
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
236
235
|
|
|
237
236
|
const nameInput = screen.getByLabelText('Resource Name') as HTMLInputElement;
|
|
238
237
|
expect(nameInput.value).toBe('Referenced Resource');
|
|
@@ -251,7 +250,7 @@ describe('ResourceComposePage', () => {
|
|
|
251
250
|
entityTypes: ['Document'],
|
|
252
251
|
},
|
|
253
252
|
});
|
|
254
|
-
|
|
253
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
255
254
|
|
|
256
255
|
// Should show read-only entity types
|
|
257
256
|
expect(screen.getByText('Document')).toBeInTheDocument();
|
|
@@ -267,7 +266,7 @@ describe('ResourceComposePage', () => {
|
|
|
267
266
|
describe('Content Input Method', () => {
|
|
268
267
|
it('defaults to write mode', () => {
|
|
269
268
|
const props = createMockProps();
|
|
270
|
-
|
|
269
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
271
270
|
|
|
272
271
|
const writeButton = screen.getByText('Write Content').closest('button');
|
|
273
272
|
expect(writeButton).toHaveAttribute('data-active', 'true');
|
|
@@ -275,7 +274,7 @@ describe('ResourceComposePage', () => {
|
|
|
275
274
|
|
|
276
275
|
it('allows switching to upload mode', () => {
|
|
277
276
|
const props = createMockProps();
|
|
278
|
-
|
|
277
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
279
278
|
|
|
280
279
|
const uploadButton = screen.getByText('Upload File').closest('button');
|
|
281
280
|
fireEvent.click(uploadButton!);
|
|
@@ -285,28 +284,28 @@ describe('ResourceComposePage', () => {
|
|
|
285
284
|
|
|
286
285
|
it('shows format selector in write mode', () => {
|
|
287
286
|
const props = createMockProps();
|
|
288
|
-
|
|
287
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
289
288
|
|
|
290
289
|
expect(screen.getByLabelText('Format')).toBeInTheDocument();
|
|
291
290
|
});
|
|
292
291
|
|
|
293
292
|
it('shows encoding selector in write mode', () => {
|
|
294
293
|
const props = createMockProps();
|
|
295
|
-
|
|
294
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
296
295
|
|
|
297
296
|
expect(screen.getByLabelText('Encoding')).toBeInTheDocument();
|
|
298
297
|
});
|
|
299
298
|
|
|
300
299
|
it('shows code editor in write mode', () => {
|
|
301
300
|
const props = createMockProps();
|
|
302
|
-
|
|
301
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
303
302
|
|
|
304
303
|
expect(screen.getByTestId('code-editor')).toBeInTheDocument();
|
|
305
304
|
});
|
|
306
305
|
|
|
307
306
|
it('shows file upload in upload mode', () => {
|
|
308
307
|
const props = createMockProps();
|
|
309
|
-
|
|
308
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
310
309
|
|
|
311
310
|
const uploadButton = screen.getByText('Upload File').closest('button');
|
|
312
311
|
fireEvent.click(uploadButton!);
|
|
@@ -319,7 +318,7 @@ describe('ResourceComposePage', () => {
|
|
|
319
318
|
it('calls onSaveResource with correct params for new resource', async () => {
|
|
320
319
|
const onSaveResource = vi.fn().mockResolvedValue(undefined);
|
|
321
320
|
const props = createMockProps({ onSaveResource });
|
|
322
|
-
|
|
321
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
323
322
|
|
|
324
323
|
// Fill in name
|
|
325
324
|
const nameInput = screen.getByLabelText('Resource Name');
|
|
@@ -353,7 +352,7 @@ describe('ResourceComposePage', () => {
|
|
|
353
352
|
it('includes selected entity types', async () => {
|
|
354
353
|
const onSaveResource = vi.fn().mockResolvedValue(undefined);
|
|
355
354
|
const props = createMockProps({ onSaveResource });
|
|
356
|
-
|
|
355
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
357
356
|
|
|
358
357
|
// Fill in name
|
|
359
358
|
const nameInput = screen.getByLabelText('Resource Name');
|
|
@@ -378,7 +377,7 @@ describe('ResourceComposePage', () => {
|
|
|
378
377
|
|
|
379
378
|
it('requires resource name', () => {
|
|
380
379
|
const props = createMockProps();
|
|
381
|
-
|
|
380
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
382
381
|
|
|
383
382
|
const submitButton = screen.getByRole('button', { name: 'Create Resource' });
|
|
384
383
|
expect(submitButton).toBeDisabled();
|
|
@@ -386,7 +385,7 @@ describe('ResourceComposePage', () => {
|
|
|
386
385
|
|
|
387
386
|
it('enables submit button when name is provided', () => {
|
|
388
387
|
const props = createMockProps();
|
|
389
|
-
|
|
388
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
390
389
|
|
|
391
390
|
const nameInput = screen.getByLabelText('Resource Name');
|
|
392
391
|
fireEvent.change(nameInput, { target: { value: 'Test Resource' } });
|
|
@@ -398,7 +397,7 @@ describe('ResourceComposePage', () => {
|
|
|
398
397
|
it('disables form during submission', async () => {
|
|
399
398
|
const onSaveResource = vi.fn(() => new Promise<void>(resolve => setTimeout(resolve, 100)));
|
|
400
399
|
const props = createMockProps({ onSaveResource });
|
|
401
|
-
|
|
400
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
402
401
|
|
|
403
402
|
const nameInput = screen.getByLabelText('Resource Name');
|
|
404
403
|
fireEvent.change(nameInput, { target: { value: 'Test Resource' } });
|
|
@@ -419,7 +418,7 @@ describe('ResourceComposePage', () => {
|
|
|
419
418
|
it('calls onCancel when cancel button clicked', () => {
|
|
420
419
|
const onCancel = vi.fn();
|
|
421
420
|
const props = createMockProps({ onCancel });
|
|
422
|
-
|
|
421
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
423
422
|
|
|
424
423
|
const cancelButton = screen.getByRole('button', { name: 'Cancel' });
|
|
425
424
|
fireEvent.click(cancelButton);
|
|
@@ -431,7 +430,7 @@ describe('ResourceComposePage', () => {
|
|
|
431
430
|
describe('Toolbar Integration', () => {
|
|
432
431
|
it('renders ToolbarPanels component', () => {
|
|
433
432
|
const props = createMockProps();
|
|
434
|
-
|
|
433
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
435
434
|
|
|
436
435
|
expect(screen.getByTestId('toolbar-panels')).toBeInTheDocument();
|
|
437
436
|
});
|
|
@@ -440,16 +439,14 @@ describe('ResourceComposePage', () => {
|
|
|
440
439
|
const ToolbarPanels = vi.fn(() => <div data-testid="toolbar-panels" />);
|
|
441
440
|
const props = createMockProps({
|
|
442
441
|
theme: 'dark',
|
|
443
|
-
onThemeChange: vi.fn(),
|
|
444
442
|
ToolbarPanels,
|
|
445
443
|
});
|
|
446
444
|
|
|
447
|
-
|
|
445
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
448
446
|
|
|
449
447
|
expect(ToolbarPanels).toHaveBeenCalledWith(
|
|
450
448
|
expect.objectContaining({
|
|
451
449
|
theme: 'dark',
|
|
452
|
-
onThemeChange: expect.any(Function),
|
|
453
450
|
}),
|
|
454
451
|
expect.anything()
|
|
455
452
|
);
|
|
@@ -459,7 +456,7 @@ describe('ResourceComposePage', () => {
|
|
|
459
456
|
describe('Code Editor Integration', () => {
|
|
460
457
|
it('allows editing content', () => {
|
|
461
458
|
const props = createMockProps();
|
|
462
|
-
|
|
459
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
463
460
|
|
|
464
461
|
const editor = screen.getByTestId('code-editor') as HTMLTextAreaElement;
|
|
465
462
|
fireEvent.change(editor, { target: { value: 'New content' } });
|
|
@@ -469,7 +466,7 @@ describe('ResourceComposePage', () => {
|
|
|
469
466
|
|
|
470
467
|
it('respects showLineNumbers prop', () => {
|
|
471
468
|
const props = createMockProps({ showLineNumbers: true });
|
|
472
|
-
|
|
469
|
+
renderWithProviders(<ResourceComposePage {...props} />);
|
|
473
470
|
|
|
474
471
|
expect(screen.getByTestId('code-editor')).toBeInTheDocument();
|
|
475
472
|
});
|