oneslash-design-system 1.1.24 → 1.1.26
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/components/button.tsx +13 -17
- package/components/iconButton.tsx +17 -7
- package/components/loadingScreen.tsx +16 -4
- package/components/menuItem.tsx +30 -30
- package/components/popover.tsx +1 -1
- package/components/textField.tsx +13 -1
- package/dist/components/button.d.ts +2 -1
- package/dist/components/button.jsx +10 -16
- package/dist/components/checkBox.jsx +3 -3
- package/dist/components/iconButton.d.ts +2 -1
- package/dist/components/iconButton.jsx +20 -14
- package/dist/components/loadingScreen.d.ts +5 -1
- package/dist/components/loadingScreen.jsx +9 -4
- package/dist/components/menuItem.d.ts +2 -1
- package/dist/components/menuItem.jsx +10 -15
- package/dist/components/popover.jsx +1 -1
- package/dist/components/tab.jsx +1 -1
- package/dist/components/tag.d.ts +1 -1
- package/dist/components/textField.d.ts +2 -1
- package/dist/components/textField.jsx +14 -6
- package/dist/designTokens.js +2 -2
- package/dist/output.css +54 -30
- package/package.json +1 -1
package/components/button.tsx
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import React, { useState, useEffect, useCallback } from 'react';
|
|
3
3
|
|
|
4
|
-
interface ButtonProps{
|
|
4
|
+
interface ButtonProps {
|
|
5
5
|
size: 'small' | 'medium' | 'large';
|
|
6
6
|
type: 'primary' | 'secondary' | 'tertiary' | 'textOnly';
|
|
7
7
|
state: 'enabled' | 'hovered' | 'focused' | 'disabled';
|
|
8
8
|
label: string;
|
|
9
9
|
decoIcon?: string;
|
|
10
10
|
actionIcon?: string;
|
|
11
|
-
onClickButton?: any;
|
|
11
|
+
onClickButton?: any;
|
|
12
12
|
onClickActionIcon?: () => void;
|
|
13
|
+
className?: string;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
type IconType = React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
@@ -23,12 +24,12 @@ export default function Button({
|
|
|
23
24
|
actionIcon,
|
|
24
25
|
onClickButton,
|
|
25
26
|
onClickActionIcon,
|
|
27
|
+
className = '',
|
|
26
28
|
}: ButtonProps) {
|
|
27
29
|
const [isHovered, setIsHovered] = useState(false);
|
|
28
30
|
const [IconLeft, setIconLeft] = useState<IconType | null>(null);
|
|
29
31
|
const [IconRight, setIconRight] = useState<IconType | null>(null);
|
|
30
32
|
|
|
31
|
-
// Import icon dynamically
|
|
32
33
|
const loadIcon = useCallback(async (iconName?: string) => {
|
|
33
34
|
if (!iconName) return null;
|
|
34
35
|
try {
|
|
@@ -53,21 +54,18 @@ export default function Button({
|
|
|
53
54
|
fetchIcons();
|
|
54
55
|
}, [decoIcon, actionIcon, loadIcon]);
|
|
55
56
|
|
|
56
|
-
// Define classes for size
|
|
57
57
|
const sizeClasses = {
|
|
58
58
|
large: 'text-body1 p-2',
|
|
59
59
|
medium: 'text-body1 p-1',
|
|
60
60
|
small: 'text-body2 p-1',
|
|
61
61
|
}[size];
|
|
62
62
|
|
|
63
|
-
// Define icon size classes
|
|
64
63
|
const sizeIcon = {
|
|
65
64
|
large: 'w-6 h-6',
|
|
66
65
|
medium: 'w-5 h-5',
|
|
67
66
|
small: 'w-4 h-4',
|
|
68
67
|
}[size];
|
|
69
68
|
|
|
70
|
-
// Define classes for button types
|
|
71
69
|
const baseTypeClasses = {
|
|
72
70
|
primary: 'bg-light-accent-main dark:bg-dark-accent-main text-light-text-primary dark:text-dark-text-contrast',
|
|
73
71
|
secondary: 'bg-light-secondary-main dark:bg-dark-secondary-main text-light-text-primary dark:text-dark-text-primary',
|
|
@@ -82,7 +80,6 @@ export default function Button({
|
|
|
82
80
|
textOnly: 'hover:bg-light-background-accent100 hover:dark:bg-dark-background-accent100',
|
|
83
81
|
}[type];
|
|
84
82
|
|
|
85
|
-
// State classes
|
|
86
83
|
const stateClasses = {
|
|
87
84
|
enabled: 'cursor-pointer',
|
|
88
85
|
focused: 'ring-2 ring-offset-4 ring-offset-light-background-default dark:ring-offset-dark-background-default ring-light-accent-main dark:ring-dark-accent-main',
|
|
@@ -91,28 +88,27 @@ export default function Button({
|
|
|
91
88
|
: 'cursor-not-allowed text-light-text-disabled dark:text-dark-text-disabled bg-light-actionBackground-disabled dark:bg-dark-actionBackground-disabled',
|
|
92
89
|
};
|
|
93
90
|
|
|
94
|
-
// Build the button classes dynamically
|
|
95
91
|
const buttonClasses = `
|
|
96
|
-
flex flex-row
|
|
92
|
+
flex flex-row items-center rounded-[8px] transition-colors duration-200 ease-in-out justify-between
|
|
97
93
|
${sizeClasses}
|
|
98
94
|
${state === 'enabled' ? baseTypeClasses : ''}
|
|
99
95
|
${state === 'focused' ? stateClasses.focused : ''}
|
|
100
96
|
${state === 'disabled' ? stateClasses.disabled : baseTypeClasses}
|
|
101
97
|
${state !== 'disabled' && isHovered ? hoverTypeClasses : ''}
|
|
102
|
-
|
|
98
|
+
${className}
|
|
99
|
+
`;
|
|
103
100
|
|
|
104
101
|
return (
|
|
105
102
|
<button
|
|
106
|
-
className={buttonClasses}
|
|
103
|
+
className={buttonClasses}
|
|
107
104
|
onMouseEnter={() => { if (state !== 'disabled') setIsHovered(true); }}
|
|
108
105
|
onMouseLeave={() => { if (state !== 'disabled') setIsHovered(false); }}
|
|
109
|
-
onClick={onClickButton}
|
|
106
|
+
onClick={onClickButton}
|
|
110
107
|
>
|
|
111
|
-
{IconLeft
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
{label}
|
|
108
|
+
{/* Group IconLeft and label in a flex container for left alignment */}
|
|
109
|
+
<div className="flex items-center space-x-2">
|
|
110
|
+
{IconLeft && <IconLeft className={sizeIcon} />}
|
|
111
|
+
<div className="whitespace-nowrap overflow-hidden truncate">{label}</div>
|
|
116
112
|
</div>
|
|
117
113
|
{IconRight && (
|
|
118
114
|
<div onClick={onClickActionIcon} className="cursor-pointer">
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import * as HeroIcons24 from '@heroicons/react/24/outline';
|
|
4
4
|
import * as HeroIcons20 from '@heroicons/react/20/solid';
|
|
5
|
+
import { LoadingSmall } from './loadingScreen';
|
|
5
6
|
|
|
6
7
|
interface IconButtonProps {
|
|
7
8
|
color: "primary" | "secondary" | "tertiary" | "iconOnly";
|
|
@@ -9,6 +10,7 @@ interface IconButtonProps {
|
|
|
9
10
|
size: "large" | "medium" | "small";
|
|
10
11
|
iconName: keyof typeof HeroIcons24 & keyof typeof HeroIcons20;
|
|
11
12
|
onClick?: any;
|
|
13
|
+
loading?: boolean;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
type IconType = React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
@@ -19,6 +21,7 @@ export default function IconButton({
|
|
|
19
21
|
size,
|
|
20
22
|
iconName,
|
|
21
23
|
onClick,
|
|
24
|
+
loading = false, // Default to false
|
|
22
25
|
}: IconButtonProps) {
|
|
23
26
|
const [isHovered, setIsHovered] = useState(false);
|
|
24
27
|
|
|
@@ -41,7 +44,7 @@ export default function IconButton({
|
|
|
41
44
|
};
|
|
42
45
|
|
|
43
46
|
// Base classes (padding and corner radius)
|
|
44
|
-
const baseClasses = `${sizeClasses[size]} rounded-[8px] leading-none`;
|
|
47
|
+
const baseClasses = `${sizeClasses[size]} rounded-[8px] leading-none relative`;
|
|
45
48
|
|
|
46
49
|
// Background color
|
|
47
50
|
const bgColor = color === 'primary'
|
|
@@ -59,7 +62,7 @@ export default function IconButton({
|
|
|
59
62
|
? 'hover:bg-light-secondary-dark hover:dark:bg-dark-secondary-dark' // Secondary
|
|
60
63
|
: color === 'tertiary'
|
|
61
64
|
? 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200' // Tertiary
|
|
62
|
-
: 'hover:bg-light-background-
|
|
65
|
+
: 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200'; // iconOnly
|
|
63
66
|
|
|
64
67
|
// Icon color
|
|
65
68
|
const iconColor = color === 'primary'
|
|
@@ -70,8 +73,10 @@ export default function IconButton({
|
|
|
70
73
|
? 'text-light-text-primary dark:text-dark-text-primary' // Tertiary
|
|
71
74
|
: 'text-light-text-primary dark:text-dark-text-primary'; // iconOnly
|
|
72
75
|
|
|
73
|
-
//
|
|
74
|
-
const stateClasses =
|
|
76
|
+
// State classes, including loading
|
|
77
|
+
const stateClasses = loading
|
|
78
|
+
? 'cursor-wait' // Show a waiting cursor during loading
|
|
79
|
+
: state === 'disabled'
|
|
75
80
|
? 'cursor-not-allowed opacity-50'
|
|
76
81
|
: state === 'selected'
|
|
77
82
|
? 'cursor-pointer ring-2 ring-offset-2 ring-blue-500'
|
|
@@ -81,13 +86,18 @@ export default function IconButton({
|
|
|
81
86
|
|
|
82
87
|
return (
|
|
83
88
|
<button
|
|
84
|
-
className={`${baseClasses} ${bgColor} ${iconColor} ${bgColorHover} ${stateClasses} transition-colors duration-200 ease-in-out`}
|
|
85
|
-
disabled={state === 'disabled'}
|
|
89
|
+
className={`${baseClasses} ${bgColor} ${iconColor} ${bgColorHover} ${stateClasses} transition-colors duration-200 ease-in-out flex items-center justify-center`}
|
|
90
|
+
disabled={state === 'disabled' || loading} // Disable button during loading
|
|
86
91
|
onMouseEnter={() => setIsHovered(true)}
|
|
87
92
|
onMouseLeave={() => setIsHovered(false)}
|
|
88
93
|
onClick={onClick}
|
|
94
|
+
aria-label={loading ? 'Loading' : 'Reload'}
|
|
89
95
|
>
|
|
90
|
-
{
|
|
96
|
+
{loading ? (
|
|
97
|
+
<LoadingSmall size={size} /> // Pass the size prop to match the icon
|
|
98
|
+
) : (
|
|
99
|
+
Icon && <Icon className={iconSizeClasses[size]} /> // Show icon when not loading
|
|
100
|
+
)}
|
|
91
101
|
</button>
|
|
92
102
|
);
|
|
93
103
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
|
|
4
|
+
interface LoadingSmallProps {
|
|
5
|
+
size?: 'large' | 'medium' | 'small'; // Match IconButton sizes
|
|
6
|
+
}
|
|
7
|
+
|
|
4
8
|
export default function LoadingScreen() {
|
|
5
9
|
return (
|
|
6
10
|
<div className="flex justify-center items-center h-full w-full min-h-[200px]">
|
|
@@ -9,10 +13,18 @@ export default function LoadingScreen() {
|
|
|
9
13
|
);
|
|
10
14
|
};
|
|
11
15
|
|
|
12
|
-
export function LoadingSmall() {
|
|
16
|
+
export function LoadingSmall({ size = 'medium' }: LoadingSmallProps) {
|
|
17
|
+
const spinnerSizeClasses = {
|
|
18
|
+
large: 'w-6 h-6 border-2', // 24px, border-2 for proportional thickness
|
|
19
|
+
medium: 'w-6 h-6 border-2', // 24px, border-2
|
|
20
|
+
small: 'w-5 h-5 border-2', // 20px, slightly thinner border
|
|
21
|
+
};
|
|
22
|
+
|
|
13
23
|
return (
|
|
14
|
-
<div className="flex justify-center items-center
|
|
15
|
-
<div
|
|
24
|
+
<div className="flex justify-center items-center">
|
|
25
|
+
<div
|
|
26
|
+
className={`border-t-transparent border-light-accent-main rounded-full animate-spin ${spinnerSizeClasses[size]}`}
|
|
27
|
+
/>
|
|
16
28
|
</div>
|
|
17
29
|
);
|
|
18
|
-
}
|
|
30
|
+
}
|
package/components/menuItem.tsx
CHANGED
|
@@ -13,16 +13,18 @@ interface MenuItemProps {
|
|
|
13
13
|
label: string;
|
|
14
14
|
isSelected?: boolean;
|
|
15
15
|
onClick?: any;
|
|
16
|
+
className?: string;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export default function MenuItem({
|
|
19
|
-
href
|
|
20
|
+
href,
|
|
20
21
|
iconName,
|
|
21
22
|
userHandle,
|
|
22
23
|
userImgUrl,
|
|
23
24
|
label,
|
|
24
25
|
isSelected,
|
|
25
26
|
onClick,
|
|
27
|
+
className = '',
|
|
26
28
|
}: MenuItemProps) {
|
|
27
29
|
const [IconLeft, setIconLeft] = useState<IconType | null>(null);
|
|
28
30
|
|
|
@@ -47,34 +49,32 @@ export default function MenuItem({
|
|
|
47
49
|
fetchIcon();
|
|
48
50
|
}, [iconName, loadIcon]);
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
IconLeft
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
{label}
|
|
76
|
-
</span>
|
|
77
|
-
</div>
|
|
78
|
-
</NextLink>
|
|
52
|
+
const content = (
|
|
53
|
+
<div
|
|
54
|
+
className={`
|
|
55
|
+
flex items-center space-x-2 p-2 rounded-[8px] cursor-pointer justify-start transition-colors duration-200 ease-in-out
|
|
56
|
+
${isSelected
|
|
57
|
+
? 'bg-light-background-accent300 dark:bg-dark-background-accent300 hover:bg-light-background-accent200 dark:hover:bg-dark-background-accent200'
|
|
58
|
+
: 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200'}
|
|
59
|
+
${className}
|
|
60
|
+
`}
|
|
61
|
+
style={{ width: '100%' }}
|
|
62
|
+
onClick={onClick}
|
|
63
|
+
>
|
|
64
|
+
{userImgUrl ? (
|
|
65
|
+
<UserImage userHandle={userHandle || ''} userImgUrl={userImgUrl} />
|
|
66
|
+
) : (
|
|
67
|
+
IconLeft && (
|
|
68
|
+
<IconLeft
|
|
69
|
+
className="w-6 h-6 text-light-text-secondary dark:text-dark-text-secondary"
|
|
70
|
+
/>
|
|
71
|
+
)
|
|
72
|
+
)}
|
|
73
|
+
<span className="whitespace-nowrap text-body1 px-2 text-light-text-primary dark:text-dark-text-primary">
|
|
74
|
+
{label}
|
|
75
|
+
</span>
|
|
76
|
+
</div>
|
|
79
77
|
);
|
|
78
|
+
|
|
79
|
+
return href ? <NextLink href={href}>{content}</NextLink> : content;
|
|
80
80
|
}
|
package/components/popover.tsx
CHANGED
|
@@ -59,7 +59,7 @@ export default function Popover({
|
|
|
59
59
|
ref={setPopoverElement}
|
|
60
60
|
style={{ ...styles.popper, display: open ? 'block' : 'none' }}
|
|
61
61
|
{...attributes.popper}
|
|
62
|
-
className="bg-light-background-
|
|
62
|
+
className="bg-light-background-accent300 dark:bg-dark-background-accent300 rounded-[8px] shadow-lg p-2"
|
|
63
63
|
role="dialog"
|
|
64
64
|
>
|
|
65
65
|
{children}
|
package/components/textField.tsx
CHANGED
|
@@ -16,6 +16,7 @@ interface TextFieldProps {
|
|
|
16
16
|
maxRows?: number;
|
|
17
17
|
disabled?: boolean;
|
|
18
18
|
error?: boolean;
|
|
19
|
+
size?: 'large' | 'medium' | 'small';
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export default function TextField({
|
|
@@ -33,16 +34,25 @@ export default function TextField({
|
|
|
33
34
|
maxRows = 6,
|
|
34
35
|
disabled = false,
|
|
35
36
|
error = false,
|
|
37
|
+
size = 'medium',
|
|
36
38
|
}: TextFieldProps) {
|
|
37
39
|
const [isFocused, setIsFocused] = useState(false);
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
// Define classes for size: text size and padding
|
|
42
|
+
const sizeClasses = {
|
|
43
|
+
large: 'text-body1 p-[7px] leading-[22px]', // body1 (16px), padding 8px(7 + border 1) height 40
|
|
44
|
+
medium: 'text-body1 p-[3px] leading-[22px]', // body1 (16px), padding 4px(3 + border 1), height 32
|
|
45
|
+
small: 'text-body2 p-[3px] leading-[18px]', // body2 (14px), padding 4px(3 + border 1), height 28
|
|
46
|
+
}[size];
|
|
47
|
+
|
|
48
|
+
const baseClasses = 'w-full border rounded-[8px]';
|
|
40
49
|
const bgColor = 'bg-light-background-default dark:bg-dark-background-default transition-colors duration-200 ease-in-out';
|
|
41
50
|
const borderColor = 'border-light-outlinedBorder-active dark:border-dark-outlinedBorder-active';
|
|
42
51
|
const containerClasses = `
|
|
43
52
|
${bgColor}
|
|
44
53
|
${borderColor}
|
|
45
54
|
${baseClasses}
|
|
55
|
+
${sizeClasses}
|
|
46
56
|
${disabled ? 'bg-gray-200 cursor-not-allowed' : ''}
|
|
47
57
|
${error ? 'border-red-500 focus:ring-red-500' : ''}
|
|
48
58
|
${isFocused ? 'focus:border-light-accent-main focus:dark:border-dark-accent-main outline-none' : ''}
|
|
@@ -96,6 +106,7 @@ export default function TextField({
|
|
|
96
106
|
onKeyDown={onKeyDown}
|
|
97
107
|
autoFocus={autoFocus} // Pass autoFocus to textarea
|
|
98
108
|
disabled={disabled}
|
|
109
|
+
autoComplete="off" // Disable browser autocomplete/autofill
|
|
99
110
|
/>
|
|
100
111
|
) : (
|
|
101
112
|
<input
|
|
@@ -115,6 +126,7 @@ export default function TextField({
|
|
|
115
126
|
onKeyDown={onKeyDown}
|
|
116
127
|
autoFocus={autoFocus} // Pass autoFocus to input
|
|
117
128
|
disabled={disabled}
|
|
129
|
+
autoComplete="off" // Disable browser autocomplete/autofill
|
|
118
130
|
/>
|
|
119
131
|
)}
|
|
120
132
|
</div>
|
|
@@ -8,6 +8,7 @@ interface ButtonProps {
|
|
|
8
8
|
actionIcon?: string;
|
|
9
9
|
onClickButton?: any;
|
|
10
10
|
onClickActionIcon?: () => void;
|
|
11
|
+
className?: string;
|
|
11
12
|
}
|
|
12
|
-
export default function Button({ size, type, state, label, decoIcon, actionIcon, onClickButton, onClickActionIcon, }: ButtonProps): React.JSX.Element;
|
|
13
|
+
export default function Button({ size, type, state, label, decoIcon, actionIcon, onClickButton, onClickActionIcon, className, }: ButtonProps): React.JSX.Element;
|
|
13
14
|
export {};
|
|
@@ -38,11 +38,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
38
38
|
import React, { useState, useEffect, useCallback } from 'react';
|
|
39
39
|
export default function Button(_a) {
|
|
40
40
|
var _this = this;
|
|
41
|
-
var size = _a.size, type = _a.type, state = _a.state, label = _a.label, decoIcon = _a.decoIcon, actionIcon = _a.actionIcon, onClickButton = _a.onClickButton, onClickActionIcon = _a.onClickActionIcon;
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
// Import icon dynamically
|
|
41
|
+
var size = _a.size, type = _a.type, state = _a.state, label = _a.label, decoIcon = _a.decoIcon, actionIcon = _a.actionIcon, onClickButton = _a.onClickButton, onClickActionIcon = _a.onClickActionIcon, _b = _a.className, className = _b === void 0 ? '' : _b;
|
|
42
|
+
var _c = useState(false), isHovered = _c[0], setIsHovered = _c[1];
|
|
43
|
+
var _d = useState(null), IconLeft = _d[0], setIconLeft = _d[1];
|
|
44
|
+
var _e = useState(null), IconRight = _e[0], setIconRight = _e[1];
|
|
46
45
|
var loadIcon = useCallback(function (iconName) { return __awaiter(_this, void 0, void 0, function () {
|
|
47
46
|
var module_1, Icon, error_1;
|
|
48
47
|
return __generator(this, function (_a) {
|
|
@@ -91,19 +90,16 @@ export default function Button(_a) {
|
|
|
91
90
|
}); };
|
|
92
91
|
fetchIcons();
|
|
93
92
|
}, [decoIcon, actionIcon, loadIcon]);
|
|
94
|
-
// Define classes for size
|
|
95
93
|
var sizeClasses = {
|
|
96
94
|
large: 'text-body1 p-2',
|
|
97
95
|
medium: 'text-body1 p-1',
|
|
98
96
|
small: 'text-body2 p-1',
|
|
99
97
|
}[size];
|
|
100
|
-
// Define icon size classes
|
|
101
98
|
var sizeIcon = {
|
|
102
99
|
large: 'w-6 h-6',
|
|
103
100
|
medium: 'w-5 h-5',
|
|
104
101
|
small: 'w-4 h-4',
|
|
105
102
|
}[size];
|
|
106
|
-
// Define classes for button types
|
|
107
103
|
var baseTypeClasses = {
|
|
108
104
|
primary: 'bg-light-accent-main dark:bg-dark-accent-main text-light-text-primary dark:text-dark-text-contrast',
|
|
109
105
|
secondary: 'bg-light-secondary-main dark:bg-dark-secondary-main text-light-text-primary dark:text-dark-text-primary',
|
|
@@ -116,7 +112,6 @@ export default function Button(_a) {
|
|
|
116
112
|
tertiary: 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200',
|
|
117
113
|
textOnly: 'hover:bg-light-background-accent100 hover:dark:bg-dark-background-accent100',
|
|
118
114
|
}[type];
|
|
119
|
-
// State classes
|
|
120
115
|
var stateClasses = {
|
|
121
116
|
enabled: 'cursor-pointer',
|
|
122
117
|
focused: 'ring-2 ring-offset-4 ring-offset-light-background-default dark:ring-offset-dark-background-default ring-light-accent-main dark:ring-dark-accent-main',
|
|
@@ -124,15 +119,14 @@ export default function Button(_a) {
|
|
|
124
119
|
? 'cursor-not-allowed text-light-text-disabled dark:text-dark-text-disabled bg-transparent'
|
|
125
120
|
: 'cursor-not-allowed text-light-text-disabled dark:text-dark-text-disabled bg-light-actionBackground-disabled dark:bg-dark-actionBackground-disabled',
|
|
126
121
|
};
|
|
127
|
-
|
|
128
|
-
var buttonClasses = "\n flex flex-row space-x-2 items-center rounded-[8px]\n ".concat(sizeClasses, "\n ").concat(state === 'enabled' ? baseTypeClasses : '', "\n ").concat(state === 'focused' ? stateClasses.focused : '', "\n ").concat(state === 'disabled' ? stateClasses.disabled : baseTypeClasses, "\n ").concat(state !== 'disabled' && isHovered ? hoverTypeClasses : '', "\n ");
|
|
122
|
+
var buttonClasses = "\n flex flex-row items-center rounded-[8px] transition-colors duration-200 ease-in-out justify-between\n ".concat(sizeClasses, "\n ").concat(state === 'enabled' ? baseTypeClasses : '', "\n ").concat(state === 'focused' ? stateClasses.focused : '', "\n ").concat(state === 'disabled' ? stateClasses.disabled : baseTypeClasses, "\n ").concat(state !== 'disabled' && isHovered ? hoverTypeClasses : '', "\n ").concat(className, "\n ");
|
|
129
123
|
return (<button className={buttonClasses} onMouseEnter={function () { if (state !== 'disabled')
|
|
130
124
|
setIsHovered(true); }} onMouseLeave={function () { if (state !== 'disabled')
|
|
131
|
-
setIsHovered(false); }} onClick={onClickButton}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
{label}
|
|
125
|
+
setIsHovered(false); }} onClick={onClickButton}>
|
|
126
|
+
{/* Group IconLeft and label in a flex container for left alignment */}
|
|
127
|
+
<div className="flex items-center space-x-2">
|
|
128
|
+
{IconLeft && <IconLeft className={sizeIcon}/>}
|
|
129
|
+
<div className="whitespace-nowrap overflow-hidden truncate">{label}</div>
|
|
136
130
|
</div>
|
|
137
131
|
{IconRight && (<div onClick={onClickActionIcon} className="cursor-pointer">
|
|
138
132
|
<IconRight className={sizeIcon}/>
|
|
@@ -11,14 +11,14 @@ export default function Checkbox(_a) {
|
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
13
|
return (<label className="flex items-center cursor-pointer">
|
|
14
|
-
<div onClick={handleToggle} className="relative flex items-center justify-center w-6 h-6 group">
|
|
14
|
+
<div onClick={handleToggle} className="relative flex items-center justify-center w-6 h-6 group transition-colors duration-200 ease-in-out">
|
|
15
15
|
{/* Circle behind the checkbox */}
|
|
16
|
-
<div className="absolute w-6 h-6 rounded-full group-hover:bg-light-action-selected dark:group-hover:bg-dark-action-selected
|
|
16
|
+
<div className="absolute w-6 h-6 rounded-full group-hover:bg-light-action-selected dark:group-hover:bg-dark-action-selected"></div>
|
|
17
17
|
|
|
18
18
|
{/* Checkbox */}
|
|
19
19
|
<div className={"relative z-10 w-4 h-4 border-2 rounded ".concat(isChecked
|
|
20
20
|
? 'bg-light-text-primary dark:bg-dark-text-primary border-none'
|
|
21
|
-
: 'border-light-text-secondary dark:border-dark-text-secondary', " flex items-center justify-center
|
|
21
|
+
: 'border-light-text-secondary dark:border-dark-text-secondary', " flex items-center justify-center")}>
|
|
22
22
|
{isChecked && (<svg className="w-3 h-3 text-light-text-contrast dark:text-dark-text-contrast" fill="none" stroke="currentColor" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
|
|
23
23
|
<path strokeWidth="2" d="M1 6l4 3 6-7"/>
|
|
24
24
|
</svg>)}
|
|
@@ -7,6 +7,7 @@ interface IconButtonProps {
|
|
|
7
7
|
size: "large" | "medium" | "small";
|
|
8
8
|
iconName: keyof typeof HeroIcons24 & keyof typeof HeroIcons20;
|
|
9
9
|
onClick?: any;
|
|
10
|
+
loading?: boolean;
|
|
10
11
|
}
|
|
11
|
-
export default function IconButton({ color, state, size, iconName, onClick, }: IconButtonProps): React.JSX.Element;
|
|
12
|
+
export default function IconButton({ color, state, size, iconName, onClick, loading, }: IconButtonProps): React.JSX.Element;
|
|
12
13
|
export {};
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import * as HeroIcons24 from '@heroicons/react/24/outline';
|
|
4
4
|
import * as HeroIcons20 from '@heroicons/react/20/solid';
|
|
5
|
+
import { LoadingSmall } from './loadingScreen';
|
|
5
6
|
export default function IconButton(_a) {
|
|
6
|
-
var color = _a.color, state = _a.state, size = _a.size, iconName = _a.iconName, onClick = _a.onClick;
|
|
7
|
-
var
|
|
7
|
+
var color = _a.color, state = _a.state, size = _a.size, iconName = _a.iconName, onClick = _a.onClick, _b = _a.loading, loading = _b === void 0 ? false : _b;
|
|
8
|
+
var _c = useState(false), isHovered = _c[0], setIsHovered = _c[1];
|
|
8
9
|
// Select icon based on size
|
|
9
10
|
var Icon = size === 'small'
|
|
10
11
|
? HeroIcons20[iconName]
|
|
@@ -21,7 +22,7 @@ export default function IconButton(_a) {
|
|
|
21
22
|
small: 'size-5', // 20px
|
|
22
23
|
};
|
|
23
24
|
// Base classes (padding and corner radius)
|
|
24
|
-
var baseClasses = "".concat(sizeClasses[size], " rounded-[8px] leading-none");
|
|
25
|
+
var baseClasses = "".concat(sizeClasses[size], " rounded-[8px] leading-none relative");
|
|
25
26
|
// Background color
|
|
26
27
|
var bgColor = color === 'primary'
|
|
27
28
|
? 'bg-light-accent-main dark:bg-dark-accent-main' // Primary
|
|
@@ -37,7 +38,7 @@ export default function IconButton(_a) {
|
|
|
37
38
|
? 'hover:bg-light-secondary-dark hover:dark:bg-dark-secondary-dark' // Secondary
|
|
38
39
|
: color === 'tertiary'
|
|
39
40
|
? 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200' // Tertiary
|
|
40
|
-
: 'hover:bg-light-background-
|
|
41
|
+
: 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200'; // iconOnly
|
|
41
42
|
// Icon color
|
|
42
43
|
var iconColor = color === 'primary'
|
|
43
44
|
? 'text-light-text-primary dark:text-dark-text-contrast' // Primary
|
|
@@ -46,15 +47,20 @@ export default function IconButton(_a) {
|
|
|
46
47
|
: color === 'tertiary'
|
|
47
48
|
? 'text-light-text-primary dark:text-dark-text-primary' // Tertiary
|
|
48
49
|
: 'text-light-text-primary dark:text-dark-text-primary'; // iconOnly
|
|
49
|
-
//
|
|
50
|
-
var stateClasses =
|
|
51
|
-
? 'cursor-
|
|
52
|
-
: state === '
|
|
53
|
-
? 'cursor-
|
|
54
|
-
:
|
|
55
|
-
? 'cursor-pointer
|
|
56
|
-
:
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
// State classes, including loading
|
|
51
|
+
var stateClasses = loading
|
|
52
|
+
? 'cursor-wait' // Show a waiting cursor during loading
|
|
53
|
+
: state === 'disabled'
|
|
54
|
+
? 'cursor-not-allowed opacity-50'
|
|
55
|
+
: state === 'selected'
|
|
56
|
+
? 'cursor-pointer ring-2 ring-offset-2 ring-blue-500'
|
|
57
|
+
: isHovered
|
|
58
|
+
? 'cursor-pointer hover:bg-opacity-75'
|
|
59
|
+
: 'cursor-pointer';
|
|
60
|
+
return (<button className={"".concat(baseClasses, " ").concat(bgColor, " ").concat(iconColor, " ").concat(bgColorHover, " ").concat(stateClasses, " transition-colors duration-200 ease-in-out flex items-center justify-center")} disabled={state === 'disabled' || loading} // Disable button during loading
|
|
61
|
+
onMouseEnter={function () { return setIsHovered(true); }} onMouseLeave={function () { return setIsHovered(false); }} onClick={onClick} aria-label={loading ? 'Loading' : 'Reload'}>
|
|
62
|
+
{loading ? (<LoadingSmall size={size}/> // Pass the size prop to match the icon
|
|
63
|
+
) : (Icon && <Icon className={iconSizeClasses[size]}/> // Show icon when not loading
|
|
64
|
+
)}
|
|
59
65
|
</button>);
|
|
60
66
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
interface LoadingSmallProps {
|
|
3
|
+
size?: 'large' | 'medium' | 'small';
|
|
4
|
+
}
|
|
2
5
|
export default function LoadingScreen(): React.JSX.Element;
|
|
3
|
-
export declare function LoadingSmall(): React.JSX.Element;
|
|
6
|
+
export declare function LoadingSmall({ size }: LoadingSmallProps): React.JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -6,9 +6,14 @@ export default function LoadingScreen() {
|
|
|
6
6
|
</div>);
|
|
7
7
|
}
|
|
8
8
|
;
|
|
9
|
-
export function LoadingSmall() {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
export function LoadingSmall(_a) {
|
|
10
|
+
var _b = _a.size, size = _b === void 0 ? 'medium' : _b;
|
|
11
|
+
var spinnerSizeClasses = {
|
|
12
|
+
large: 'w-6 h-6 border-2', // 24px, border-2 for proportional thickness
|
|
13
|
+
medium: 'w-6 h-6 border-2', // 24px, border-2
|
|
14
|
+
small: 'w-5 h-5 border-2', // 20px, slightly thinner border
|
|
15
|
+
};
|
|
16
|
+
return (<div className="flex justify-center items-center">
|
|
17
|
+
<div className={"border-t-transparent border-light-accent-main rounded-full animate-spin ".concat(spinnerSizeClasses[size])}/>
|
|
12
18
|
</div>);
|
|
13
19
|
}
|
|
14
|
-
;
|
|
@@ -7,6 +7,7 @@ interface MenuItemProps {
|
|
|
7
7
|
label: string;
|
|
8
8
|
isSelected?: boolean;
|
|
9
9
|
onClick?: any;
|
|
10
|
+
className?: string;
|
|
10
11
|
}
|
|
11
|
-
export default function MenuItem({ href, iconName, userHandle, userImgUrl, label, isSelected, onClick, }: MenuItemProps): React.JSX.Element;
|
|
12
|
+
export default function MenuItem({ href, iconName, userHandle, userImgUrl, label, isSelected, onClick, className, }: MenuItemProps): React.JSX.Element;
|
|
12
13
|
export {};
|
|
@@ -40,9 +40,8 @@ import NextLink from 'next/link';
|
|
|
40
40
|
import UserImage from './userImage';
|
|
41
41
|
export default function MenuItem(_a) {
|
|
42
42
|
var _this = this;
|
|
43
|
-
var
|
|
43
|
+
var href = _a.href, iconName = _a.iconName, userHandle = _a.userHandle, userImgUrl = _a.userImgUrl, label = _a.label, isSelected = _a.isSelected, onClick = _a.onClick, _b = _a.className, className = _b === void 0 ? '' : _b;
|
|
44
44
|
var _c = useState(null), IconLeft = _c[0], setIconLeft = _c[1];
|
|
45
|
-
// Import icon dynamically
|
|
46
45
|
var loadIcon = useCallback(function (iconName) { return __awaiter(_this, void 0, void 0, function () {
|
|
47
46
|
var module_1, IconComponent, error_1;
|
|
48
47
|
return __generator(this, function (_a) {
|
|
@@ -84,17 +83,13 @@ export default function MenuItem(_a) {
|
|
|
84
83
|
}); };
|
|
85
84
|
fetchIcon();
|
|
86
85
|
}, [iconName, loadIcon]);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
{
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
{label}
|
|
97
|
-
</span>
|
|
98
|
-
</div>
|
|
99
|
-
</NextLink>);
|
|
86
|
+
var content = (<div className={"\n flex items-center space-x-2 p-2 rounded-[8px] cursor-pointer justify-start transition-colors duration-200 ease-in-out\n ".concat(isSelected
|
|
87
|
+
? 'bg-light-background-accent300 dark:bg-dark-background-accent300 hover:bg-light-background-accent200 dark:hover:bg-dark-background-accent200'
|
|
88
|
+
: 'hover:bg-light-background-accent200 hover:dark:bg-dark-background-accent200', "\n ").concat(className, "\n ")} style={{ width: '100%' }} onClick={onClick}>
|
|
89
|
+
{userImgUrl ? (<UserImage userHandle={userHandle || ''} userImgUrl={userImgUrl}/>) : (IconLeft && (<IconLeft className="w-6 h-6 text-light-text-secondary dark:text-dark-text-secondary"/>))}
|
|
90
|
+
<span className="whitespace-nowrap text-body1 px-2 text-light-text-primary dark:text-dark-text-primary">
|
|
91
|
+
{label}
|
|
92
|
+
</span>
|
|
93
|
+
</div>);
|
|
94
|
+
return href ? <NextLink href={href}>{content}</NextLink> : content;
|
|
100
95
|
}
|
|
@@ -45,7 +45,7 @@ export default function Popover(_a) {
|
|
|
45
45
|
if (!open || !hasMounted || !anchorEl)
|
|
46
46
|
return null;
|
|
47
47
|
// Render popover in a portal to prevent layout shifts and positioning issues
|
|
48
|
-
return createPortal(<div id={id} ref={setPopoverElement} style={__assign(__assign({}, styles.popper), { display: open ? 'block' : 'none' })} {...attributes.popper} className="bg-light-background-
|
|
48
|
+
return createPortal(<div id={id} ref={setPopoverElement} style={__assign(__assign({}, styles.popper), { display: open ? 'block' : 'none' })} {...attributes.popper} className="bg-light-background-accent300 dark:bg-dark-background-accent300 rounded-[8px] shadow-lg p-2" role="dialog">
|
|
49
49
|
{children}
|
|
50
50
|
</div>, document.body // Mounting the popover in the document body for isolation
|
|
51
51
|
);
|
package/dist/components/tab.jsx
CHANGED
|
@@ -99,7 +99,7 @@ export default function Tab(_a) {
|
|
|
99
99
|
router.push(href);
|
|
100
100
|
}
|
|
101
101
|
};
|
|
102
|
-
return (<div className={"\n flex items-center space-x-1 py-1 px-[6px] rounded-[8px] cursor-pointer justify-start transition-colors duration-200 ease-in-
|
|
102
|
+
return (<div className={"\n flex items-center space-x-1 py-1 px-[6px] rounded-[8px] cursor-pointer justify-start transition-colors duration-200 ease-in-out\n ".concat(isSelected
|
|
103
103
|
? 'bg-light-primary-dark dark:bg-dark-primary-dark text-light-text-contrast dark:text-dark-text-contrast'
|
|
104
104
|
: 'hover:bg-light-background-accent200 dark:hover:bg-dark-background-accent200', "\n ")} onClick={handleClick}>
|
|
105
105
|
{IconLeft && <IconLeft className="w-6 h-6"/>}
|
package/dist/components/tag.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ interface TagProps {
|
|
|
4
4
|
variant: 'contained' | 'textOnly';
|
|
5
5
|
size: 'medium' | 'small';
|
|
6
6
|
state?: 'enabled' | 'selected';
|
|
7
|
-
label:
|
|
7
|
+
label: React.ReactNode;
|
|
8
8
|
iconName?: keyof typeof HeroIcons;
|
|
9
9
|
onClick?: React.MouseEventHandler<HTMLDivElement>;
|
|
10
10
|
color?: 'default' | 'info';
|
|
@@ -14,7 +14,8 @@ interface TextFieldProps {
|
|
|
14
14
|
maxRows?: number;
|
|
15
15
|
disabled?: boolean;
|
|
16
16
|
error?: boolean;
|
|
17
|
+
size?: 'large' | 'medium' | 'small';
|
|
17
18
|
}
|
|
18
19
|
export default function TextField({ id, label, value, onChange, onBlur, onFocus, onKeyDown, autoFocus, // Accept the autoFocus prop with default value
|
|
19
|
-
iconLeft, iconRight, multiline, maxRows, disabled, error, }: TextFieldProps): React.JSX.Element;
|
|
20
|
+
iconLeft, iconRight, multiline, maxRows, disabled, error, size, }: TextFieldProps): React.JSX.Element;
|
|
20
21
|
export {};
|
|
@@ -2,12 +2,18 @@
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
export default function TextField(_a) {
|
|
4
4
|
var id = _a.id, label = _a.label, value = _a.value, onChange = _a.onChange, onBlur = _a.onBlur, onFocus = _a.onFocus, onKeyDown = _a.onKeyDown, _b = _a.autoFocus, autoFocus = _b === void 0 ? false : _b, // Accept the autoFocus prop with default value
|
|
5
|
-
iconLeft = _a.iconLeft, iconRight = _a.iconRight, _c = _a.multiline, multiline = _c === void 0 ? false : _c, _d = _a.maxRows, maxRows = _d === void 0 ? 6 : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.error, error = _f === void 0 ? false : _f;
|
|
6
|
-
var
|
|
7
|
-
|
|
5
|
+
iconLeft = _a.iconLeft, iconRight = _a.iconRight, _c = _a.multiline, multiline = _c === void 0 ? false : _c, _d = _a.maxRows, maxRows = _d === void 0 ? 6 : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.error, error = _f === void 0 ? false : _f, _g = _a.size, size = _g === void 0 ? 'medium' : _g;
|
|
6
|
+
var _h = useState(false), isFocused = _h[0], setIsFocused = _h[1];
|
|
7
|
+
// Define classes for size: text size and padding
|
|
8
|
+
var sizeClasses = {
|
|
9
|
+
large: 'text-body1 p-[7px] leading-[22px]', // body1 (16px), padding 8px(7 + border 1) height 40
|
|
10
|
+
medium: 'text-body1 p-[3px] leading-[22px]', // body1 (16px), padding 4px(3 + border 1), height 32
|
|
11
|
+
small: 'text-body2 p-[3px] leading-[18px]', // body2 (14px), padding 4px(3 + border 1), height 28
|
|
12
|
+
}[size];
|
|
13
|
+
var baseClasses = 'w-full border rounded-[8px]';
|
|
8
14
|
var bgColor = 'bg-light-background-default dark:bg-dark-background-default transition-colors duration-200 ease-in-out';
|
|
9
15
|
var borderColor = 'border-light-outlinedBorder-active dark:border-dark-outlinedBorder-active';
|
|
10
|
-
var containerClasses = "\n ".concat(bgColor, "\n ").concat(borderColor, "\n ").concat(baseClasses, "\n ").concat(disabled ? 'bg-gray-200 cursor-not-allowed' : '', "\n ").concat(error ? 'border-red-500 focus:ring-red-500' : '', "\n ").concat(isFocused ? 'focus:border-light-accent-main focus:dark:border-dark-accent-main outline-none' : '', "\n ").concat(!disabled && !error ? 'hover:border-light-outlinedBorder-hover' : '', "\n border-gray-300\n ");
|
|
16
|
+
var containerClasses = "\n ".concat(bgColor, "\n ").concat(borderColor, "\n ").concat(baseClasses, "\n ").concat(sizeClasses, "\n ").concat(disabled ? 'bg-gray-200 cursor-not-allowed' : '', "\n ").concat(error ? 'border-red-500 focus:ring-red-500' : '', "\n ").concat(isFocused ? 'focus:border-light-accent-main focus:dark:border-dark-accent-main outline-none' : '', "\n ").concat(!disabled && !error ? 'hover:border-light-outlinedBorder-hover' : '', "\n border-gray-300\n ");
|
|
11
17
|
var renderIconRight = function () {
|
|
12
18
|
if (React.isValidElement(iconRight)) {
|
|
13
19
|
return iconRight;
|
|
@@ -37,7 +43,8 @@ export default function TextField(_a) {
|
|
|
37
43
|
if (onBlur)
|
|
38
44
|
onBlur(e);
|
|
39
45
|
}} onKeyDown={onKeyDown} autoFocus={autoFocus} // Pass autoFocus to textarea
|
|
40
|
-
disabled={disabled}
|
|
46
|
+
disabled={disabled} autoComplete="off" // Disable browser autocomplete/autofill
|
|
47
|
+
/>) : (<input id={id} type="text" className={containerClasses} value={value} onChange={onChange} onFocus={function (e) {
|
|
41
48
|
setIsFocused(true);
|
|
42
49
|
if (onFocus)
|
|
43
50
|
onFocus(e);
|
|
@@ -46,7 +53,8 @@ export default function TextField(_a) {
|
|
|
46
53
|
if (onBlur)
|
|
47
54
|
onBlur(e);
|
|
48
55
|
}} onKeyDown={onKeyDown} autoFocus={autoFocus} // Pass autoFocus to input
|
|
49
|
-
disabled={disabled}
|
|
56
|
+
disabled={disabled} autoComplete="off" // Disable browser autocomplete/autofill
|
|
57
|
+
/>)}
|
|
50
58
|
</div>
|
|
51
59
|
{error && (<p className="mt-1 text-light-error-main text-body2">
|
|
52
60
|
This field is required
|
package/dist/designTokens.js
CHANGED
|
@@ -78,7 +78,7 @@ module.exports = {
|
|
|
78
78
|
// dark
|
|
79
79
|
dark: {
|
|
80
80
|
text: {
|
|
81
|
-
primary: '#
|
|
81
|
+
primary: '#eeeeee',
|
|
82
82
|
secondary: '#B0B0B0',
|
|
83
83
|
disabled: '#6D6D6D',
|
|
84
84
|
contrast: '#000000',
|
|
@@ -220,7 +220,7 @@ module.exports = {
|
|
|
220
220
|
weight: '400',
|
|
221
221
|
size: '12px',
|
|
222
222
|
lineHeight: '150%',
|
|
223
|
-
letterSpacing: '0.
|
|
223
|
+
letterSpacing: '0.5px',
|
|
224
224
|
},
|
|
225
225
|
alignments: {
|
|
226
226
|
left: 'left',
|
package/dist/output.css
CHANGED
|
@@ -497,6 +497,39 @@ video {
|
|
|
497
497
|
scrollbar-color: initial;
|
|
498
498
|
scrollbar-width: initial;
|
|
499
499
|
}
|
|
500
|
+
.container {
|
|
501
|
+
width: 100%;
|
|
502
|
+
}
|
|
503
|
+
@media (min-width: 640px) {
|
|
504
|
+
|
|
505
|
+
.container {
|
|
506
|
+
max-width: 640px;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
@media (min-width: 768px) {
|
|
510
|
+
|
|
511
|
+
.container {
|
|
512
|
+
max-width: 768px;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
@media (min-width: 1024px) {
|
|
516
|
+
|
|
517
|
+
.container {
|
|
518
|
+
max-width: 1024px;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
@media (min-width: 1280px) {
|
|
522
|
+
|
|
523
|
+
.container {
|
|
524
|
+
max-width: 1280px;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
@media (min-width: 1536px) {
|
|
528
|
+
|
|
529
|
+
.container {
|
|
530
|
+
max-width: 1536px;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
500
533
|
.visible {
|
|
501
534
|
visibility: visible;
|
|
502
535
|
}
|
|
@@ -582,9 +615,6 @@ video {
|
|
|
582
615
|
.h-6 {
|
|
583
616
|
height: 1.5rem;
|
|
584
617
|
}
|
|
585
|
-
.h-\[40px\] {
|
|
586
|
-
height: 40px;
|
|
587
|
-
}
|
|
588
618
|
.h-full {
|
|
589
619
|
height: 100%;
|
|
590
620
|
}
|
|
@@ -612,9 +642,6 @@ video {
|
|
|
612
642
|
.w-\[1200px\] {
|
|
613
643
|
width: 1200px;
|
|
614
644
|
}
|
|
615
|
-
.w-\[40px\] {
|
|
616
|
-
width: 40px;
|
|
617
|
-
}
|
|
618
645
|
.w-\[600px\] {
|
|
619
646
|
width: 600px;
|
|
620
647
|
}
|
|
@@ -624,9 +651,6 @@ video {
|
|
|
624
651
|
.max-w-md {
|
|
625
652
|
max-width: 28rem;
|
|
626
653
|
}
|
|
627
|
-
.flex-1 {
|
|
628
|
-
flex: 1 1 0%;
|
|
629
|
-
}
|
|
630
654
|
.transform {
|
|
631
655
|
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
|
632
656
|
}
|
|
@@ -645,6 +669,9 @@ video {
|
|
|
645
669
|
.cursor-pointer {
|
|
646
670
|
cursor: pointer;
|
|
647
671
|
}
|
|
672
|
+
.cursor-wait {
|
|
673
|
+
cursor: wait;
|
|
674
|
+
}
|
|
648
675
|
.flex-row {
|
|
649
676
|
flex-direction: row;
|
|
650
677
|
}
|
|
@@ -835,6 +862,12 @@ video {
|
|
|
835
862
|
.p-6 {
|
|
836
863
|
padding: 1.5rem;
|
|
837
864
|
}
|
|
865
|
+
.p-\[3px\] {
|
|
866
|
+
padding: 3px;
|
|
867
|
+
}
|
|
868
|
+
.p-\[7px\] {
|
|
869
|
+
padding: 7px;
|
|
870
|
+
}
|
|
838
871
|
.px-2 {
|
|
839
872
|
padding-left: 0.5rem;
|
|
840
873
|
padding-right: 0.5rem;
|
|
@@ -883,12 +916,18 @@ video {
|
|
|
883
916
|
.font-bold {
|
|
884
917
|
font-weight: 700;
|
|
885
918
|
}
|
|
919
|
+
.leading-\[18px\] {
|
|
920
|
+
line-height: 18px;
|
|
921
|
+
}
|
|
922
|
+
.leading-\[22px\] {
|
|
923
|
+
line-height: 22px;
|
|
924
|
+
}
|
|
886
925
|
.leading-none {
|
|
887
926
|
line-height: 1;
|
|
888
927
|
}
|
|
889
928
|
.text-dark-text-primary {
|
|
890
929
|
--tw-text-opacity: 1;
|
|
891
|
-
color: rgb(
|
|
930
|
+
color: rgb(238 238 238 / var(--tw-text-opacity));
|
|
892
931
|
}
|
|
893
932
|
.text-light-error-main {
|
|
894
933
|
--tw-text-opacity: 1;
|
|
@@ -956,18 +995,13 @@ video {
|
|
|
956
995
|
--tw-blur: blur(8px);
|
|
957
996
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
958
997
|
}
|
|
959
|
-
.transition-all {
|
|
960
|
-
transition-property: all;
|
|
961
|
-
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
962
|
-
transition-duration: 150ms;
|
|
963
|
-
}
|
|
964
998
|
.transition-colors {
|
|
965
999
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
966
1000
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
967
1001
|
transition-duration: 150ms;
|
|
968
1002
|
}
|
|
969
|
-
.duration-
|
|
970
|
-
transition-duration:
|
|
1003
|
+
.duration-200 {
|
|
1004
|
+
transition-duration: 200ms;
|
|
971
1005
|
}
|
|
972
1006
|
.ease-in-out {
|
|
973
1007
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -998,11 +1032,6 @@ body {
|
|
|
998
1032
|
background-color: rgb(247 247 247 / var(--tw-bg-opacity));
|
|
999
1033
|
}
|
|
1000
1034
|
|
|
1001
|
-
.hover\:bg-light-background-accent300:hover {
|
|
1002
|
-
--tw-bg-opacity: 1;
|
|
1003
|
-
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
1035
|
.hover\:bg-light-secondary-dark:hover {
|
|
1007
1036
|
--tw-bg-opacity: 1;
|
|
1008
1037
|
background-color: rgb(136 136 136 / var(--tw-bg-opacity));
|
|
@@ -1031,7 +1060,7 @@ body {
|
|
|
1031
1060
|
|
|
1032
1061
|
.dark\:border-dark-text-primary {
|
|
1033
1062
|
--tw-border-opacity: 1;
|
|
1034
|
-
border-color: rgb(
|
|
1063
|
+
border-color: rgb(238 238 238 / var(--tw-border-opacity));
|
|
1035
1064
|
}
|
|
1036
1065
|
|
|
1037
1066
|
.dark\:border-dark-text-secondary {
|
|
@@ -1096,7 +1125,7 @@ body {
|
|
|
1096
1125
|
|
|
1097
1126
|
.dark\:bg-dark-text-primary {
|
|
1098
1127
|
--tw-bg-opacity: 1;
|
|
1099
|
-
background-color: rgb(
|
|
1128
|
+
background-color: rgb(238 238 238 / var(--tw-bg-opacity));
|
|
1100
1129
|
}
|
|
1101
1130
|
|
|
1102
1131
|
.dark\:bg-dark-warning-main {
|
|
@@ -1126,7 +1155,7 @@ body {
|
|
|
1126
1155
|
|
|
1127
1156
|
.dark\:text-dark-text-primary {
|
|
1128
1157
|
--tw-text-opacity: 1;
|
|
1129
|
-
color: rgb(
|
|
1158
|
+
color: rgb(238 238 238 / var(--tw-text-opacity));
|
|
1130
1159
|
}
|
|
1131
1160
|
|
|
1132
1161
|
.dark\:text-dark-text-secondary {
|
|
@@ -1158,11 +1187,6 @@ body {
|
|
|
1158
1187
|
background-color: rgb(69 69 69 / var(--tw-bg-opacity));
|
|
1159
1188
|
}
|
|
1160
1189
|
|
|
1161
|
-
.dark\:hover\:bg-dark-background-accent300:hover {
|
|
1162
|
-
--tw-bg-opacity: 1;
|
|
1163
|
-
background-color: rgb(79 79 79 / var(--tw-bg-opacity));
|
|
1164
|
-
}
|
|
1165
|
-
|
|
1166
1190
|
.dark\:hover\:bg-dark-secondary-dark:hover {
|
|
1167
1191
|
--tw-bg-opacity: 1;
|
|
1168
1192
|
background-color: rgb(69 69 69 / var(--tw-bg-opacity));
|