ikoncomponents 1.1.7 → 1.1.9
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/ikoncomponents/alert-dialog/dialog-context.d.ts +21 -0
- package/dist/ikoncomponents/alert-dialog/dialog-context.js +30 -0
- package/dist/ikoncomponents/app-breadcrumb/BreadcrumbProvider.d.ts +16 -0
- package/dist/ikoncomponents/app-breadcrumb/BreadcrumbProvider.js +32 -0
- package/dist/ikoncomponents/app-breadcrumb/index.d.ts +5 -0
- package/dist/ikoncomponents/app-breadcrumb/index.js +57 -0
- package/dist/ikoncomponents/form-fields/combobox-input/index.d.ts +2 -0
- package/dist/ikoncomponents/form-fields/combobox-input/index.js +21 -0
- package/dist/ikoncomponents/form-fields/combobox-input-value/index.d.ts +18 -0
- package/dist/ikoncomponents/form-fields/combobox-input-value/index.js +25 -0
- package/dist/ikoncomponents/form-fields/date-input/index.d.ts +2 -0
- package/dist/ikoncomponents/form-fields/date-input/index.js +15 -0
- package/dist/ikoncomponents/form-fields/file-input/index.d.ts +1 -0
- package/dist/ikoncomponents/form-fields/file-input/index.js +4 -0
- package/dist/ikoncomponents/form-fields/input/index.d.ts +2 -0
- package/dist/ikoncomponents/form-fields/input/index.js +18 -0
- package/dist/ikoncomponents/form-fields/multi-combobox-input/index.d.ts +6 -0
- package/dist/ikoncomponents/form-fields/multi-combobox-input/index.js +381 -0
- package/dist/ikoncomponents/form-fields/otp-input/index.d.ts +2 -0
- package/dist/ikoncomponents/form-fields/otp-input/index.js +18 -0
- package/dist/ikoncomponents/form-fields/phone-input/index.d.ts +1 -0
- package/dist/ikoncomponents/form-fields/phone-input/index.js +4 -0
- package/dist/ikoncomponents/form-fields/textarea/index.d.ts +2 -0
- package/dist/ikoncomponents/form-fields/textarea/index.js +18 -0
- package/dist/ikoncomponents/form-fields/types/index.d.ts +36 -0
- package/dist/ikoncomponents/form-fields/types/index.js +1 -0
- package/dist/ikoncomponents/main-layout/SidebarNavContext.d.ts +27 -0
- package/dist/ikoncomponents/main-layout/SidebarNavContext.js +40 -0
- package/dist/ikoncomponents/main-layout/app-sidebar.d.ts +3 -0
- package/dist/ikoncomponents/main-layout/app-sidebar.js +19 -0
- package/dist/ikoncomponents/main-layout/footer.d.ts +1 -0
- package/dist/ikoncomponents/main-layout/footer.js +4 -0
- package/dist/ikoncomponents/main-layout/header.d.ts +1 -0
- package/dist/ikoncomponents/main-layout/header.js +10 -0
- package/dist/ikoncomponents/main-layout/index.d.ts +5 -0
- package/dist/ikoncomponents/main-layout/index.js +11 -0
- package/dist/ikoncomponents/main-layout/main-sidebar.d.ts +27 -0
- package/dist/ikoncomponents/main-layout/main-sidebar.js +74 -0
- package/dist/ikoncomponents/main-layout/nav-main.d.ts +8 -0
- package/dist/ikoncomponents/main-layout/nav-main.js +31 -0
- package/dist/ikoncomponents/resource/index.d.ts +19 -0
- package/dist/ikoncomponents/resource/index.js +89 -0
- package/dist/ikoncomponents/skeleton-loader/skeleton-table.d.ts +5 -0
- package/dist/ikoncomponents/skeleton-loader/skeleton-table.js +6 -0
- package/dist/ikoncomponents/skeleton-loader/skeleton-widget.d.ts +3 -0
- package/dist/ikoncomponents/skeleton-loader/skeleton-widget.js +5 -0
- package/dist/ikoncomponents/theme-toggle-btn/index.d.ts +1 -1
- package/dist/ikoncomponents/theme-toggle-btn/index.js +112 -4
- package/dist/ikoncomponents/upload-tab/index.d.ts +1 -0
- package/dist/ikoncomponents/upload-tab/index.js +92 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +33 -0
- package/dist/shadcn/aspect-ratio.d.ts +3 -0
- package/dist/shadcn/aspect-ratio.js +19 -0
- package/dist/shadcn/breadcrumb.d.ts +11 -0
- package/dist/shadcn/breadcrumb.js +45 -0
- package/dist/shadcn/button.d.ts +1 -1
- package/dist/shadcn/button.js +3 -2
- package/dist/shadcn/collapsible.d.ts +5 -0
- package/dist/shadcn/collapsible.js +27 -0
- package/dist/shadcn/drawer.d.ts +13 -0
- package/dist/shadcn/drawer.js +56 -0
- package/dist/shadcn/form.d.ts +24 -0
- package/dist/shadcn/form.js +70 -0
- package/dist/shadcn/input-otp.d.ts +34 -0
- package/dist/shadcn/input-otp.js +40 -0
- package/dist/shadcn/radio-group.js +2 -4
- package/dist/shadcn/table.js +1 -1
- package/dist/shadcn/tabs.js +1 -1
- package/dist/shadcn/toggle-group.d.ts +9 -0
- package/dist/shadcn/toggle-group.js +35 -0
- package/dist/shadcn/toggle.d.ts +9 -0
- package/dist/shadcn/toggle.js +38 -0
- package/dist/shadcn/tooltip.js +2 -2
- package/dist/styles.css +534 -41
- package/dist/utils/border-radius-provider.d.ts +11 -0
- package/dist/utils/border-radius-provider.js +35 -0
- package/dist/utils/font-provider.d.ts +11 -0
- package/dist/utils/font-provider.js +37 -0
- package/dist/utils/session/cookieSession.d.ts +8 -0
- package/dist/utils/session/cookieSession.js +33 -0
- package/dist/utils/token-management/index.d.ts +7 -0
- package/dist/utils/token-management/index.js +78 -0
- package/dist/utils/token-management/types.d.ts +6 -0
- package/dist/utils/token-management/types.js +1 -0
- package/package.json +98 -91
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type RadiusValue = 0 | 0.25 | 0.5 | 0.75 | 1;
|
|
3
|
+
interface RadiusContextType {
|
|
4
|
+
radius: RadiusValue;
|
|
5
|
+
setRadius: (radius: RadiusValue) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function RadiusProvider({ children }: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const useRadius: () => RadiusContextType;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useState, useEffect, useMemo } from 'react';
|
|
4
|
+
const RadiusContext = createContext(undefined);
|
|
5
|
+
export function RadiusProvider({ children }) {
|
|
6
|
+
const [radius, setRadius] = useState(0.5);
|
|
7
|
+
const [mounted, setMounted] = useState(false);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
setMounted(true);
|
|
10
|
+
const storedRadius = localStorage.getItem('app-radius');
|
|
11
|
+
if (storedRadius) {
|
|
12
|
+
const parsed = parseFloat(storedRadius);
|
|
13
|
+
if ([0, 0.25, 0.5, 0.75, 1].includes(parsed)) {
|
|
14
|
+
setRadius(parsed);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}, []);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!mounted)
|
|
20
|
+
return;
|
|
21
|
+
const radiusInRem = radius === 0 ? '0rem' : `${radius}rem`;
|
|
22
|
+
document.documentElement.style.setProperty('--radius', radiusInRem);
|
|
23
|
+
localStorage.setItem('app-radius', radius.toString());
|
|
24
|
+
console.log('Radius changed to:', radius, radiusInRem);
|
|
25
|
+
}, [radius, mounted]);
|
|
26
|
+
const value = useMemo(() => ({ radius, setRadius }), [radius]);
|
|
27
|
+
return (_jsx(RadiusContext.Provider, { value: value, children: children }));
|
|
28
|
+
}
|
|
29
|
+
export const useRadius = () => {
|
|
30
|
+
const context = useContext(RadiusContext);
|
|
31
|
+
if (context === undefined) {
|
|
32
|
+
throw new Error('useRadius must be used within a RadiusProvider');
|
|
33
|
+
}
|
|
34
|
+
return context;
|
|
35
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type FontName = 'Poppins' | 'Oswald' | 'Outfit';
|
|
3
|
+
interface FontContextType {
|
|
4
|
+
font: FontName;
|
|
5
|
+
setFont: (font: FontName) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function FontProvider({ children }: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const useFont: () => FontContextType;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useState, useEffect, useMemo } from 'react';
|
|
4
|
+
const FontContext = createContext(undefined);
|
|
5
|
+
export function FontProvider({ children }) {
|
|
6
|
+
const [font, setFont] = useState('Poppins');
|
|
7
|
+
const [mounted, setMounted] = useState(false);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
setMounted(true);
|
|
10
|
+
const storedFont = localStorage.getItem('app-font');
|
|
11
|
+
if (storedFont && ['Poppins', 'Oswald', 'Outfit'].includes(storedFont)) {
|
|
12
|
+
setFont(storedFont);
|
|
13
|
+
}
|
|
14
|
+
}, []);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (!mounted)
|
|
17
|
+
return;
|
|
18
|
+
const fontVariables = {
|
|
19
|
+
Poppins: 'var(--font-poppins)',
|
|
20
|
+
Oswald: 'var(--font-oswald)',
|
|
21
|
+
Outfit: 'var(--font-outfit)',
|
|
22
|
+
};
|
|
23
|
+
document.body.style.fontFamily = fontVariables[font];
|
|
24
|
+
document.documentElement.style.fontFamily = fontVariables[font];
|
|
25
|
+
localStorage.setItem('app-font', font);
|
|
26
|
+
console.log('Font changed to:', font, fontVariables[font]);
|
|
27
|
+
}, [font, mounted]);
|
|
28
|
+
const value = useMemo(() => ({ font, setFont }), [font]);
|
|
29
|
+
return (_jsx(FontContext.Provider, { value: value, children: children }));
|
|
30
|
+
}
|
|
31
|
+
export const useFont = () => {
|
|
32
|
+
const context = useContext(FontContext);
|
|
33
|
+
if (context === undefined) {
|
|
34
|
+
throw new Error('useFont must be used within a FontProvider');
|
|
35
|
+
}
|
|
36
|
+
return context;
|
|
37
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface CookieSessionOptionsProps {
|
|
2
|
+
maxAge?: number;
|
|
3
|
+
expires?: Date;
|
|
4
|
+
}
|
|
5
|
+
export declare function setCookieSession(sessionName: string, data: string, options?: CookieSessionOptionsProps): Promise<void>;
|
|
6
|
+
export declare function getCookieSession(sessionName: string): Promise<string | undefined>;
|
|
7
|
+
export declare function clearCookieSession(sessionName: string): Promise<void>;
|
|
8
|
+
export declare function clearAllCookieSession(): Promise<void>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { cookies } from "next/headers";
|
|
3
|
+
const cookiePrefix = "ikoncloud_next_";
|
|
4
|
+
export async function setCookieSession(sessionName, data, options) {
|
|
5
|
+
const cookieStore = await cookies();
|
|
6
|
+
cookieStore.set(cookiePrefix + sessionName, data, {
|
|
7
|
+
httpOnly: false,
|
|
8
|
+
sameSite: "lax",
|
|
9
|
+
secure: process.env.NODE_ENV === "production",
|
|
10
|
+
path: "/",
|
|
11
|
+
domain: process.env.NEXT_PUBLIC_COOKIE_DOMAIN,
|
|
12
|
+
expires: options === null || options === void 0 ? void 0 : options.expires,
|
|
13
|
+
maxAge: options === null || options === void 0 ? void 0 : options.maxAge
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export async function getCookieSession(sessionName) {
|
|
17
|
+
var _a;
|
|
18
|
+
const cookieStore = await cookies();
|
|
19
|
+
const cookie = (_a = cookieStore.get(cookiePrefix + sessionName)) === null || _a === void 0 ? void 0 : _a.value;
|
|
20
|
+
return cookie;
|
|
21
|
+
}
|
|
22
|
+
export async function clearCookieSession(sessionName) {
|
|
23
|
+
const cookieStore = await cookies();
|
|
24
|
+
cookieStore.delete(cookiePrefix + sessionName);
|
|
25
|
+
}
|
|
26
|
+
export async function clearAllCookieSession() {
|
|
27
|
+
const cookieStore = await cookies();
|
|
28
|
+
cookieStore.getAll().forEach((cookie) => {
|
|
29
|
+
if (cookie.name.startsWith(cookiePrefix)) {
|
|
30
|
+
cookieStore.delete(cookie.name);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface AccessTokenOptionsProps {
|
|
2
|
+
isNotLogOutWhenExpire?: boolean;
|
|
3
|
+
isSetToken?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function getValidAccessToken(options?: AccessTokenOptionsProps): Promise<string | null>;
|
|
6
|
+
export declare function refreshAccessToken(refreshToken: string, isSetToken?: boolean): Promise<string | null>;
|
|
7
|
+
export declare function logOut(): Promise<void>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { redirect } from "next/navigation";
|
|
3
|
+
import { clearAllCookieSession, getCookieSession, setCookieSession } from "../session/cookieSession";
|
|
4
|
+
export async function getValidAccessToken(options) {
|
|
5
|
+
const accessToken = await getCookieSession("accessToken");
|
|
6
|
+
const refreshToken = await getCookieSession("refreshToken");
|
|
7
|
+
if (accessToken) {
|
|
8
|
+
return accessToken;
|
|
9
|
+
}
|
|
10
|
+
if (refreshToken) {
|
|
11
|
+
// Refresh token is valid, call the refresh token API
|
|
12
|
+
const newAccessToken = await refreshAccessToken(refreshToken, options === null || options === void 0 ? void 0 : options.isSetToken);
|
|
13
|
+
if (newAccessToken) {
|
|
14
|
+
return newAccessToken; // Return the new access token
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (!(options === null || options === void 0 ? void 0 : options.isNotLogOutWhenExpire)) {
|
|
18
|
+
await logOut();
|
|
19
|
+
}
|
|
20
|
+
// If both tokens are invalid, return null
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
export async function refreshAccessToken(refreshToken, isSetToken) {
|
|
24
|
+
try {
|
|
25
|
+
// Replace this with your actual API call to refresh the token
|
|
26
|
+
const response = await fetch(`${process.env.IKON_API_URL}/platform/auth/refresh-token`, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: {
|
|
29
|
+
"Content-Type": "application/json",
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({ refreshToken }),
|
|
32
|
+
});
|
|
33
|
+
if (response.ok) {
|
|
34
|
+
const data = await response.json();
|
|
35
|
+
const { accessToken, refreshToken, expiresIn, refreshExpiresIn } = data;
|
|
36
|
+
if (isSetToken) {
|
|
37
|
+
try {
|
|
38
|
+
await setCookieSession("accessToken", accessToken, { maxAge: expiresIn });
|
|
39
|
+
await setCookieSession("refreshToken", refreshToken, { maxAge: refreshExpiresIn });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error(error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// const headerList = headers();
|
|
46
|
+
// const protocol = (await headerList).get("x-forwarded-proto") || "http";
|
|
47
|
+
// const hostname = (await headerList).get("host") || "localhost:3000";
|
|
48
|
+
// const host = `${protocol}://${hostname}`;
|
|
49
|
+
// // Save the new access token and its expiration time
|
|
50
|
+
// try {
|
|
51
|
+
// const res = await fetch(`${host}/api/auth/set-token`, {
|
|
52
|
+
// method: "POST",
|
|
53
|
+
// headers: {
|
|
54
|
+
// "Content-Type": "application/json",
|
|
55
|
+
// },
|
|
56
|
+
// body: JSON.stringify(tokenData),
|
|
57
|
+
// credentials: "include", // Include credentials to send cookies
|
|
58
|
+
// });
|
|
59
|
+
// if (res.ok) {
|
|
60
|
+
// console.log("Token updated successfully");
|
|
61
|
+
// } else {
|
|
62
|
+
// console.error("Failed to update token");
|
|
63
|
+
// }
|
|
64
|
+
// } catch (error) {
|
|
65
|
+
// console.error("Error updating token:", error);
|
|
66
|
+
// }
|
|
67
|
+
return accessToken;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error("Failed to refresh access token:", error);
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
export async function logOut() {
|
|
76
|
+
await clearAllCookieSession();
|
|
77
|
+
redirect(process.env.IKON_LOGIN_PAGE_URL || process.env.DEV_TOOL_BASE_PATH + "/signup.html");
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,91 +1,98 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ikoncomponents",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"main": "dist/index.js",
|
|
5
|
-
"types": "dist/index.d.ts",
|
|
6
|
-
"css": "dist/styles.css",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist"
|
|
9
|
-
],
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "npm run build:js && npm run build:css",
|
|
12
|
-
"build:js": "tsc -p tsconfig.json",
|
|
13
|
-
"build:css": "postcss src/styles.css -o dist/styles.css --config postcss.config.mjs --minify",
|
|
14
|
-
"clean": "rimraf dist",
|
|
15
|
-
"prepublishOnly": "npm run build"
|
|
16
|
-
},
|
|
17
|
-
"dependencies": {
|
|
18
|
-
"@radix-ui/react-accordion": "^1.2.12",
|
|
19
|
-
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
20
|
-
"@radix-ui/react-
|
|
21
|
-
"@radix-ui/react-
|
|
22
|
-
"@radix-ui/react-
|
|
23
|
-
"@radix-ui/react-
|
|
24
|
-
"@radix-ui/react-
|
|
25
|
-
"@radix-ui/react-
|
|
26
|
-
"@radix-ui/react-
|
|
27
|
-
"@radix-ui/react-
|
|
28
|
-
"@radix-ui/react-
|
|
29
|
-
"@radix-ui/react-
|
|
30
|
-
"@radix-ui/react-
|
|
31
|
-
"@radix-ui/react-
|
|
32
|
-
"@radix-ui/react-
|
|
33
|
-
"@radix-ui/react-
|
|
34
|
-
"@radix-ui/react-
|
|
35
|
-
"@radix-ui/react-
|
|
36
|
-
"@radix-ui/react-
|
|
37
|
-
"@radix-ui/react-
|
|
38
|
-
"@radix-ui/react-
|
|
39
|
-
"@
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"react
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "ikoncomponents",
|
|
3
|
+
"version": "1.1.9",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"css": "dist/styles.css",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "npm run build:js && npm run build:css",
|
|
12
|
+
"build:js": "tsc -p tsconfig.json",
|
|
13
|
+
"build:css": "postcss src/styles.css -o dist/styles.css --config postcss.config.mjs --minify",
|
|
14
|
+
"clean": "rimraf dist",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
19
|
+
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
20
|
+
"@radix-ui/react-aspect-ratio": "^1.1.7",
|
|
21
|
+
"@radix-ui/react-avatar": "^1.1.10",
|
|
22
|
+
"@radix-ui/react-checkbox": "^1.3.3",
|
|
23
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
24
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
25
|
+
"@radix-ui/react-hover-card": "^1.1.15",
|
|
26
|
+
"@radix-ui/react-icons": "^1.3.0",
|
|
27
|
+
"@radix-ui/react-label": "^2.1.7",
|
|
28
|
+
"@radix-ui/react-navigation-menu": "^1.2.14",
|
|
29
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
30
|
+
"@radix-ui/react-progress": "^1.1.7",
|
|
31
|
+
"@radix-ui/react-radio-group": "^1.3.8",
|
|
32
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
33
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
34
|
+
"@radix-ui/react-separator": "^1.1.7",
|
|
35
|
+
"@radix-ui/react-slider": "^1.3.6",
|
|
36
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
37
|
+
"@radix-ui/react-switch": "^1.2.6",
|
|
38
|
+
"@radix-ui/react-tabs": "^1.1.13",
|
|
39
|
+
"@radix-ui/react-toggle": "^1.1.10",
|
|
40
|
+
"@radix-ui/react-toggle-group": "^1.1.11",
|
|
41
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
42
|
+
"@tanstack/react-table": "^8.21.3",
|
|
43
|
+
"axios": "^1.13.1",
|
|
44
|
+
"class-variance-authority": "^0.7.1",
|
|
45
|
+
"clsx": "^2.1.1",
|
|
46
|
+
"cmdk": "^1.1.1",
|
|
47
|
+
"countries-list": "^3.1.1",
|
|
48
|
+
"country-flag-icons": "^1.5.21",
|
|
49
|
+
"date-fns": "^4.1.0",
|
|
50
|
+
"echarts": "^6.0.0",
|
|
51
|
+
"eslint": "^9",
|
|
52
|
+
"framer-motion": "^12.23.22",
|
|
53
|
+
"input-otp": "^1.4.2",
|
|
54
|
+
"lucide-react": "^0.545.0",
|
|
55
|
+
"motion": "^12.23.22",
|
|
56
|
+
"next": "16.0.0",
|
|
57
|
+
"next-themes": "^0.4.6",
|
|
58
|
+
"react": "^18.2.0",
|
|
59
|
+
"react-big-calendar": "^1.19.4",
|
|
60
|
+
"react-day-picker": "^9.9.0",
|
|
61
|
+
"react-dom": "^18.2.0",
|
|
62
|
+
"react-hook-form": "^7.64.0",
|
|
63
|
+
"shadcn": "^3.5.0",
|
|
64
|
+
"sonner": "^2.0.7",
|
|
65
|
+
"tailwind-merge": "^3.3.1",
|
|
66
|
+
"tailwindcss-animate": "^1.0.7",
|
|
67
|
+
"vaul": "^1.1.2",
|
|
68
|
+
"zxcvbn": "^4.4.2"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@tailwindcss/postcss": "^4",
|
|
72
|
+
"@types/node": "^20",
|
|
73
|
+
"@types/react": "^19",
|
|
74
|
+
"@types/react-big-calendar": "^1.16.3",
|
|
75
|
+
"@types/react-dom": "^19",
|
|
76
|
+
"@types/zxcvbn": "^4.4.5",
|
|
77
|
+
"autoprefixer": "^10.4.21",
|
|
78
|
+
"eslint": "^9",
|
|
79
|
+
"eslint-config-next": "16.0.0",
|
|
80
|
+
"next": "^14.0.0",
|
|
81
|
+
"postcss": "^8.5.6",
|
|
82
|
+
"postcss-cli": "^11.0.1",
|
|
83
|
+
"postcss-import": "^16.1.1",
|
|
84
|
+
"postcss-preset-env": "^10.4.0",
|
|
85
|
+
"rimraf": "^6.0.1",
|
|
86
|
+
"tailwindcss": "^4",
|
|
87
|
+
"tw-animate-css": "^1.4.0",
|
|
88
|
+
"typescript": "^5"
|
|
89
|
+
},
|
|
90
|
+
"peerDependencies": {
|
|
91
|
+
"clsx": "^2.1.1",
|
|
92
|
+
"next": "16.0.0",
|
|
93
|
+
"next-themes": "^0.4.6",
|
|
94
|
+
"react": "^18.2.0",
|
|
95
|
+
"react-dom": "^18.2.0",
|
|
96
|
+
"tailwind-merge": "^3.3.1"
|
|
97
|
+
}
|
|
98
|
+
}
|