@semiont/react-ui 0.4.14 → 0.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +18 -12
  2. package/dist/KnowledgeBaseSessionContext-CpYaCbnC.d.mts +174 -0
  3. package/dist/{PdfAnnotationCanvas.client-CW6SKH2U.mjs → PdfAnnotationCanvas.client-CHDCGQBR.mjs} +3 -3
  4. package/dist/{chunk-HNZOXH4L.mjs → chunk-OZICDVH7.mjs} +5 -3
  5. package/dist/chunk-OZICDVH7.mjs.map +1 -0
  6. package/dist/chunk-R2U7P4TK.mjs +865 -0
  7. package/dist/chunk-R2U7P4TK.mjs.map +1 -0
  8. package/dist/{chunk-BQJWOK4C.mjs → chunk-VN5NY4SN.mjs} +9 -8
  9. package/dist/chunk-VN5NY4SN.mjs.map +1 -0
  10. package/dist/index.d.mts +139 -169
  11. package/dist/index.mjs +2197 -1947
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/test-utils.d.mts +13 -62
  14. package/dist/test-utils.mjs +40 -21
  15. package/dist/test-utils.mjs.map +1 -1
  16. package/package.json +5 -3
  17. package/src/components/ProtectedErrorBoundary.tsx +95 -0
  18. package/src/components/__tests__/ProtectedErrorBoundary.test.tsx +197 -0
  19. package/src/components/modals/PermissionDeniedModal.tsx +140 -0
  20. package/src/components/modals/ReferenceWizardModal.tsx +3 -2
  21. package/src/components/modals/SessionExpiredModal.tsx +101 -0
  22. package/src/components/modals/__tests__/PermissionDeniedModal.test.tsx +150 -0
  23. package/src/components/modals/__tests__/SessionExpiredModal.test.tsx +115 -0
  24. package/src/components/resource/AnnotationHistory.tsx +5 -6
  25. package/src/components/resource/HistoryEvent.tsx +7 -7
  26. package/src/components/resource/__tests__/AnnotationHistory.test.tsx +33 -34
  27. package/src/components/resource/__tests__/HistoryEvent.test.tsx +17 -19
  28. package/src/components/resource/__tests__/event-formatting.test.ts +70 -94
  29. package/src/components/resource/event-formatting.ts +56 -56
  30. package/src/components/resource/panels/ReferenceEntry.tsx +7 -5
  31. package/src/components/resource/panels/ResourceInfoPanel.tsx +8 -6
  32. package/src/components/resource/panels/__tests__/ReferenceEntry.test.tsx +12 -12
  33. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +1 -0
  34. package/src/features/resource-viewer/__tests__/AnnotationCreationPending.test.tsx +1 -1
  35. package/src/features/resource-viewer/__tests__/AnnotationDeletionIntegration.test.tsx +4 -4
  36. package/src/features/resource-viewer/__tests__/AnnotationProgressDismissal.test.tsx +5 -10
  37. package/src/features/resource-viewer/__tests__/BindFlowIntegration.test.tsx +23 -54
  38. package/src/features/resource-viewer/__tests__/DetectionFlowBug.test.tsx +6 -6
  39. package/src/features/resource-viewer/__tests__/DetectionFlowIntegration.test.tsx +7 -19
  40. package/src/features/resource-viewer/__tests__/ToastNotifications.test.tsx +1 -1
  41. package/src/features/resource-viewer/__tests__/YieldFlowIntegration.test.tsx +18 -44
  42. package/src/features/resource-viewer/__tests__/annotation-progress-flow.test.tsx +6 -6
  43. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +24 -26
  44. package/dist/TranslationManager-CudgH3gw.d.mts +0 -107
  45. package/dist/chunk-BQJWOK4C.mjs.map +0 -1
  46. package/dist/chunk-HNZOXH4L.mjs.map +0 -1
  47. package/dist/chunk-OL5UST25.mjs +0 -413
  48. package/dist/chunk-OL5UST25.mjs.map +0 -1
  49. /package/dist/{PdfAnnotationCanvas.client-CW6SKH2U.mjs.map → PdfAnnotationCanvas.client-CHDCGQBR.mjs.map} +0 -0
@@ -2,9 +2,10 @@ import { ReactElement } from 'react';
2
2
  import { RenderOptions, RenderResult } from '@testing-library/react';
3
3
  export * from '@testing-library/react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
+ import { T as TranslationManager, e as KnowledgeBaseSessionValue, O as OpenResourcesManager } from './KnowledgeBaseSessionContext-CpYaCbnC.mjs';
5
6
  import { EventBus } from '@semiont/core';
6
- import { T as TranslationManager, S as SessionManager, O as OpenResourcesManager } from './TranslationManager-CudgH3gw.mjs';
7
7
  export { vi } from 'vitest';
8
+ import 'react/jsx-runtime';
8
9
 
9
10
  /**
10
11
  * Test utilities for @semiont/react-ui
@@ -13,12 +14,20 @@ export { vi } from 'vitest';
13
14
  * for testing, with customizable mock implementations.
14
15
  */
15
16
 
17
+ /**
18
+ * Default mock context value for KnowledgeBaseSessionProvider in tests.
19
+ * Tests override individual fields via `createMockKnowledgeBaseSession`.
20
+ */
21
+ declare const defaultMockKnowledgeBaseSession: KnowledgeBaseSessionValue;
22
+ /**
23
+ * Construct a mock KnowledgeBaseSession context value with overrides.
24
+ */
25
+ declare function createMockKnowledgeBaseSession(overrides?: Partial<KnowledgeBaseSessionValue>): KnowledgeBaseSessionValue;
16
26
  /**
17
27
  * Default mock implementations
18
28
  */
19
29
  declare const defaultMocks: {
20
30
  translationManager: TranslationManager;
21
- sessionManager: SessionManager;
22
31
  openResourcesManager: OpenResourcesManager;
23
32
  };
24
33
  /**
@@ -27,29 +36,10 @@ declare const defaultMocks: {
27
36
  interface TestProvidersOptions {
28
37
  translationManager?: TranslationManager;
29
38
  apiBaseUrl?: string;
30
- sessionManager?: SessionManager;
39
+ knowledgeBaseSession?: KnowledgeBaseSessionValue;
31
40
  openResourcesManager?: OpenResourcesManager;
32
41
  queryClient?: QueryClient;
33
42
  }
34
- /**
35
- * Render component with all providers
36
- *
37
- * @example
38
- * ```tsx
39
- * import { renderWithProviders } from '@semiont/react-ui/test-utils';
40
- *
41
- * it('should render component', () => {
42
- * renderWithProviders(<MyComponent />);
43
- * expect(screen.getByText('Hello')).toBeInTheDocument();
44
- * });
45
- *
46
- * it('should work with custom API base URL', () => {
47
- * renderWithProviders(<MyComponent />, {
48
- * apiBaseUrl: 'http://test.example.com',
49
- * });
50
- * });
51
- * ```
52
- */
53
43
  interface RenderWithProvidersOptions extends TestProvidersOptions, Omit<RenderOptions, 'wrapper'> {
54
44
  /** If true, returns the event bus instance along with render result */
55
45
  returnEventBus?: boolean;
@@ -60,50 +50,11 @@ interface RenderWithProvidersResult extends RenderResult {
60
50
  declare function renderWithProviders(ui: ReactElement, options?: RenderWithProvidersOptions): RenderWithProvidersResult;
61
51
  /**
62
52
  * Create a mock translation manager with custom translations
63
- *
64
- * @example
65
- * ```tsx
66
- * const translations = createMockTranslationManager({
67
- * Toolbar: { save: 'Save', cancel: 'Cancel' },
68
- * Footer: { copyright: '© 2024' },
69
- * });
70
- *
71
- * renderWithProviders(<MyComponent />, {
72
- * translationManager: translations,
73
- * });
74
- * ```
75
53
  */
76
54
  declare function createMockTranslationManager(translations: Record<string, Record<string, string>>): TranslationManager;
77
- /**
78
- * Create a mock session manager with custom session state
79
- *
80
- * @example
81
- * ```tsx
82
- * const session = createMockSessionManager({
83
- * isAuthenticated: true,
84
- * expiresAt: new Date(Date.now() + 3600000),
85
- * });
86
- *
87
- * renderWithProviders(<MyComponent />, {
88
- * sessionManager: session,
89
- * });
90
- * ```
91
- */
92
- declare function createMockSessionManager(state: Partial<SessionManager>): SessionManager;
93
55
  /**
94
56
  * Create a mock open resources manager with custom resources
95
- *
96
- * @example
97
- * ```tsx
98
- * const resources = createMockOpenResourcesManager([
99
- * { id: 'doc-1', name: 'Document 1', openedAt: Date.now() },
100
- * ]);
101
- *
102
- * renderWithProviders(<MyComponent />, {
103
- * openResourcesManager: resources,
104
- * });
105
- * ```
106
57
  */
107
58
  declare function createMockOpenResourcesManager(resources?: OpenResourcesManager['openResources']): OpenResourcesManager;
108
59
 
109
- export { type RenderWithProvidersOptions, type RenderWithProvidersResult, type TestProvidersOptions, createMockOpenResourcesManager, createMockSessionManager, createMockTranslationManager, defaultMocks, renderWithProviders };
60
+ export { type RenderWithProvidersOptions, type RenderWithProvidersResult, type TestProvidersOptions, createMockKnowledgeBaseSession, createMockOpenResourcesManager, createMockTranslationManager, defaultMockKnowledgeBaseSession, defaultMocks, renderWithProviders };
@@ -1,15 +1,15 @@
1
1
  'use client';
2
2
  import {
3
+ KnowledgeBaseSessionContext,
3
4
  OpenResourcesProvider,
4
- SessionProvider,
5
5
  ToastProvider,
6
6
  TranslationProvider
7
- } from "./chunk-OL5UST25.mjs";
7
+ } from "./chunk-R2U7P4TK.mjs";
8
8
  import {
9
9
  ApiClientProvider,
10
10
  EventBusProvider,
11
11
  useEventBus
12
- } from "./chunk-HNZOXH4L.mjs";
12
+ } from "./chunk-OZICDVH7.mjs";
13
13
  import "./chunk-HVMAGUFA.mjs";
14
14
  import {
15
15
  __commonJS,
@@ -12990,6 +12990,39 @@ import { vi } from "vitest";
12990
12990
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
12991
12991
  import { vi as vi2 } from "vitest";
12992
12992
  import { Fragment, jsx } from "react/jsx-runtime";
12993
+ var defaultMockKnowledgeBaseSession = {
12994
+ knowledgeBases: [],
12995
+ activeKnowledgeBase: null,
12996
+ session: null,
12997
+ isLoading: false,
12998
+ user: null,
12999
+ token: null,
13000
+ isAuthenticated: false,
13001
+ hasValidBackendToken: false,
13002
+ isFullyAuthenticated: false,
13003
+ displayName: "User",
13004
+ avatarUrl: null,
13005
+ userDomain: void 0,
13006
+ isAdmin: false,
13007
+ isModerator: false,
13008
+ expiresAt: null,
13009
+ sessionExpiredAt: null,
13010
+ sessionExpiredMessage: null,
13011
+ permissionDeniedAt: null,
13012
+ permissionDeniedMessage: null,
13013
+ addKnowledgeBase: vi.fn(() => ({ id: "mock", label: "", host: "", port: 0, protocol: "http", email: "" })),
13014
+ removeKnowledgeBase: vi.fn(),
13015
+ setActiveKnowledgeBase: vi.fn(),
13016
+ updateKnowledgeBase: vi.fn(),
13017
+ signIn: vi.fn(),
13018
+ signOut: vi.fn(),
13019
+ refreshActive: vi.fn(async () => null),
13020
+ acknowledgeSessionExpired: vi.fn(),
13021
+ acknowledgePermissionDenied: vi.fn()
13022
+ };
13023
+ function createMockKnowledgeBaseSession(overrides = {}) {
13024
+ return { ...defaultMockKnowledgeBaseSession, ...overrides };
13025
+ }
12993
13026
  var defaultMocks = {
12994
13027
  translationManager: {
12995
13028
  t: (namespace, key, params) => {
@@ -13002,12 +13035,6 @@ var defaultMocks = {
13002
13035
  return result;
13003
13036
  }
13004
13037
  },
13005
- sessionManager: {
13006
- isAuthenticated: false,
13007
- expiresAt: null,
13008
- timeUntilExpiry: null,
13009
- isExpiringSoon: false
13010
- },
13011
13038
  openResourcesManager: {
13012
13039
  openResources: [],
13013
13040
  addResource: vi.fn(),
@@ -13030,7 +13057,7 @@ function renderWithProviders(ui, options) {
13030
13057
  const {
13031
13058
  translationManager = defaultMocks.translationManager,
13032
13059
  apiBaseUrl = "http://localhost:4000",
13033
- sessionManager = defaultMocks.sessionManager,
13060
+ knowledgeBaseSession = defaultMockKnowledgeBaseSession,
13034
13061
  openResourcesManager = defaultMocks.openResourcesManager,
13035
13062
  returnEventBus = false,
13036
13063
  queryClient = new QueryClient({
@@ -13043,7 +13070,7 @@ function renderWithProviders(ui, options) {
13043
13070
  } = options || {};
13044
13071
  let capturedEventBus;
13045
13072
  function Wrapper({ children }) {
13046
- return /* @__PURE__ */ jsx(TranslationProvider, { translationManager, children: /* @__PURE__ */ jsx(EventBusProvider, { children: /* @__PURE__ */ jsx(ApiClientProvider, { baseUrl: apiBaseUrl, children: /* @__PURE__ */ jsx(SessionProvider, { sessionManager, children: /* @__PURE__ */ jsx(OpenResourcesProvider, { openResourcesManager, children: /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(ToastProvider, { children: returnEventBus ? /* @__PURE__ */ jsx(EventBusCapture, { onEventBus: (bus) => {
13073
+ return /* @__PURE__ */ jsx(TranslationProvider, { translationManager, children: /* @__PURE__ */ jsx(EventBusProvider, { children: /* @__PURE__ */ jsx(ApiClientProvider, { baseUrl: apiBaseUrl, children: /* @__PURE__ */ jsx(KnowledgeBaseSessionContext.Provider, { value: knowledgeBaseSession, children: /* @__PURE__ */ jsx(OpenResourcesProvider, { openResourcesManager, children: /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(ToastProvider, { children: returnEventBus ? /* @__PURE__ */ jsx(EventBusCapture, { onEventBus: (bus) => {
13047
13074
  capturedEventBus = bus;
13048
13075
  }, children }) : children }) }) }) }) }) }) });
13049
13076
  }
@@ -13060,15 +13087,6 @@ function createMockTranslationManager(translations) {
13060
13087
  }
13061
13088
  };
13062
13089
  }
13063
- function createMockSessionManager(state) {
13064
- return {
13065
- isAuthenticated: false,
13066
- expiresAt: null,
13067
- timeUntilExpiry: null,
13068
- isExpiringSoon: false,
13069
- ...state
13070
- };
13071
- }
13072
13090
  function createMockOpenResourcesManager(resources = []) {
13073
13091
  return {
13074
13092
  openResources: resources,
@@ -13084,9 +13102,10 @@ export {
13084
13102
  cleanup,
13085
13103
  configure2 as configure,
13086
13104
  createEvent,
13105
+ createMockKnowledgeBaseSession,
13087
13106
  createMockOpenResourcesManager,
13088
- createMockSessionManager,
13089
13107
  createMockTranslationManager,
13108
+ defaultMockKnowledgeBaseSession,
13090
13109
  defaultMocks,
13091
13110
  findAllByAltText,
13092
13111
  findAllByDisplayValue,