uibee 2.8.1 → 2.8.3
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/src/components/alert/alert.d.ts +8 -0
- package/dist/src/components/alert/alert.js +15 -0
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/components/index.js +2 -0
- package/dist/src/globals.css +30 -0
- package/dist/src/utils/auth/token.js +7 -2
- package/package.json +1 -1
- package/src/components/alert/alert.tsx +35 -0
- package/src/components/index.ts +3 -0
- package/src/utils/auth/token.ts +9 -2
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
type AlertProps = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
variant?: 'warning' | 'info';
|
|
5
|
+
className?: string;
|
|
6
|
+
};
|
|
7
|
+
export default function Alert({ children, variant, className, }: AlertProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CircleAlert, TriangleAlert, Info } from 'lucide-react';
|
|
3
|
+
export default function Alert({ children, variant = 'warning', className = '', }) {
|
|
4
|
+
const color = variant === 'warning' ? 'bg-red-900'
|
|
5
|
+
: variant === 'info' ? 'bg-blue-600' :
|
|
6
|
+
'bg-gray-900';
|
|
7
|
+
const Icon = variant === 'warning' ? CircleAlert
|
|
8
|
+
: variant === 'info' ? Info :
|
|
9
|
+
TriangleAlert;
|
|
10
|
+
return (_jsxs("div", { className: `
|
|
11
|
+
grid grid-cols-[min-content_auto] rounded-lg
|
|
12
|
+
p-[0.5em_1em_0.5em_0.8em] items-start w-fit text-white
|
|
13
|
+
${color} ${className}
|
|
14
|
+
`, children: [_jsx(Icon, { className: 'w-8 h-8 mr-[0.3rem] stroke-login-50' }), _jsx("div", { className: 'self-center', children: children })] }));
|
|
15
|
+
}
|
|
@@ -19,3 +19,4 @@ export { default as VersionTag } from './version/version';
|
|
|
19
19
|
export { default as LoginPage } from './login/loginPage';
|
|
20
20
|
export { default as Toaster, toast } from './toast/toaster';
|
|
21
21
|
export { default as Button } from './buttons/button';
|
|
22
|
+
export { default as Alert } from './alert/alert';
|
package/dist/src/globals.css
CHANGED
|
@@ -10,12 +10,15 @@
|
|
|
10
10
|
--color-red-200: oklch(88.5% 0.062 18.334);
|
|
11
11
|
--color-red-400: oklch(70.4% 0.191 22.216);
|
|
12
12
|
--color-red-500: oklch(63.7% 0.237 25.331);
|
|
13
|
+
--color-red-900: oklch(39.6% 0.141 25.723);
|
|
13
14
|
--color-yellow-500: oklch(79.5% 0.184 86.047);
|
|
14
15
|
--color-green-500: oklch(72.3% 0.219 149.579);
|
|
15
16
|
--color-blue-500: oklch(62.3% 0.214 259.815);
|
|
17
|
+
--color-blue-600: oklch(54.6% 0.245 262.881);
|
|
16
18
|
--color-gray-200: oklch(92.8% 0.006 264.531);
|
|
17
19
|
--color-gray-300: oklch(87.2% 0.01 258.338);
|
|
18
20
|
--color-gray-400: oklch(70.7% 0.022 261.325);
|
|
21
|
+
--color-gray-900: oklch(21% 0.034 264.665);
|
|
19
22
|
--color-black: #000;
|
|
20
23
|
--color-white: #fff;
|
|
21
24
|
--spacing: 0.25rem;
|
|
@@ -1004,6 +1007,9 @@
|
|
|
1004
1007
|
.mt-2 {
|
|
1005
1008
|
margin-top: calc(var(--spacing) * 2);
|
|
1006
1009
|
}
|
|
1010
|
+
.mr-\[0\.3rem\] {
|
|
1011
|
+
margin-right: 0.3rem;
|
|
1012
|
+
}
|
|
1007
1013
|
.mb-1 {
|
|
1008
1014
|
margin-bottom: calc(var(--spacing) * 1);
|
|
1009
1015
|
}
|
|
@@ -1292,6 +1298,9 @@
|
|
|
1292
1298
|
.grid-cols-8 {
|
|
1293
1299
|
grid-template-columns: repeat(8, minmax(0, 1fr));
|
|
1294
1300
|
}
|
|
1301
|
+
.grid-cols-\[min-content_auto\] {
|
|
1302
|
+
grid-template-columns: min-content auto;
|
|
1303
|
+
}
|
|
1295
1304
|
.flex-col {
|
|
1296
1305
|
flex-direction: column;
|
|
1297
1306
|
}
|
|
@@ -1310,6 +1319,9 @@
|
|
|
1310
1319
|
.items-end {
|
|
1311
1320
|
align-items: flex-end;
|
|
1312
1321
|
}
|
|
1322
|
+
.items-start {
|
|
1323
|
+
align-items: flex-start;
|
|
1324
|
+
}
|
|
1313
1325
|
.justify-between {
|
|
1314
1326
|
justify-content: space-between;
|
|
1315
1327
|
}
|
|
@@ -1344,6 +1356,9 @@
|
|
|
1344
1356
|
margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
|
|
1345
1357
|
}
|
|
1346
1358
|
}
|
|
1359
|
+
.self-center {
|
|
1360
|
+
align-self: center;
|
|
1361
|
+
}
|
|
1347
1362
|
.truncate {
|
|
1348
1363
|
overflow: hidden;
|
|
1349
1364
|
text-overflow: ellipsis;
|
|
@@ -1429,6 +1444,12 @@
|
|
|
1429
1444
|
.bg-\[\#18181899\] {
|
|
1430
1445
|
background-color: #18181899;
|
|
1431
1446
|
}
|
|
1447
|
+
.bg-blue-600 {
|
|
1448
|
+
background-color: var(--color-blue-600);
|
|
1449
|
+
}
|
|
1450
|
+
.bg-gray-900 {
|
|
1451
|
+
background-color: var(--color-gray-900);
|
|
1452
|
+
}
|
|
1432
1453
|
.bg-login {
|
|
1433
1454
|
background-color: var(--color-login);
|
|
1434
1455
|
}
|
|
@@ -1483,6 +1504,9 @@
|
|
|
1483
1504
|
background-color: color-mix(in oklab, var(--color-login) 70%, transparent);
|
|
1484
1505
|
}
|
|
1485
1506
|
}
|
|
1507
|
+
.bg-red-900 {
|
|
1508
|
+
background-color: var(--color-red-900);
|
|
1509
|
+
}
|
|
1486
1510
|
.bg-transparent {
|
|
1487
1511
|
background-color: transparent;
|
|
1488
1512
|
}
|
|
@@ -1539,6 +1563,9 @@
|
|
|
1539
1563
|
.stroke-login {
|
|
1540
1564
|
stroke: var(--color-login);
|
|
1541
1565
|
}
|
|
1566
|
+
.stroke-login-50 {
|
|
1567
|
+
stroke: var(--color-login-50);
|
|
1568
|
+
}
|
|
1542
1569
|
.stroke-\[3\.5px\] {
|
|
1543
1570
|
stroke-width: 3.5px;
|
|
1544
1571
|
}
|
|
@@ -1563,6 +1590,9 @@
|
|
|
1563
1590
|
.p-8 {
|
|
1564
1591
|
padding: calc(var(--spacing) * 8);
|
|
1565
1592
|
}
|
|
1593
|
+
.p-\[0\.5em_1em_0\.5em_0\.8em\] {
|
|
1594
|
+
padding: 0.5em 1em 0.5em 0.8em;
|
|
1595
|
+
}
|
|
1566
1596
|
.px-2 {
|
|
1567
1597
|
padding-inline: calc(var(--spacing) * 2);
|
|
1568
1598
|
}
|
|
@@ -3,11 +3,13 @@ export default async function AuthToken({ req, frontendURL, redirectPath }) {
|
|
|
3
3
|
const url = new URL(req.url);
|
|
4
4
|
const token = url.searchParams.get('access_token');
|
|
5
5
|
const btg = url.searchParams.get('btg');
|
|
6
|
+
const redirectCookie = req.cookies.get('redirect_after_login');
|
|
7
|
+
const redirect = redirectCookie ? redirectCookie.value : redirectPath || '/';
|
|
6
8
|
if (!token) {
|
|
7
9
|
return NextResponse.json({ error: 'No access token provided' }, { status: 400 });
|
|
8
10
|
}
|
|
9
11
|
if (btg) {
|
|
10
|
-
return NextResponse.redirect(new URL(
|
|
12
|
+
return NextResponse.redirect(new URL(redirect, frontendURL));
|
|
11
13
|
}
|
|
12
14
|
const accessToken = url.searchParams.get('access_token');
|
|
13
15
|
const userID = url.searchParams.get('id');
|
|
@@ -15,12 +17,15 @@ export default async function AuthToken({ req, frontendURL, redirectPath }) {
|
|
|
15
17
|
const userNickname = url.searchParams.get('username');
|
|
16
18
|
const userEmail = url.searchParams.get('email');
|
|
17
19
|
const userGroups = url.searchParams.get('groups');
|
|
18
|
-
const response = NextResponse.redirect(new URL(
|
|
20
|
+
const response = NextResponse.redirect(new URL(redirect, frontendURL));
|
|
19
21
|
response.cookies.set('access_token', accessToken);
|
|
20
22
|
response.cookies.set('user_id', userID);
|
|
21
23
|
response.cookies.set('user_name', username);
|
|
22
24
|
response.cookies.set('user_nickname', userNickname);
|
|
23
25
|
response.cookies.set('user_email', userEmail);
|
|
24
26
|
response.cookies.set('user_groups', userGroups);
|
|
27
|
+
if (redirectCookie) {
|
|
28
|
+
response.cookies.delete('redirect_after_login');
|
|
29
|
+
}
|
|
25
30
|
return response;
|
|
26
31
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ReactNode } from 'react'
|
|
2
|
+
import { CircleAlert, TriangleAlert, Info } from 'lucide-react'
|
|
3
|
+
|
|
4
|
+
type AlertProps = {
|
|
5
|
+
children: ReactNode
|
|
6
|
+
variant?: 'warning' | 'info'
|
|
7
|
+
className?: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default function Alert({
|
|
11
|
+
children,
|
|
12
|
+
variant = 'warning',
|
|
13
|
+
className = '',
|
|
14
|
+
}: AlertProps) {
|
|
15
|
+
const color = variant === 'warning' ? 'bg-red-900'
|
|
16
|
+
: variant === 'info' ? 'bg-blue-600' :
|
|
17
|
+
'bg-gray-900'
|
|
18
|
+
|
|
19
|
+
const Icon = variant === 'warning' ? CircleAlert
|
|
20
|
+
: variant === 'info' ? Info :
|
|
21
|
+
TriangleAlert
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div
|
|
25
|
+
className={`
|
|
26
|
+
grid grid-cols-[min-content_auto] rounded-lg
|
|
27
|
+
p-[0.5em_1em_0.5em_0.8em] items-start w-fit text-white
|
|
28
|
+
${color} ${className}
|
|
29
|
+
`}
|
|
30
|
+
>
|
|
31
|
+
<Icon className='w-8 h-8 mr-[0.3rem] stroke-login-50' />
|
|
32
|
+
<div className='self-center'>{children}</div>
|
|
33
|
+
</div>
|
|
34
|
+
)
|
|
35
|
+
}
|
package/src/components/index.ts
CHANGED
package/src/utils/auth/token.ts
CHANGED
|
@@ -5,12 +5,15 @@ export default async function AuthToken({ req, frontendURL, redirectPath }: Auth
|
|
|
5
5
|
const url = new URL(req.url)
|
|
6
6
|
const token = url.searchParams.get('access_token')
|
|
7
7
|
const btg = url.searchParams.get('btg')
|
|
8
|
+
const redirectCookie = req.cookies.get('redirect_after_login')
|
|
9
|
+
const redirect = redirectCookie ? redirectCookie.value : redirectPath || '/'
|
|
10
|
+
|
|
8
11
|
if (!token) {
|
|
9
12
|
return NextResponse.json({ error: 'No access token provided' }, { status: 400 })
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
if (btg) {
|
|
13
|
-
return NextResponse.redirect(new URL(
|
|
16
|
+
return NextResponse.redirect(new URL(redirect, frontendURL))
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
const accessToken = url.searchParams.get('access_token')!
|
|
@@ -20,7 +23,7 @@ export default async function AuthToken({ req, frontendURL, redirectPath }: Auth
|
|
|
20
23
|
const userEmail = url.searchParams.get('email')!
|
|
21
24
|
const userGroups = url.searchParams.get('groups')!
|
|
22
25
|
|
|
23
|
-
const response = NextResponse.redirect(new URL(
|
|
26
|
+
const response = NextResponse.redirect(new URL(redirect, frontendURL))
|
|
24
27
|
response.cookies.set('access_token', accessToken)
|
|
25
28
|
response.cookies.set('user_id', userID)
|
|
26
29
|
response.cookies.set('user_name', username)
|
|
@@ -28,5 +31,9 @@ export default async function AuthToken({ req, frontendURL, redirectPath }: Auth
|
|
|
28
31
|
response.cookies.set('user_email', userEmail)
|
|
29
32
|
response.cookies.set('user_groups', userGroups)
|
|
30
33
|
|
|
34
|
+
if (redirectCookie) {
|
|
35
|
+
response.cookies.delete('redirect_after_login')
|
|
36
|
+
}
|
|
37
|
+
|
|
31
38
|
return response
|
|
32
39
|
}
|