uibee 2.3.0 → 2.3.2
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/globals.css +11 -1
- package/dist/src/components/container/highlight.d.ts +4 -0
- package/dist/src/components/container/highlight.js +4 -0
- package/dist/src/components/container/page.d.ts +1 -1
- package/dist/src/components/container/page.js +1 -1
- package/dist/src/components/index.d.ts +2 -0
- package/dist/src/components/index.js +4 -0
- package/dist/src/components/navbar/navbar.d.ts +5 -4
- package/dist/src/components/navbar/navbar.js +15 -7
- package/dist/src/components/toggle/language.d.ts +1 -1
- package/dist/src/components/toggle/language.js +1 -1
- package/package.json +14 -14
- package/src/components/container/highlight.tsx +3 -0
- package/src/components/container/page.tsx +1 -1
- package/src/components/index.ts +6 -1
- package/src/components/navbar/navbar.tsx +37 -17
- package/src/components/toggle/language.tsx +2 -2
package/dist/globals.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.
|
|
1
|
+
/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer properties;
|
|
3
3
|
@layer theme, base, components, utilities;
|
|
4
4
|
@layer theme {
|
|
@@ -359,6 +359,16 @@
|
|
|
359
359
|
.mx-auto {
|
|
360
360
|
margin-inline: auto;
|
|
361
361
|
}
|
|
362
|
+
.highlighted-section {
|
|
363
|
+
line-height: 1.8rem;
|
|
364
|
+
border-left: .3rem solid var(--color-login);
|
|
365
|
+
max-width: 50rem;
|
|
366
|
+
margin-top: 1.2rem;
|
|
367
|
+
margin-bottom: 1.2rem;
|
|
368
|
+
padding: .5rem 0 .5rem 1rem;
|
|
369
|
+
font-size: 1.2rem;
|
|
370
|
+
font-weight: 500;
|
|
371
|
+
}
|
|
362
372
|
.-mt-0\.5 {
|
|
363
373
|
margin-top: calc(var(--spacing) * -0.5);
|
|
364
374
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
export function PageContainer({ title, children }) {
|
|
2
|
+
export default function PageContainer({ title, children }) {
|
|
3
3
|
return (_jsx("div", { className: 'w-full page-container', children: _jsxs("div", { className: 'flex flex-col col-start-3', children: [_jsx("h1", { className: 'heading', children: title }), children] }) }));
|
|
4
4
|
}
|
|
@@ -10,6 +10,8 @@ export { default as LanguageToggle } from './toggle/language';
|
|
|
10
10
|
export { default as Navbar } from './navbar/navbar';
|
|
11
11
|
export { default as NavItem } from './navbar/navbarItem';
|
|
12
12
|
export { default as NavDropdown } from './navbar/navbarDropdown';
|
|
13
|
+
export { default as PageContainer } from './container/page';
|
|
14
|
+
export { default as Highlight } from './container/highlight';
|
|
13
15
|
export { default as VersionTag } from './version/version';
|
|
14
16
|
export { default as LoginPage } from './login/loginPage';
|
|
15
17
|
export { default as Toaster, addToast } from './toast/toaster';
|
|
@@ -14,6 +14,10 @@ export { default as LanguageToggle } from './toggle/language';
|
|
|
14
14
|
export { default as Navbar } from './navbar/navbar';
|
|
15
15
|
export { default as NavItem } from './navbar/navbarItem';
|
|
16
16
|
export { default as NavDropdown } from './navbar/navbarDropdown';
|
|
17
|
+
// Containers
|
|
18
|
+
export { default as PageContainer } from './container/page';
|
|
19
|
+
export { default as Highlight } from './container/highlight';
|
|
20
|
+
// Other components
|
|
17
21
|
export { default as VersionTag } from './version/version';
|
|
18
22
|
export { default as LoginPage } from './login/loginPage';
|
|
19
23
|
export { default as Toaster, addToast } from './toast/toaster';
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Language } from 'uibee/components';
|
|
3
3
|
export type NavbarProps = {
|
|
4
|
-
lang
|
|
4
|
+
lang?: Language;
|
|
5
5
|
disableLanguageToggle?: boolean;
|
|
6
6
|
onlyLogo?: boolean;
|
|
7
|
-
theme
|
|
7
|
+
theme?: string;
|
|
8
8
|
disableThemeToggle?: boolean;
|
|
9
|
-
token
|
|
9
|
+
token?: string | null;
|
|
10
10
|
disableAuthButton?: boolean;
|
|
11
|
+
profileURL?: string;
|
|
11
12
|
children: React.ReactNode;
|
|
12
13
|
};
|
|
13
|
-
export default function Navbar({ lang, onlyLogo, token, children, disableLanguageToggle, disableThemeToggle, disableAuthButton }: NavbarProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export default function Navbar({ lang, onlyLogo, token, children, disableLanguageToggle, disableThemeToggle, disableAuthButton, profileURL }: NavbarProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -11,9 +11,9 @@ function hamburgerStyle(isOpen, isSecond) {
|
|
|
11
11
|
? `top-6 ${isSecond ? 'rotate-45' : '-rotate-45'}`
|
|
12
12
|
: isSecond ? 'top-7' : 'top-4'}`;
|
|
13
13
|
}
|
|
14
|
-
export default function Navbar({ lang, onlyLogo, token, children, disableLanguageToggle, disableThemeToggle, disableAuthButton }) {
|
|
14
|
+
export default function Navbar({ lang, onlyLogo, token, children, disableLanguageToggle, disableThemeToggle, disableAuthButton, profileURL }) {
|
|
15
15
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
|
16
|
-
return (_jsx("div", { className: `${isMobileMenuOpen ? 'bg-[#181818f0]' : 'bg-[#18181899]'} backdrop-blur-xl fixed top-0 z-900 w-full`, children: _jsxs("div", { className: `flex w-full max-w-6xl m-auto p-2 transition duration-500 800px:justify-between 800px:p-4 ${isMobileMenuOpen ? 'h-screen bg-login-900/20 800px:h-20' : ''}`, children: [_jsx("div", { className: 'block h-12 p-1 800px:p-0', children: _jsx(Link, { href: '/', onClick: () => setIsMobileMenuOpen(false), children: _jsx(LogoSmall, {}) }) }), onlyLogo ? null : (_jsxs(_Fragment, { children: [_jsx("nav", { className: 'hidden 800px:flex 800px:justify-between 800px:items-center 800px:w-fill max-w-[50rem]', children: children }), _jsxs("nav", { className: 'flex w-[calc(100vw-8rem)] justify-end h-12 800px:w-fit', children: [!disableThemeToggle && _jsx(ThemeToggle, {}), !disableLanguageToggle && _jsx(LanguageToggle, { language: lang }), !disableAuthButton && _jsx(AuthButton, { token: token })] }), _jsxs("button", { className: 'w-12 h-12 relative cursor-pointer bg-none border-none 800px:hidden', onClick: () => setIsMobileMenuOpen(!isMobileMenuOpen), children: [_jsx("div", { className: hamburgerStyle(isMobileMenuOpen) }), _jsx("div", { className: hamburgerStyle(isMobileMenuOpen, true) })] }), _jsx("nav", { className: `fixed top-16 w-[calc(100%-2rem)] max-w-[35rem] mx-auto left-0 right-0 800px:hidden
|
|
16
|
+
return (_jsx("div", { className: `${isMobileMenuOpen ? 'bg-[#181818f0]' : 'bg-[#18181899]'} backdrop-blur-xl fixed top-0 z-900 w-full`, children: _jsxs("div", { className: `flex w-full max-w-6xl m-auto p-2 transition duration-500 800px:justify-between 800px:p-4 ${isMobileMenuOpen ? 'h-screen bg-login-900/20 800px:h-20' : ''}`, children: [_jsx("div", { className: 'block h-12 p-1 800px:p-0', children: _jsx(Link, { href: '/', onClick: () => setIsMobileMenuOpen(false), children: _jsx(LogoSmall, {}) }) }), onlyLogo ? null : (_jsxs(_Fragment, { children: [_jsx("nav", { className: 'hidden 800px:flex 800px:justify-between 800px:items-center 800px:w-fill max-w-[50rem]', children: children }), _jsxs("nav", { className: 'flex w-[calc(100vw-8rem)] justify-end h-12 800px:w-fit', children: [!disableThemeToggle && _jsx(ThemeToggle, {}), !disableLanguageToggle && _jsx(LanguageToggle, { language: lang }), !disableAuthButton && _jsx(AuthButton, { token: token, profileURL: profileURL })] }), _jsxs("button", { className: 'w-12 h-12 relative cursor-pointer bg-none border-none 800px:hidden', onClick: () => setIsMobileMenuOpen(!isMobileMenuOpen), children: [_jsx("div", { className: hamburgerStyle(isMobileMenuOpen) }), _jsx("div", { className: hamburgerStyle(isMobileMenuOpen, true) })] }), _jsx("nav", { className: `fixed top-16 w-[calc(100%-2rem)] max-w-[35rem] mx-auto left-0 right-0 800px:hidden
|
|
17
17
|
transition-all duration-500 ease-in-out overflow-hidden
|
|
18
18
|
${isMobileMenuOpen ? 'max-h-[calc(100vh-4rem)] opacity-100' : 'max-h-0 opacity-0'}`, onClick: () => setIsMobileMenuOpen(false), children: React.Children.map(children, (child, index) => (_jsx("div", { className: `transition-all duration-500 ease-out ${isMobileMenuOpen
|
|
19
19
|
? 'opacity-100 transform translate-y-0'
|
|
@@ -21,11 +21,19 @@ export default function Navbar({ lang, onlyLogo, token, children, disableLanguag
|
|
|
21
21
|
transitionDelay: isMobileMenuOpen ? `${index * 80}ms` : '0ms'
|
|
22
22
|
}, children: child }, index))) })] }))] }) }));
|
|
23
23
|
}
|
|
24
|
-
function AuthButton({ token }) {
|
|
25
|
-
return (_jsx("div", { className: 'rounded-[0.3rem] hover:bg-[#6464641a] h-12 w-12', children: token ? (_jsx(Link, { href: '/api/logout', prefetch: false, onClick: (e) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
function AuthButton({ token, profileURL }) {
|
|
25
|
+
return (_jsx("div", { className: 'rounded-[0.3rem] hover:bg-[#6464641a] h-12 w-12', children: token ? (_jsxs(_Fragment, { children: [_jsx(Link, { href: '/api/logout', prefetch: false, onClick: (e) => {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
window.location.href = '/api/logout';
|
|
28
|
+
}, className: 'grid items-center justify-center h-full w-full', children: _jsx(LogOut, { size: 24 }) }), profileURL &&
|
|
29
|
+
_jsx(Link, { href: profileURL, className: 'grid items-center justify-center h-full w-full', children: _jsx("div", { className: `relative w-[30px] h-5
|
|
30
|
+
before:content-[""] before:absolute before:top-0 before:left-1/2 before:-translate-x-1/2
|
|
31
|
+
before:w-[10px] before:h-[10px] before:border-2 before:border-login-50
|
|
32
|
+
before:rounded-full before:bg-transparent
|
|
33
|
+
after:content-[""] after:absolute after:bottom-0 after:left-1/2 after:-translate-x-1/2
|
|
34
|
+
after:w-[18px] after:h-2 after:border-2 after:border-login-50
|
|
35
|
+
after:rounded-t-[22px] after:border-b-0 after:bg-transparent
|
|
36
|
+
` }) })] })) : (_jsx(Link, { href: '/api/login', className: 'grid items-center justify-center h-full w-full', children: _jsx("div", { className: `relative w-[30px] h-5
|
|
29
37
|
before:content-[""] before:absolute before:top-0 before:left-1/2 before:-translate-x-1/2
|
|
30
38
|
before:w-[10px] before:h-[10px] before:border-2 before:border-login-50
|
|
31
39
|
before:rounded-full before:bg-transparent
|
|
@@ -5,7 +5,7 @@ import { getCookie, setCookie } from '../../utils/cookies/cookies';
|
|
|
5
5
|
import { useRouter } from 'next/navigation';
|
|
6
6
|
import { Globe } from 'lucide-react';
|
|
7
7
|
export default function LanguageToggle({ language }) {
|
|
8
|
-
const [lang, setLang] = useState(language);
|
|
8
|
+
const [lang, setLang] = useState(language || 'en');
|
|
9
9
|
const [jump, setJump] = useState(false);
|
|
10
10
|
const router = useRouter();
|
|
11
11
|
useEffect(() => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uibee",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.2",
|
|
4
4
|
"description": "Shared components, functions and hooks for reuse across Login projects",
|
|
5
5
|
"homepage": "https://github.com/Login-Linjeforening-for-IT/uibee#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -36,23 +36,23 @@
|
|
|
36
36
|
"react": "^19.1.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@eslint/eslintrc": "^3.3.
|
|
40
|
-
"@next/eslint-plugin-next": "16.0.
|
|
41
|
-
"@stylistic/eslint-plugin": "^5.
|
|
42
|
-
"@tailwindcss/postcss": "^4.1.
|
|
43
|
-
"@types/node": "^24.
|
|
44
|
-
"@types/react": "19.2.
|
|
45
|
-
"eslint": "^9.
|
|
46
|
-
"glob": "^
|
|
39
|
+
"@eslint/eslintrc": "^3.3.3",
|
|
40
|
+
"@next/eslint-plugin-next": "16.0.6",
|
|
41
|
+
"@stylistic/eslint-plugin": "^5.6.1",
|
|
42
|
+
"@tailwindcss/postcss": "^4.1.17",
|
|
43
|
+
"@types/node": "^24.10.1",
|
|
44
|
+
"@types/react": "19.2.7",
|
|
45
|
+
"eslint": "^9.39.1",
|
|
46
|
+
"glob": "^13.0.0",
|
|
47
47
|
"postcss": "^8.5.6",
|
|
48
|
-
"tailwindcss": "^4.1.
|
|
48
|
+
"tailwindcss": "^4.1.17",
|
|
49
49
|
"ts-node": "^10.9.2",
|
|
50
|
-
"typescript": "^5.9.
|
|
51
|
-
"typescript-eslint": "^8.
|
|
50
|
+
"typescript": "^5.9.3",
|
|
51
|
+
"typescript-eslint": "^8.48.0"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"lucide-react": "^0.
|
|
55
|
-
"next": "16.0.
|
|
54
|
+
"lucide-react": "^0.555.0",
|
|
55
|
+
"next": "16.0.6",
|
|
56
56
|
"react": "19.2.0",
|
|
57
57
|
"react-dom": "19.2.0"
|
|
58
58
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function PageContainer({ title, children }: { title: string; children: React.ReactNode }) {
|
|
1
|
+
export default function PageContainer({ title, children }: { title: string; children: React.ReactNode }) {
|
|
2
2
|
return (
|
|
3
3
|
<div className='w-full page-container'>
|
|
4
4
|
<div className='flex flex-col col-start-3'>
|
package/src/components/index.ts
CHANGED
|
@@ -18,6 +18,11 @@ export { default as Navbar } from './navbar/navbar'
|
|
|
18
18
|
export { default as NavItem } from './navbar/navbarItem'
|
|
19
19
|
export { default as NavDropdown } from './navbar/navbarDropdown'
|
|
20
20
|
|
|
21
|
+
// Containers
|
|
22
|
+
export { default as PageContainer} from './container/page'
|
|
23
|
+
export { default as Highlight } from './container/highlight'
|
|
24
|
+
|
|
25
|
+
// Other components
|
|
21
26
|
export { default as VersionTag } from './version/version'
|
|
22
27
|
export { default as LoginPage } from './login/loginPage'
|
|
23
|
-
export { default as Toaster, addToast } from './toast/toaster'
|
|
28
|
+
export { default as Toaster, addToast } from './toast/toaster'
|
|
@@ -18,13 +18,14 @@ function hamburgerStyle (isOpen: boolean, isSecond?: boolean) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export type NavbarProps = {
|
|
21
|
-
lang
|
|
21
|
+
lang?: Language
|
|
22
22
|
disableLanguageToggle?: boolean
|
|
23
23
|
onlyLogo?: boolean
|
|
24
|
-
theme
|
|
24
|
+
theme?: string
|
|
25
25
|
disableThemeToggle?: boolean
|
|
26
|
-
token
|
|
26
|
+
token?: string | null
|
|
27
27
|
disableAuthButton?: boolean
|
|
28
|
+
profileURL?: string
|
|
28
29
|
children: React.ReactNode
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -35,7 +36,8 @@ export default function Navbar({
|
|
|
35
36
|
children,
|
|
36
37
|
disableLanguageToggle,
|
|
37
38
|
disableThemeToggle,
|
|
38
|
-
disableAuthButton
|
|
39
|
+
disableAuthButton,
|
|
40
|
+
profileURL
|
|
39
41
|
}: NavbarProps) {
|
|
40
42
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false)
|
|
41
43
|
|
|
@@ -65,7 +67,7 @@ export default function Navbar({
|
|
|
65
67
|
<nav className='flex w-[calc(100vw-8rem)] justify-end h-12 800px:w-fit'>
|
|
66
68
|
{!disableThemeToggle && <ThemeToggle />}
|
|
67
69
|
{!disableLanguageToggle && <LanguageToggle language={lang} />}
|
|
68
|
-
{!disableAuthButton && <AuthButton token={token} />}
|
|
70
|
+
{!disableAuthButton && <AuthButton token={token} profileURL={profileURL} />}
|
|
69
71
|
</nav>
|
|
70
72
|
|
|
71
73
|
{/* Mobile Menu Button */}
|
|
@@ -105,21 +107,39 @@ export default function Navbar({
|
|
|
105
107
|
)
|
|
106
108
|
}
|
|
107
109
|
|
|
108
|
-
function AuthButton({ token }: { token
|
|
110
|
+
function AuthButton({ token, profileURL }: { token?: string | null, profileURL?: string }) {
|
|
109
111
|
return (
|
|
110
112
|
<div className='rounded-[0.3rem] hover:bg-[#6464641a] h-12 w-12'>
|
|
111
113
|
{token ? (
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
e
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
114
|
+
<>
|
|
115
|
+
<Link
|
|
116
|
+
href='/api/logout'
|
|
117
|
+
prefetch={false}
|
|
118
|
+
onClick={(e) => {
|
|
119
|
+
e.preventDefault()
|
|
120
|
+
window.location.href = '/api/logout'
|
|
121
|
+
}}
|
|
122
|
+
className='grid items-center justify-center h-full w-full'
|
|
123
|
+
>
|
|
124
|
+
<LogOut size={24} />
|
|
125
|
+
</Link>
|
|
126
|
+
{profileURL &&
|
|
127
|
+
<Link
|
|
128
|
+
href={profileURL}
|
|
129
|
+
className='grid items-center justify-center h-full w-full'
|
|
130
|
+
>
|
|
131
|
+
<div className={`relative w-[30px] h-5
|
|
132
|
+
before:content-[""] before:absolute before:top-0 before:left-1/2 before:-translate-x-1/2
|
|
133
|
+
before:w-[10px] before:h-[10px] before:border-2 before:border-login-50
|
|
134
|
+
before:rounded-full before:bg-transparent
|
|
135
|
+
after:content-[""] after:absolute after:bottom-0 after:left-1/2 after:-translate-x-1/2
|
|
136
|
+
after:w-[18px] after:h-2 after:border-2 after:border-login-50
|
|
137
|
+
after:rounded-t-[22px] after:border-b-0 after:bg-transparent
|
|
138
|
+
`}
|
|
139
|
+
/>
|
|
140
|
+
</Link>
|
|
141
|
+
}
|
|
142
|
+
</>
|
|
123
143
|
) : (
|
|
124
144
|
<Link
|
|
125
145
|
href='/api/login'
|
|
@@ -6,8 +6,8 @@ import { useRouter } from 'next/navigation'
|
|
|
6
6
|
import { Language } from 'uibee/components'
|
|
7
7
|
import { Globe } from 'lucide-react'
|
|
8
8
|
|
|
9
|
-
export default function LanguageToggle({language}: {language
|
|
10
|
-
const [lang, setLang] = useState<Language>(language)
|
|
9
|
+
export default function LanguageToggle({language}: {language?: Language}) {
|
|
10
|
+
const [lang, setLang] = useState<Language>(language || 'en')
|
|
11
11
|
const [jump, setJump] = useState(false)
|
|
12
12
|
|
|
13
13
|
const router = useRouter()
|