@iblai/web-utils 1.6.8 → 1.6.10

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 (87) hide show
  1. package/dist/data-layer/src/features/mentor/privacy.d.ts +61 -0
  2. package/dist/data-layer/src/index.d.ts +1 -0
  3. package/dist/index.d.ts +678 -129
  4. package/dist/index.esm.js +14675 -21731
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/index.js +14757 -21728
  7. package/dist/index.js.map +1 -1
  8. package/dist/package.json +11 -2
  9. package/dist/web-utils/src/features/chat-input/__tests__/api-slice.test.d.ts +1 -0
  10. package/dist/web-utils/src/features/chat-input/api-slice.d.ts +12 -0
  11. package/dist/web-utils/src/features/files/filesSlice.d.ts +3 -0
  12. package/dist/web-utils/src/features/host-chat/__tests__/slice.test.d.ts +1 -0
  13. package/dist/web-utils/src/features/host-chat/slice.d.ts +17 -0
  14. package/dist/web-utils/src/features/index.d.ts +5 -0
  15. package/dist/web-utils/src/features/rbac/__tests__/rbac-slice.test.d.ts +1 -0
  16. package/dist/web-utils/src/features/rbac/rbac-slice.d.ts +13 -0
  17. package/dist/web-utils/src/features/subscription/__tests__/slice.test.d.ts +1 -0
  18. package/dist/web-utils/src/features/subscription/constants.d.ts +12 -0
  19. package/dist/web-utils/src/features/subscription/slice.d.ts +29 -0
  20. package/dist/web-utils/src/features/top-banner/__tests__/slice.test.d.ts +1 -0
  21. package/dist/web-utils/src/features/top-banner/slice.d.ts +24 -0
  22. package/dist/web-utils/src/hooks/__tests__/use-accessing-public-route.test.d.ts +1 -0
  23. package/dist/web-utils/src/hooks/__tests__/use-cached-session-id.test.d.ts +1 -0
  24. package/dist/web-utils/src/hooks/__tests__/use-chat-file-upload.test.d.ts +1 -0
  25. package/dist/web-utils/src/hooks/__tests__/use-embed-mode.test.d.ts +1 -0
  26. package/dist/web-utils/src/hooks/__tests__/use-event-callback.test.d.ts +1 -0
  27. package/dist/web-utils/src/hooks/__tests__/use-event-listener.test.d.ts +1 -0
  28. package/dist/web-utils/src/hooks/__tests__/use-file-drag-drop.test.d.ts +1 -0
  29. package/dist/web-utils/src/hooks/__tests__/use-local-storage.test.d.ts +1 -0
  30. package/dist/web-utils/src/hooks/__tests__/use-model-file-upload-capabilities.test.d.ts +1 -0
  31. package/dist/web-utils/src/hooks/__tests__/use-os.test.d.ts +1 -0
  32. package/dist/web-utils/src/hooks/__tests__/use-responsive.test.d.ts +1 -0
  33. package/dist/web-utils/src/hooks/__tests__/use-show-attachment.test.d.ts +1 -0
  34. package/dist/web-utils/src/hooks/__tests__/use-show-free-trial-dialog.test.d.ts +1 -0
  35. package/dist/web-utils/src/hooks/__tests__/use-show-voice-call.test.d.ts +1 -0
  36. package/dist/web-utils/src/hooks/__tests__/use-show-voice-recorder.test.d.ts +1 -0
  37. package/dist/web-utils/src/hooks/__tests__/use-timer.test.d.ts +1 -0
  38. package/dist/web-utils/src/hooks/__tests__/use-tokens.test.d.ts +1 -0
  39. package/dist/web-utils/src/hooks/__tests__/use-user-agreement.test.d.ts +1 -0
  40. package/dist/web-utils/src/hooks/__tests__/use-user.test.d.ts +1 -0
  41. package/dist/web-utils/src/hooks/__tests__/use-voice-chat.test.d.ts +1 -0
  42. package/dist/web-utils/src/hooks/__tests__/use-welcome-message.test.d.ts +1 -0
  43. package/dist/web-utils/src/hooks/chat/use-advanced-chat.d.ts +3 -2
  44. package/dist/web-utils/src/hooks/chat/use-chat-v2.d.ts +1 -1
  45. package/dist/web-utils/src/hooks/index.d.ts +23 -0
  46. package/dist/web-utils/src/hooks/subscription-v2/__tests__/use-402-error-check.test.d.ts +1 -0
  47. package/dist/web-utils/src/hooks/subscription-v2/use-402-error-check.d.ts +22 -0
  48. package/dist/web-utils/src/hooks/use-accessing-public-route.d.ts +1 -0
  49. package/dist/web-utils/src/hooks/use-cached-session-id.d.ts +8 -0
  50. package/dist/web-utils/src/hooks/use-chat-file-upload.d.ts +17 -0
  51. package/dist/web-utils/src/hooks/use-embed-mode.d.ts +1 -0
  52. package/dist/web-utils/src/hooks/use-event-callback.d.ts +2 -0
  53. package/dist/web-utils/src/hooks/use-event-listener.d.ts +6 -0
  54. package/dist/web-utils/src/hooks/use-file-drag-drop.d.ts +15 -0
  55. package/dist/web-utils/src/hooks/use-isomorphic-layout-effect.d.ts +2 -0
  56. package/dist/web-utils/src/hooks/use-local-storage.d.ts +13 -0
  57. package/dist/web-utils/src/hooks/use-mentor-settings.d.ts +39 -19
  58. package/dist/web-utils/src/hooks/use-model-file-upload-capabilities.d.ts +21 -0
  59. package/dist/web-utils/src/hooks/use-os.d.ts +8 -0
  60. package/dist/web-utils/src/hooks/use-responsive.d.ts +13 -0
  61. package/dist/web-utils/src/hooks/use-show-attachment.d.ts +7 -0
  62. package/dist/web-utils/src/hooks/use-show-free-trial-dialog.d.ts +31 -0
  63. package/dist/web-utils/src/hooks/use-show-voice-call.d.ts +7 -0
  64. package/dist/web-utils/src/hooks/use-show-voice-recorder.d.ts +7 -0
  65. package/dist/web-utils/src/hooks/use-timer.d.ts +7 -0
  66. package/dist/web-utils/src/hooks/use-tokens.d.ts +2 -0
  67. package/dist/web-utils/src/hooks/use-user-agreement.d.ts +21 -0
  68. package/dist/web-utils/src/hooks/use-user.d.ts +23 -0
  69. package/dist/web-utils/src/hooks/use-voice-chat.d.ts +11 -0
  70. package/dist/web-utils/src/hooks/use-welcome-message.d.ts +16 -0
  71. package/dist/web-utils/src/providers/__tests__/auth-provider.test.d.ts +1 -0
  72. package/dist/web-utils/src/providers/__tests__/service-worker-provider.test.d.ts +1 -0
  73. package/dist/web-utils/src/providers/auth-provider.d.ts +1 -1
  74. package/dist/web-utils/src/providers/index.d.ts +1 -0
  75. package/dist/web-utils/src/providers/service-worker-provider.d.ts +21 -0
  76. package/dist/web-utils/src/services/__tests__/event-bus.test.d.ts +1 -0
  77. package/dist/web-utils/src/services/__tests__/register-sw.test.d.ts +1 -0
  78. package/dist/web-utils/src/services/event-bus.d.ts +6 -0
  79. package/dist/web-utils/src/services/index.d.ts +2 -0
  80. package/dist/web-utils/src/services/register-sw.d.ts +71 -0
  81. package/dist/web-utils/src/utils/__tests__/tauri-api-cache.test.d.ts +1 -0
  82. package/dist/web-utils/src/utils/constants.d.ts +18 -0
  83. package/dist/web-utils/src/utils/helpers.d.ts +20 -0
  84. package/dist/web-utils/src/utils/index.d.ts +1 -0
  85. package/dist/web-utils/src/utils/platform.d.ts +1 -0
  86. package/dist/web-utils/src/utils/tauri-api-cache.d.ts +19 -0
  87. package/package.json +11 -2
@@ -0,0 +1,7 @@
1
+ interface UseShowVoiceRecorderProps {
2
+ mentorId: string;
3
+ tenantKey: string;
4
+ isPublicRoute?: boolean;
5
+ }
6
+ export declare function useShowVoiceRecorder({ mentorId, tenantKey, isPublicRoute, }: UseShowVoiceRecorderProps): boolean;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ export declare function useTimer(): {
2
+ startTime: Date | null;
3
+ time: number;
4
+ isRunning: boolean;
5
+ start: () => void;
6
+ stop: () => void;
7
+ };
@@ -0,0 +1,2 @@
1
+ export declare function useDmToken(): string;
2
+ export declare function useAxdToken(): string;
@@ -0,0 +1,21 @@
1
+ interface UseUserAgreementProps {
2
+ mentorId: string;
3
+ tenantKey: string;
4
+ }
5
+ export declare function useUserAgreement({ mentorId, tenantKey, }: UseUserAgreementProps): {
6
+ showDisclaimerModal: boolean;
7
+ setShowDisclaimerModal: import("react").Dispatch<import("react").SetStateAction<boolean>>;
8
+ isAgreeing: boolean;
9
+ pendingSubmitContent: string;
10
+ userAgreement: import("@iblai/data-layer").Disclaimer | {
11
+ readonly content: "By accessing and using the [ibl.ai](http://ibl.ai/) MentorAI platform (“Platform”), you agree to the following terms. The Platform provides AI-powered mentorship and educational support. You understand that AI responses may contain inaccuracies, and you are responsible for independently verifying any information before relying on it for academic, professional, or personal decisions. Do not input confidential, sensitive, or personally identifiable information of yourself or others.\nAll content, code, and data processed through the Platform remain the property of their respective owners. [ibl.ai](http://ibl.ai/) retains all rights to the Platform’s underlying technology and intellectual property. You are granted a limited, non-exclusive, revocable license to use the Platform for personal or institutional learning purposes only.\nYour use must comply with applicable laws and institutional policies. Misuse—including attempting to bypass security, copy source code, or use the service for unlawful activity—may result in suspension or termination of access. Continued use constitutes acceptance of these terms.";
12
+ readonly active: false;
13
+ };
14
+ hasUserAgreement: boolean;
15
+ hasUserAgreedToDisclaimer: boolean;
16
+ isDisclaimersLoading: boolean;
17
+ handleDisclaimerAgree: () => Promise<void>;
18
+ checkAgreementAndExecute: (content: string, executeCallback: (content: string) => void) => void;
19
+ executePendingSubmit: (executeCallback: (content: string) => void) => void;
20
+ };
21
+ export {};
@@ -0,0 +1,23 @@
1
+ import { type Tenant } from "../types";
2
+ export declare function useUserData(): {
3
+ user_display_name: string;
4
+ user_email: string;
5
+ user_fullname: string;
6
+ user_id: number;
7
+ user_nicename: string;
8
+ } | null;
9
+ export declare function useUsername(): string | null;
10
+ export declare function useVisitingTenant(): {
11
+ visitingTenant: Tenant | undefined;
12
+ saveVisitingTenant: import("react").Dispatch<import("react").SetStateAction<Tenant | undefined>>;
13
+ removeVisitingTenant: () => void;
14
+ };
15
+ export declare function useUserTenants(): {
16
+ userTenants: Tenant[];
17
+ saveUserTenants: import("react").Dispatch<import("react").SetStateAction<Tenant[]>>;
18
+ };
19
+ export declare function useCurrentTenant(): {
20
+ currentTenant: Tenant | null;
21
+ saveCurrentTenant: import("react").Dispatch<import("react").SetStateAction<Tenant | null>>;
22
+ };
23
+ export declare function useIsAdmin(): boolean;
@@ -0,0 +1,11 @@
1
+ interface Props {
2
+ sendMessage: (message: string) => void;
3
+ tenantKey: string;
4
+ }
5
+ export declare function useVoiceChat({ sendMessage, tenantKey }: Props): {
6
+ handleMicrophoneBtnClick: () => Promise<void>;
7
+ recording: boolean;
8
+ processing: boolean;
9
+ time: number;
10
+ };
11
+ export {};
@@ -0,0 +1,16 @@
1
+ type Props = {
2
+ sessionId: string;
3
+ username: string;
4
+ tenantKey: string;
5
+ mentorId: string;
6
+ mentorUniqueId: string;
7
+ token: string;
8
+ wsUrl: string;
9
+ isPublicRoute?: boolean;
10
+ isNewSession?: boolean;
11
+ };
12
+ export default function useWelcome({ sessionId, username, tenantKey, mentorId, mentorUniqueId, token, wsUrl, isPublicRoute, isNewSession, }: Props): {
13
+ welcomeMessage: string;
14
+ handleSendProactivePrompt: () => void;
15
+ };
16
+ export {};
@@ -68,7 +68,7 @@ export declare function clearCurrentTenantCookie(): void;
68
68
  * On React Native, this is a no-op
69
69
  */
70
70
  export declare function clearAuthCookies(): void;
71
- export declare function getUserName(storageService: StorageService): Promise<any>;
71
+ export declare function getStoredUserName(storageService: StorageService): Promise<any>;
72
72
  export declare function useAuthProvider({ middleware, onAuthSuccess, onAuthFailure, redirectToAuthSpa, hasNonExpiredAuthToken, username, pathname, storageService, skipAuthCheck, token, enableStorageSync, }: Props): {
73
73
  isAuthenticating: boolean;
74
74
  userIsAccessingPublicRoute: boolean;
@@ -1,3 +1,4 @@
1
1
  export * from "./auth-provider";
2
2
  export * from "./mentor-provider";
3
3
  export * from "./tenant-provider";
4
+ export * from "./service-worker-provider";
@@ -0,0 +1,21 @@
1
+ import { type ServiceWorkerStatus } from '../services/register-sw';
2
+ interface ServiceWorkerContextValue {
3
+ status: ServiceWorkerStatus;
4
+ applyUpdate: () => void;
5
+ clearCache: () => void;
6
+ refreshCacheStatus: () => Promise<Record<string, number> | null>;
7
+ checkNetworkNow: () => Promise<boolean>;
8
+ }
9
+ export declare function useServiceWorker(): ServiceWorkerContextValue;
10
+ interface ServiceWorkerProviderProps {
11
+ children: React.ReactNode;
12
+ /**
13
+ * Base path used when registering the service worker. The SW is fetched
14
+ * from `${basePath}/sw.js` and scoped to `basePath || '/'`. Pass the
15
+ * host app's bundler-resolved base path (e.g. Next.js's
16
+ * `process.env.NEXT_PUBLIC_BASE_PATH`). Defaults to '' (root).
17
+ */
18
+ basePath?: string;
19
+ }
20
+ export declare function ServiceWorkerProvider({ children, basePath, }: ServiceWorkerProviderProps): import("react/jsx-runtime").JSX.Element;
21
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare const eventBus: import("mitt").Emitter<Record<import("mitt").EventType, unknown>>;
2
+ export declare enum RemoteEvents {
3
+ newChat = "MENTOR:NEW_CHAT",
4
+ stopChatGenerating = "MENTOR:STOP_CHAT_GENERATING",
5
+ sendChatMessage = "MENTOR:SEND_CHAT_MESSAGE"
6
+ }
@@ -1 +1,3 @@
1
1
  export * from "./file-upload";
2
+ export * from "./register-sw";
3
+ export * from "./event-bus";
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Service Worker Registration Helper
3
+ *
4
+ * Handles registration, updates, and communication with the service worker.
5
+ */
6
+ export interface ServiceWorkerStatus {
7
+ isSupported: boolean;
8
+ isRegistered: boolean;
9
+ isOnline: boolean;
10
+ registration: ServiceWorkerRegistration | null;
11
+ updateAvailable: boolean;
12
+ }
13
+ type UpdateCallback = (registration: ServiceWorkerRegistration) => void;
14
+ type StatusChangeCallback = (status: ServiceWorkerStatus) => void;
15
+ /**
16
+ * Check if service workers are supported
17
+ */
18
+ export declare function isServiceWorkerSupported(): boolean;
19
+ /**
20
+ * Get current service worker status
21
+ */
22
+ export declare function getServiceWorkerStatus(): ServiceWorkerStatus;
23
+ /**
24
+ * Register the service worker.
25
+ * Defers registration until the page is fully loaded to avoid
26
+ * interfering with chunk loading — especially in WebKit/Safari where
27
+ * early SW registration can cause ChunkLoadError timeouts.
28
+ */
29
+ export declare function registerServiceWorker(basePath?: string): Promise<ServiceWorkerRegistration | null>;
30
+ /**
31
+ * Unregister the service worker
32
+ */
33
+ export declare function unregisterServiceWorker(): Promise<boolean>;
34
+ /**
35
+ * Skip waiting and activate new service worker immediately
36
+ */
37
+ export declare function skipWaiting(): void;
38
+ /**
39
+ * Clear all caches
40
+ */
41
+ export declare function clearAllCaches(): void;
42
+ /**
43
+ * Tell service worker we're running in Tauri
44
+ */
45
+ export declare function setTauriMode(isTauri: boolean): void;
46
+ /**
47
+ * Tell service worker about offline status (from Tauri)
48
+ */
49
+ export declare function setOfflineStatus(isOffline: boolean): void;
50
+ /**
51
+ * Request cache status from service worker
52
+ */
53
+ export declare function getCacheStatus(): Promise<Record<string, number> | null>;
54
+ /**
55
+ * Subscribe to service worker updates
56
+ */
57
+ export declare function onUpdate(callback: UpdateCallback): () => void;
58
+ /**
59
+ * Subscribe to status changes (online/offline, registration, updates)
60
+ */
61
+ export declare function onStatusChange(callback: StatusChangeCallback): () => void;
62
+ /**
63
+ * Setup online/offline listeners
64
+ */
65
+ export declare function setupNetworkListeners(): () => void;
66
+ /**
67
+ * Initialize service worker and network listeners
68
+ * Call this once when app loads
69
+ */
70
+ export declare function initServiceWorker(basePath?: string): Promise<ServiceWorkerStatus>;
71
+ export {};
@@ -1,5 +1,6 @@
1
1
  export declare const MENTOR_CHAT_DOCUMENTS_EXTENSIONS: string[];
2
2
  export declare const ANONYMOUS_USERNAME = "anonymous";
3
+ export declare const DEFAULT_DISCLAIMER_CONTENT = "By accessing and using the [ibl.ai](http://ibl.ai/) MentorAI platform (\u201CPlatform\u201D), you agree to the following terms. The Platform provides AI-powered mentorship and educational support. You understand that AI responses may contain inaccuracies, and you are responsible for independently verifying any information before relying on it for academic, professional, or personal decisions. Do not input confidential, sensitive, or personally identifiable information of yourself or others.\nAll content, code, and data processed through the Platform remain the property of their respective owners. [ibl.ai](http://ibl.ai/) retains all rights to the Platform\u2019s underlying technology and intellectual property. You are granted a limited, non-exclusive, revocable license to use the Platform for personal or institutional learning purposes only.\nYour use must comply with applicable laws and institutional policies. Misuse\u2014including attempting to bypass security, copy source code, or use the service for unlawful activity\u2014may result in suspension or termination of access. Continued use constitutes acceptance of these terms.";
3
4
  export declare const MAX_INITIAL_WEBSOCKET_CONNECTION_ATTEMPTS = 3;
4
5
  export declare const LOCAL_STORAGE_KEYS: {
5
6
  CURRENT_TENANT: string;
@@ -9,6 +10,8 @@ export declare const LOCAL_STORAGE_KEYS: {
9
10
  TOKEN_EXPIRY: string;
10
11
  USER_DATA: string;
11
12
  USER_TENANTS: string;
13
+ VISITING_TENANT: string;
14
+ SESSION_ID: string;
12
15
  EDX_TOKEN_KEY: string;
13
16
  DM_TOKEN_KEY: string;
14
17
  DM_TOKEN_EXPIRES: string;
@@ -43,3 +46,18 @@ export declare const TOOLS: {
43
46
  export declare const REQUIRED_ACTIONS_FOR_GROUPS: {
44
47
  readonly NOTIFICATIONS: "Ibl.Notifications/Notification/action";
45
48
  };
49
+ export declare const MENTOR_VISIBILITY_VALUES: {
50
+ ADMINISTRATORS: "viewable_by_tenant_admins";
51
+ STUDENTS: "viewable_by_tenant_students";
52
+ ANYONE: "viewable_by_anyone";
53
+ };
54
+ export declare const MENTOR_VISIBILITY: ({
55
+ label: string;
56
+ value: "viewable_by_tenant_admins";
57
+ } | {
58
+ label: string;
59
+ value: "viewable_by_tenant_students";
60
+ } | {
61
+ label: string;
62
+ value: "viewable_by_anyone";
63
+ })[];
@@ -1,3 +1,23 @@
1
+ import type { Tenant } from "../types";
2
+ /**
3
+ * Reads the cached user_nicename from the LOCAL_STORAGE_KEYS.USER_DATA blob.
4
+ */
5
+ export declare const getUserName: () => string | null;
6
+ /**
7
+ * Reads the cached user_email from the LOCAL_STORAGE_KEYS.USER_DATA blob.
8
+ */
9
+ export declare const getUserEmail: () => string | null;
10
+ /**
11
+ * Whether Stripe-backed billing is active for the given tenant. The Stripe
12
+ * feature flag is a host-side config value; pass it in. Tenants opt in via
13
+ * `show_paywall` or by being the "main" platform tenant.
14
+ */
15
+ export declare function isStripeActivated(currentTenant: Tenant | null | undefined, stripeEnabled: boolean): boolean;
16
+ /**
17
+ * Checks whether a file matches any of the accepted type specifiers.
18
+ * Supports MIME types (image/png), wildcard MIME (image/*), and extensions (.pdf).
19
+ */
20
+ export declare function isFileAccepted(file: File, acceptedTypes: string[]): boolean;
1
21
  export declare const isJSON: (text: string) => boolean;
2
22
  export declare const getInitials: (fullName: string) => string;
3
23
  export declare const ALPHANUMERIC_32_REGEX: RegExp;
@@ -3,3 +3,4 @@ export * from "./constants";
3
3
  export * from "./helpers";
4
4
  export * from "./auth";
5
5
  export * from "./platform";
6
+ export * from "./tauri-api-cache";
@@ -3,6 +3,7 @@ export declare const isWeb: () => boolean;
3
3
  export declare const isNode: () => string | false;
4
4
  export declare const isExpo: () => any;
5
5
  export declare const isTauri: () => boolean;
6
+ export declare function isSafariBrowser(): boolean;
6
7
  export declare const getPlatform: () => "react-native" | "web" | "node" | "unknown";
7
8
  export declare const safeRequire: (moduleName: string) => any;
8
9
  export declare const getNextNavigation: () => any;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tauri API Cache
3
+ *
4
+ * localStorage-backed caching for API responses when running inside Tauri.
5
+ * In offline mode, cached responses are returned instead of making network requests.
6
+ */
7
+ export declare function isTauriOfflineMode(): boolean;
8
+ export declare function getCachedApiResponse<T>(endpoint: string, params?: Record<string, unknown>): T | null;
9
+ export declare function setCachedApiResponse<T>(endpoint: string, data: T, params?: Record<string, unknown>, ttlMs?: number): void;
10
+ export declare function clearApiCache(): void;
11
+ export declare function fetchWithCache<T>(endpoint: string, fetchFn: () => Promise<T>, params?: Record<string, unknown>, ttlMs?: number): Promise<T>;
12
+ export declare const CacheKeys: {
13
+ readonly mentorSettings: (org: string, mentor: string, userId: string) => string;
14
+ readonly mentorPublicSettings: (org: string, mentor: string) => string;
15
+ readonly tenantMetadata: (org: string) => string;
16
+ readonly userTenants: (userId: string) => string;
17
+ readonly sessionChats: (sessionId: string) => string;
18
+ };
19
+ export declare function preCacheMentorData(org: string, mentorId: string, userId: string, fetchMentorSettings: () => Promise<unknown>, fetchTenantMetadata: () => Promise<unknown>): Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iblai/web-utils",
3
- "version": "1.6.8",
3
+ "version": "1.6.10",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.esm.js",
6
6
  "types": "./dist/index.d.ts",
@@ -57,6 +57,7 @@
57
57
  "axios": "1.13.6",
58
58
  "dayjs": "1.11.20",
59
59
  "jwt-decode": "4.0.0",
60
+ "mitt": "3.0.1",
60
61
  "react-redux": "9.2.0",
61
62
  "rollup": "4.59.0",
62
63
  "rollup-plugin-copy": "3.5.0",
@@ -65,12 +66,20 @@
65
66
  "peerDependencies": {
66
67
  "@iblai/data-layer": "^1.1.2",
67
68
  "@iblai/iblai-api": "4.166.0-ai",
69
+ "@tauri-apps/plugin-os": "2.3.2",
68
70
  "react": "19.1.0",
69
- "react-dom": "19.1.0"
71
+ "react-dom": "19.1.0",
72
+ "sonner": "^2.0.0"
70
73
  },
71
74
  "peerDependenciesMeta": {
72
75
  "@tauri-apps/api": {
73
76
  "optional": true
77
+ },
78
+ "@tauri-apps/plugin-os": {
79
+ "optional": true
80
+ },
81
+ "sonner": {
82
+ "optional": true
74
83
  }
75
84
  },
76
85
  "publishConfig": {