indas-ui 0.1.4 → 0.1.6
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/auth.d.ts +1 -0
- package/dist/auth.js +7 -0
- package/dist/cjs/auth.js +12 -0
- package/dist/cjs/components/chat/chat.js +2 -2
- package/dist/cjs/components/dashboard/FilterBar.js +31 -8
- package/dist/cjs/components/dashboard/time-range.js +71 -27
- package/dist/cjs/components/layout/sidebar.js +17 -2
- package/dist/cjs/components/messaging/messaging-panel-content.js +2 -2
- package/dist/cjs/components/ui/navigation/tabs.js +4 -1
- package/dist/cjs/contexts/EmailContext.js +3 -2
- package/dist/cjs/contexts/MessagingContext.js +2 -2
- package/dist/cjs/contexts/NavigationContext.js +17 -2
- package/dist/cjs/contexts/NotificationContext.js +2 -2
- package/dist/cjs/contexts/SessionAdapterContext.js +8 -0
- package/dist/cjs/hooks/useApproval.js +2 -2
- package/dist/cjs/hooks/useBusinessAudit.js +2 -2
- package/dist/cjs/hooks/useDraft.js +2 -2
- package/dist/cjs/lib/api/utility/menu.js +8 -7
- package/dist/cjs/providers.js +3 -3
- package/dist/components/auth/index.js +0 -1
- package/dist/components/chat/chat.js +2 -2
- package/dist/components/chat/index.js +0 -1
- package/dist/components/dashboard/FilterBar.d.ts +5 -1
- package/dist/components/dashboard/FilterBar.js +31 -8
- package/dist/components/dashboard/charts/index.js +0 -1
- package/dist/components/dashboard/index.js +0 -1
- package/dist/components/dashboard/kpi/index.js +0 -1
- package/dist/components/dashboard/time-range.d.ts +12 -1
- package/dist/components/dashboard/time-range.js +71 -27
- package/dist/components/datagrid/cells/index.js +0 -1
- package/dist/components/datagrid/controls/menu/grouping/index.js +0 -1
- package/dist/components/datagrid/controls/menu/index.js +0 -1
- package/dist/components/datagrid/index.js +0 -1
- package/dist/components/forms/date-picker/index.js +0 -1
- package/dist/components/forms/dropdown/index.js +0 -1
- package/dist/components/forms/file-attachment/index.js +0 -1
- package/dist/components/forms/index.js +0 -1
- package/dist/components/forms/remark-input/index.js +0 -1
- package/dist/components/index.js +0 -1
- package/dist/components/layout/index.js +0 -1
- package/dist/components/layout/sidebar.js +17 -2
- package/dist/components/master/editable-cells/index.js +0 -1
- package/dist/components/master/index.js +0 -1
- package/dist/components/messaging/messaging-panel-content.js +2 -2
- package/dist/components/modals/index.js +0 -1
- package/dist/components/ui/feedback/badge.d.ts +1 -1
- package/dist/components/ui/index.js +0 -1
- package/dist/components/ui/navigation/tabs.js +4 -1
- package/dist/contexts/EmailContext.js +3 -2
- package/dist/contexts/MessagingContext.js +2 -2
- package/dist/contexts/NavigationContext.js +17 -2
- package/dist/contexts/NotificationContext.js +2 -2
- package/dist/contexts/SessionAdapterContext.d.ts +5 -0
- package/dist/contexts/SessionAdapterContext.js +7 -0
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/useApproval.js +2 -2
- package/dist/hooks/useBusinessAudit.js +2 -2
- package/dist/hooks/useDraft.js +2 -2
- package/dist/index.js +0 -1
- package/dist/lib/api/activity/audit/index.js +0 -1
- package/dist/lib/api/activity/email/index.js +0 -1
- package/dist/lib/api/activity/index.js +0 -1
- package/dist/lib/api/activity/notifications/index.js +0 -1
- package/dist/lib/api/activity/remarks/index.js +0 -1
- package/dist/lib/api/approval/index.js +0 -1
- package/dist/lib/api/auth/index.js +0 -1
- package/dist/lib/api/core/index.js +0 -1
- package/dist/lib/api/draft/index.js +0 -1
- package/dist/lib/api/enquiry/index.js +0 -1
- package/dist/lib/api/estimation/index.js +0 -1
- package/dist/lib/api/index.js +0 -1
- package/dist/lib/api/master/index.js +0 -1
- package/dist/lib/api/utility/index.js +0 -1
- package/dist/lib/api/utility/menu.d.ts +7 -3
- package/dist/lib/api/utility/menu.js +8 -7
- package/dist/providers.d.ts +0 -1
- package/dist/providers.js +2 -2
- package/package.json +14 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useContext, useReducer, useEffect, useCallback, useMemo } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { useOptionalSessionAdapter } from './SessionAdapterContext.js';
|
|
5
5
|
import { createEmailAPI, DEFAULT_FOLDERS, DEFAULT_CATEGORIES } from '../lib/api/activity/email/index.js';
|
|
6
6
|
const FOLDER_CACHE_MAX_AGE = 5 * 60 * 1000; // 5 minutes
|
|
7
7
|
// Initial State
|
|
@@ -145,11 +145,12 @@ function emailReducer(state, action) {
|
|
|
145
145
|
const EmailContext = createContext(undefined);
|
|
146
146
|
// Email Provider Component
|
|
147
147
|
export function EmailProvider({ children }) {
|
|
148
|
-
const
|
|
148
|
+
const session = useOptionalSessionAdapter()?.data ?? null;
|
|
149
149
|
const [state, dispatch] = useReducer(emailReducer, initialState);
|
|
150
150
|
// Memoize on stable identity — useSession() returns a new object each render, so an
|
|
151
151
|
// unmemoized api would churn every useCallback([api]) and trigger repeated fetches.
|
|
152
152
|
const sessionIdentity = `${session?.user?.CompanyID ?? ''}:${session?.user?.UserID ?? ''}`;
|
|
153
|
+
// The adapter carries the next-auth session as AuthSessionProvider received it, so it has the shape the email API reads.
|
|
153
154
|
const api = useMemo(() => createEmailAPI(session), [sessionIdentity]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
154
155
|
// Initialize email system when session is available
|
|
155
156
|
// NOTE: Initialization is now manual - call actions.fetchEmails() when needed
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useContext, useReducer, useCallback, useEffect, useRef, useMemo } from 'react';
|
|
4
4
|
import { HubConnectionBuilder, HubConnectionState, LogLevel } from '@microsoft/signalr';
|
|
5
|
-
import {
|
|
5
|
+
import { useOptionalSessionAdapter } from './SessionAdapterContext.js';
|
|
6
6
|
import { MessagingAPI } from '../lib/api/activity/messaging/messaging.js';
|
|
7
7
|
import { parseReactions } from '../lib/api/activity/messaging/messaging.js';
|
|
8
8
|
import { getBasicAuthHeader } from '../lib/api/core/config.js';
|
|
@@ -192,7 +192,7 @@ function messagingReducer(state, action) {
|
|
|
192
192
|
const MessagingContext = createContext(undefined);
|
|
193
193
|
// ─── Provider ───────────────────────────────────────────────────────────────
|
|
194
194
|
export function MessagingProvider({ children }) {
|
|
195
|
-
const
|
|
195
|
+
const session = useOptionalSessionAdapter()?.data ?? null;
|
|
196
196
|
const [state, dispatch] = useReducer(messagingReducer, initialState);
|
|
197
197
|
const stateRef = useRef(state);
|
|
198
198
|
stateRef.current = state;
|
|
@@ -3,6 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { getDynamicNavigation } from '../lib/api/index.js';
|
|
5
5
|
import { getModuleRoutePath } from '../lib/utils.js';
|
|
6
|
+
import { useOptionalSessionAdapter } from './SessionAdapterContext.js';
|
|
6
7
|
/**
|
|
7
8
|
* Filter grouped modules to only those with MobileSupported = 1/true.
|
|
8
9
|
* Returns grouped structure with empty groups removed.
|
|
@@ -20,11 +21,25 @@ export function NavigationProvider({ children, companyId, userId }) {
|
|
|
20
21
|
const [groupedModules, setGroupedModules] = React.useState([]);
|
|
21
22
|
const [loading, setLoading] = React.useState(true);
|
|
22
23
|
const [error, setError] = React.useState(null);
|
|
24
|
+
// The menu API needs the signed-in session (company credentials). Read from the session adapter,
|
|
25
|
+
// not next-auth, so the library does not require next-auth; held in a ref so a fresh session
|
|
26
|
+
// object does not refetch the menu, only the session arriving or leaving does.
|
|
27
|
+
const sessionAdapter = useOptionalSessionAdapter();
|
|
28
|
+
const sessionRef = React.useRef(sessionAdapter?.data ?? null);
|
|
29
|
+
sessionRef.current = sessionAdapter?.data ?? null;
|
|
30
|
+
const hasSession = Boolean(sessionAdapter?.data);
|
|
31
|
+
const sessionStatus = sessionAdapter?.status ?? 'unauthenticated';
|
|
23
32
|
const fetchNavigation = React.useCallback(async () => {
|
|
24
33
|
if (!companyId || !userId) {
|
|
25
34
|
setLoading(false);
|
|
26
35
|
return;
|
|
27
36
|
}
|
|
37
|
+
// No session yet: wait for it (this runs again when it arrives); none at all: no menu.
|
|
38
|
+
if (!hasSession) {
|
|
39
|
+
if (sessionStatus !== 'loading')
|
|
40
|
+
setLoading(false);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
28
43
|
const cacheKey = `navigation_${companyId}_${userId}`;
|
|
29
44
|
const cacheTimeKey = `${cacheKey}_time`;
|
|
30
45
|
const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes
|
|
@@ -41,7 +56,7 @@ export function NavigationProvider({ children, companyId, userId }) {
|
|
|
41
56
|
}
|
|
42
57
|
}
|
|
43
58
|
setLoading(true);
|
|
44
|
-
const navigation = await getDynamicNavigation(companyId, userId);
|
|
59
|
+
const navigation = await getDynamicNavigation(companyId, userId, sessionRef.current);
|
|
45
60
|
setGroupedModules(navigation);
|
|
46
61
|
localStorage.setItem(cacheKey, JSON.stringify(navigation));
|
|
47
62
|
localStorage.setItem(cacheTimeKey, Date.now().toString());
|
|
@@ -53,7 +68,7 @@ export function NavigationProvider({ children, companyId, userId }) {
|
|
|
53
68
|
finally {
|
|
54
69
|
setLoading(false);
|
|
55
70
|
}
|
|
56
|
-
}, [companyId, userId]);
|
|
71
|
+
}, [companyId, userId, hasSession, sessionStatus]);
|
|
57
72
|
React.useEffect(() => {
|
|
58
73
|
fetchNavigation();
|
|
59
74
|
}, [fetchNavigation]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useContext, useState, useEffect, useCallback, useMemo, useRef } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { useOptionalSessionAdapter } from './SessionAdapterContext.js';
|
|
5
5
|
import { NotificationsAPI } from '../lib/api/activity/index.js';
|
|
6
6
|
import { fromBackendNotification } from '../lib/api/activity/notifications/types.js';
|
|
7
7
|
import { useSignalR } from '../hooks/useSignalR.js';
|
|
@@ -11,7 +11,7 @@ const NotificationContext = createContext(undefined);
|
|
|
11
11
|
* app. Consumers read shared state via `useNotifications()` instead of each mounting their own.
|
|
12
12
|
*/
|
|
13
13
|
export function NotificationProvider({ children }) {
|
|
14
|
-
const
|
|
14
|
+
const session = useOptionalSessionAdapter()?.data ?? null;
|
|
15
15
|
const [notifications, setNotifications] = useState([]);
|
|
16
16
|
const [notificationsLoading, setNotificationsLoading] = useState(false);
|
|
17
17
|
const [showNotificationDropdown, setShowNotificationDropdown] = useState(false);
|
|
@@ -35,5 +35,10 @@ export interface SessionAdapterProviderProps {
|
|
|
35
35
|
children: ReactNode;
|
|
36
36
|
}
|
|
37
37
|
export declare function SessionAdapterProvider({ user, status, signOut, children }: SessionAdapterProviderProps): import("react").JSX.Element;
|
|
38
|
+
/**
|
|
39
|
+
* The session when a provider is present, null when not: for components that also render in apps
|
|
40
|
+
* without one, such as the dynamic sidebar, which simply loads no menu then.
|
|
41
|
+
*/
|
|
42
|
+
export declare function useOptionalSessionAdapter(): SessionAdapterValue | null;
|
|
38
43
|
/** Drop-in replacement for next-auth's `useSession()` inside library components. */
|
|
39
44
|
export declare function useSessionAdapter(): SessionAdapterValue;
|
|
@@ -10,6 +10,13 @@ export function SessionAdapterProvider({ user, status, signOut, children }) {
|
|
|
10
10
|
}), [user, status, signOut]);
|
|
11
11
|
return _jsx(SessionAdapterContext.Provider, { value: value, children: children });
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* The session when a provider is present, null when not: for components that also render in apps
|
|
15
|
+
* without one, such as the dynamic sidebar, which simply loads no menu then.
|
|
16
|
+
*/
|
|
17
|
+
export function useOptionalSessionAdapter() {
|
|
18
|
+
return useContext(SessionAdapterContext);
|
|
19
|
+
}
|
|
13
20
|
/** Drop-in replacement for next-auth's `useSession()` inside library components. */
|
|
14
21
|
export function useSessionAdapter() {
|
|
15
22
|
const ctx = useContext(SessionAdapterContext);
|
package/dist/hooks/index.js
CHANGED
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
import { useState, useEffect, useCallback } from 'react';
|
|
23
|
-
import {
|
|
23
|
+
import { useOptionalSessionAdapter } from '../contexts/SessionAdapterContext.js';
|
|
24
24
|
import { ApprovalAPI } from '../lib/api/approval/index.js';
|
|
25
25
|
/**
|
|
26
26
|
* useApproval Hook
|
|
27
27
|
*/
|
|
28
28
|
export function useApproval() {
|
|
29
|
-
const
|
|
29
|
+
const session = useOptionalSessionAdapter()?.data ?? null;
|
|
30
30
|
// State
|
|
31
31
|
const [pendingApprovals, setPendingApprovals] = useState([]);
|
|
32
32
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
16
|
import { useState, useCallback } from 'react';
|
|
17
|
-
import {
|
|
17
|
+
import { useOptionalSessionAdapter } from '../contexts/SessionAdapterContext.js';
|
|
18
18
|
import { BusinessAuditAPI } from '../lib/api/activity/audit/index.js';
|
|
19
19
|
export function useBusinessAudit() {
|
|
20
|
-
const
|
|
20
|
+
const session = useOptionalSessionAdapter()?.data ?? null;
|
|
21
21
|
const [isLogging, setIsLogging] = useState(false);
|
|
22
22
|
const logAction = useCallback(async (action, module, details) => {
|
|
23
23
|
if (!session)
|
package/dist/hooks/useDraft.js
CHANGED
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
import { useState, useEffect, useCallback } from 'react';
|
|
22
|
-
import {
|
|
22
|
+
import { useOptionalSessionAdapter } from '../contexts/SessionAdapterContext.js';
|
|
23
23
|
import { DraftAPI } from '../lib/api/draft/index.js';
|
|
24
24
|
/**
|
|
25
25
|
* useDraft Hook - Milestone Based
|
|
26
26
|
*/
|
|
27
27
|
export function useDraft(module, currentState) {
|
|
28
|
-
const
|
|
28
|
+
const session = useOptionalSessionAdapter()?.data ?? null;
|
|
29
29
|
// State
|
|
30
30
|
const [drafts, setDrafts] = useState([]);
|
|
31
31
|
const [isLoadingDrafts, setIsLoadingDrafts] = useState(false);
|
package/dist/index.js
CHANGED
package/dist/lib/api/index.js
CHANGED
|
@@ -18,9 +18,13 @@ export interface GroupedModule {
|
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Fetch dynamic menu modules from external API
|
|
21
|
-
* Now uses APIClient for proper authentication with company credentials
|
|
21
|
+
* Now uses APIClient for proper authentication with company credentials.
|
|
22
|
+
*
|
|
23
|
+
* The caller passes the session (from useSessionAdapter, which AuthSessionProvider fills from
|
|
24
|
+
* next-auth) rather than this module calling next-auth's getSession: importing next-auth here made
|
|
25
|
+
* every app installing indas-ui install next-auth too, since nearly every entry reaches this file.
|
|
22
26
|
*/
|
|
23
|
-
export declare function fetchDynamicMenuModules(companyId: number, userId: number): Promise<DynamicModule[]>;
|
|
27
|
+
export declare function fetchDynamicMenuModules(companyId: number, userId: number, session?: unknown): Promise<DynamicModule[]>;
|
|
24
28
|
/**
|
|
25
29
|
* Group modules by ModuleHeadName and sort by ModuleDisplayOrder
|
|
26
30
|
* Now supports hierarchical sub-modules
|
|
@@ -29,4 +33,4 @@ export declare function groupAndSortModules(modules: DynamicModule[]): GroupedMo
|
|
|
29
33
|
/**
|
|
30
34
|
* Get dynamic navigation structure for sidebar
|
|
31
35
|
*/
|
|
32
|
-
export declare function getDynamicNavigation(companyId?: number, userId?: number): Promise<GroupedModule[]>;
|
|
36
|
+
export declare function getDynamicNavigation(companyId?: number, userId?: number, session?: unknown): Promise<GroupedModule[]>;
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
// Dynamic Menu API
|
|
3
3
|
// Handles dynamic menu and navigation
|
|
4
4
|
import APIClient from '../core/client.js';
|
|
5
|
-
import { getSession } from 'next-auth/react';
|
|
6
5
|
/**
|
|
7
6
|
* Fetch dynamic menu modules from external API
|
|
8
|
-
* Now uses APIClient for proper authentication with company credentials
|
|
7
|
+
* Now uses APIClient for proper authentication with company credentials.
|
|
8
|
+
*
|
|
9
|
+
* The caller passes the session (from useSessionAdapter, which AuthSessionProvider fills from
|
|
10
|
+
* next-auth) rather than this module calling next-auth's getSession: importing next-auth here made
|
|
11
|
+
* every app installing indas-ui install next-auth too, since nearly every entry reaches this file.
|
|
9
12
|
*/
|
|
10
|
-
export async function fetchDynamicMenuModules(companyId, userId) {
|
|
13
|
+
export async function fetchDynamicMenuModules(companyId, userId, session) {
|
|
11
14
|
try {
|
|
12
|
-
// Get session to pass to APIClient for company credentials
|
|
13
|
-
const session = await getSession();
|
|
14
15
|
if (!session) {
|
|
15
16
|
return [];
|
|
16
17
|
}
|
|
@@ -119,10 +120,10 @@ export function groupAndSortModules(modules) {
|
|
|
119
120
|
/**
|
|
120
121
|
* Get dynamic navigation structure for sidebar
|
|
121
122
|
*/
|
|
122
|
-
export async function getDynamicNavigation(companyId, userId) {
|
|
123
|
+
export async function getDynamicNavigation(companyId, userId, session) {
|
|
123
124
|
if (!companyId || !userId) {
|
|
124
125
|
return [];
|
|
125
126
|
}
|
|
126
|
-
const modules = await fetchDynamicMenuModules(companyId, userId);
|
|
127
|
+
const modules = await fetchDynamicMenuModules(companyId, userId, session);
|
|
127
128
|
return groupAndSortModules(modules);
|
|
128
129
|
}
|
package/dist/providers.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export { PageTitleProvider, usePageTitle } from './contexts/PageTitleContext.js'
|
|
|
8
8
|
export { CurrencyProvider, useCurrency } from './contexts/CurrencyContext.js';
|
|
9
9
|
export { SessionAdapterProvider, useSessionAdapter } from './contexts/SessionAdapterContext.js';
|
|
10
10
|
export type { SessionUser, SessionStatus, SessionAdapterValue, SessionAdapterProviderProps } from './contexts/SessionAdapterContext.js';
|
|
11
|
-
export { AuthSessionProvider } from './components/providers/session-provider.js';
|
|
12
11
|
export { APIProvider, useAPI } from './components/providers/api-provider.js';
|
|
13
12
|
export { QueryProvider } from './components/providers/query-provider.js';
|
|
14
13
|
export { cn } from './lib/utils.js';
|
package/dist/providers.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
'use client';
|
|
2
1
|
// Providers entry: `import { ThemeProvider } from 'indas-ui/providers'`
|
|
3
2
|
export { ThemeProvider, ThemeScript, ThemeContext } from './contexts/ThemeContext.js';
|
|
4
3
|
export { GlobalAlertProvider, useGlobalAlert, useQuickAlert } from './contexts/GlobalAlertContext.js';
|
|
@@ -9,7 +8,8 @@ export { SearchPreferencesProvider, useSearchPreferences } from './contexts/Sear
|
|
|
9
8
|
export { PageTitleProvider, usePageTitle } from './contexts/PageTitleContext.js';
|
|
10
9
|
export { CurrencyProvider, useCurrency } from './contexts/CurrencyContext.js';
|
|
11
10
|
export { SessionAdapterProvider, useSessionAdapter } from './contexts/SessionAdapterContext.js';
|
|
12
|
-
|
|
11
|
+
// AuthSessionProvider is in 'indas-ui/auth': it is the one part built on next-auth, which apps
|
|
12
|
+
// install only when they use it.
|
|
13
13
|
export { APIProvider, useAPI } from './components/providers/api-provider.js';
|
|
14
14
|
export { QueryProvider } from './components/providers/query-provider.js';
|
|
15
15
|
export { cn } from './lib/utils.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "indas-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Indas UI — React component library for business apps: Tailwind design tokens, Radix primitives, Lucide icons, DataGrid, dashboards and charts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Indas Analytics Pvt Ltd",
|
|
@@ -74,6 +74,11 @@
|
|
|
74
74
|
"import": "./dist/providers.js",
|
|
75
75
|
"require": "./dist/cjs/providers.js"
|
|
76
76
|
},
|
|
77
|
+
"./auth": {
|
|
78
|
+
"types": "./dist/auth.d.ts",
|
|
79
|
+
"import": "./dist/auth.js",
|
|
80
|
+
"require": "./dist/cjs/auth.js"
|
|
81
|
+
},
|
|
77
82
|
"./tokens.css": "./dist/styles/tokens.css",
|
|
78
83
|
"./styles/*": "./dist/styles/*",
|
|
79
84
|
"./package.json": "./package.json"
|
|
@@ -92,7 +97,8 @@
|
|
|
92
97
|
},
|
|
93
98
|
"peerDependencies": {
|
|
94
99
|
"react": ">=18.0.0",
|
|
95
|
-
"react-dom": ">=18.0.0"
|
|
100
|
+
"react-dom": ">=18.0.0",
|
|
101
|
+
"lucide-react": ">=0.562.0 <2"
|
|
96
102
|
},
|
|
97
103
|
"dependencies": {
|
|
98
104
|
"@dnd-kit/core": "^6.3.1",
|
|
@@ -124,8 +130,6 @@
|
|
|
124
130
|
"jspdf": "^4.2.1",
|
|
125
131
|
"jspdf-autotable": "^5.0.8",
|
|
126
132
|
"ldrs": "^1.1.9",
|
|
127
|
-
"lucide-react": "^0.562.0",
|
|
128
|
-
"next-auth": "^4.24.7",
|
|
129
133
|
"papaparse": "^5.5.3",
|
|
130
134
|
"react-hook-form": "^7.76.1",
|
|
131
135
|
"react-image-crop": "^11.0.10",
|
|
@@ -139,7 +143,9 @@
|
|
|
139
143
|
"devDependencies": {
|
|
140
144
|
"@types/react": "^18.3.12",
|
|
141
145
|
"@types/react-dom": "^18.3.1",
|
|
146
|
+
"lucide-react": "^0.562.0",
|
|
142
147
|
"next": "^16.2.1",
|
|
148
|
+
"next-auth": "^4.24.7",
|
|
143
149
|
"tsc-alias": "^1.9.4",
|
|
144
150
|
"typescript": "^5.7.2"
|
|
145
151
|
},
|
|
@@ -181,7 +187,10 @@
|
|
|
181
187
|
],
|
|
182
188
|
"providers": [
|
|
183
189
|
"./dist/providers.d.ts"
|
|
190
|
+
],
|
|
191
|
+
"auth": [
|
|
192
|
+
"./dist/auth.d.ts"
|
|
184
193
|
]
|
|
185
194
|
}
|
|
186
195
|
}
|
|
187
|
-
}
|
|
196
|
+
}
|