uibee 2.3.1 → 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 CHANGED
@@ -1,4 +1,4 @@
1
- /*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */
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
  }
@@ -0,0 +1,4 @@
1
+ export default function Highlight({ children, className }: {
2
+ children: React.ReactNode;
3
+ className?: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export default function Highlight({ children, className }) {
3
+ return _jsx("div", { className: `highlighted-section ${className ?? ''}`, children: children });
4
+ }
@@ -10,7 +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';
16
- export { default as PageContainer } from './container/page';
@@ -14,8 +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';
17
20
  // Other components
18
21
  export { default as VersionTag } from './version/version';
19
22
  export { default as LoginPage } from './login/loginPage';
20
23
  export { default as Toaster, addToast } from './toast/toaster';
21
- export { default as PageContainer } from './container/page';
@@ -1,13 +1,14 @@
1
1
  import React from 'react';
2
2
  import { Language } from 'uibee/components';
3
3
  export type NavbarProps = {
4
- lang: Language;
4
+ lang?: Language;
5
5
  disableLanguageToggle?: boolean;
6
6
  onlyLogo?: boolean;
7
- theme: string;
7
+ theme?: string;
8
8
  disableThemeToggle?: boolean;
9
- token: string | null;
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
- e.preventDefault();
27
- window.location.href = '/api/logout';
28
- }, className: 'grid items-center justify-center h-full w-full', children: _jsx(LogOut, { size: 24 }) })) : (_jsx(Link, { href: '/api/login', className: 'grid items-center justify-center h-full w-full', children: _jsx("div", { className: `relative w-[30px] h-5
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
@@ -1,4 +1,4 @@
1
1
  import { Language } from 'uibee/components';
2
2
  export default function LanguageToggle({ language }: {
3
- language: Language;
3
+ language?: Language;
4
4
  }): import("react/jsx-runtime").JSX.Element;
@@ -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.1",
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.1",
40
- "@next/eslint-plugin-next": "16.0.0",
41
- "@stylistic/eslint-plugin": "^5.4.0",
42
- "@tailwindcss/postcss": "^4.1.13",
43
- "@types/node": "^24.5.2",
44
- "@types/react": "19.2.2",
45
- "eslint": "^9.36.0",
46
- "glob": "^11.0.3",
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.13",
48
+ "tailwindcss": "^4.1.17",
49
49
  "ts-node": "^10.9.2",
50
- "typescript": "^5.9.2",
51
- "typescript-eslint": "^8.44.1"
50
+ "typescript": "^5.9.3",
51
+ "typescript-eslint": "^8.48.0"
52
52
  },
53
53
  "dependencies": {
54
- "lucide-react": "^0.544.0",
55
- "next": "16.0.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
  }
@@ -0,0 +1,3 @@
1
+ export default function Highlight({ children, className }: { children: React.ReactNode, className?: string }) {
2
+ return <div className={`highlighted-section ${className ?? ''}`}>{children}</div>
3
+ }
@@ -18,8 +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
+
21
25
  // Other components
22
26
  export { default as VersionTag } from './version/version'
23
27
  export { default as LoginPage } from './login/loginPage'
24
28
  export { default as Toaster, addToast } from './toast/toaster'
25
- export { default as PageContainer} from './container/page'
@@ -18,13 +18,14 @@ function hamburgerStyle (isOpen: boolean, isSecond?: boolean) {
18
18
  }
19
19
 
20
20
  export type NavbarProps = {
21
- lang: Language
21
+ lang?: Language
22
22
  disableLanguageToggle?: boolean
23
23
  onlyLogo?: boolean
24
- theme: string
24
+ theme?: string
25
25
  disableThemeToggle?: boolean
26
- token: string | null
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: string | null }) {
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
- <Link
113
- href='/api/logout'
114
- prefetch={false}
115
- onClick={(e) => {
116
- e.preventDefault()
117
- window.location.href = '/api/logout'
118
- }}
119
- className='grid items-center justify-center h-full w-full'
120
- >
121
- <LogOut size={24} />
122
- </Link>
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: 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()