omnira-ui 0.1.0
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/LICENSE +21 -0
- package/README.md +145 -0
- package/cli/omnira-init.mjs +260 -0
- package/cli/presets.mjs +386 -0
- package/components/ui/AppStoreButton/AppStoreButton.module.css +87 -0
- package/components/ui/AppStoreButton/AppStoreButton.tsx +114 -0
- package/components/ui/AppStoreButton/index.ts +2 -0
- package/components/ui/Avatar/Avatar.module.css +76 -0
- package/components/ui/Avatar/Avatar.tsx +102 -0
- package/components/ui/Avatar/index.ts +2 -0
- package/components/ui/Badge/Badge.module.css +120 -0
- package/components/ui/Badge/Badge.tsx +25 -0
- package/components/ui/Badge/index.ts +2 -0
- package/components/ui/BadgeGroup/BadgeGroup.module.css +214 -0
- package/components/ui/BadgeGroup/BadgeGroup.tsx +88 -0
- package/components/ui/BadgeGroup/index.ts +2 -0
- package/components/ui/Browser/Browser.module.css +105 -0
- package/components/ui/Browser/Browser.tsx +54 -0
- package/components/ui/Browser/index.ts +2 -0
- package/components/ui/Button/Button.module.css +188 -0
- package/components/ui/Button/Button.tsx +74 -0
- package/components/ui/Button/index.ts +2 -0
- package/components/ui/ButtonUtility/ButtonUtility.module.css +154 -0
- package/components/ui/ButtonUtility/ButtonUtility.tsx +65 -0
- package/components/ui/ButtonUtility/index.ts +2 -0
- package/components/ui/Card/Card.module.css +80 -0
- package/components/ui/Card/Card.tsx +39 -0
- package/components/ui/Card/index.ts +2 -0
- package/components/ui/Checkbox/Checkbox.module.css +92 -0
- package/components/ui/Checkbox/Checkbox.tsx +95 -0
- package/components/ui/Checkbox/index.ts +2 -0
- package/components/ui/Collapse/Collapse.module.css +60 -0
- package/components/ui/Collapse/Collapse.tsx +100 -0
- package/components/ui/Collapse/index.ts +2 -0
- package/components/ui/CreditCard/CreditCard.module.css +117 -0
- package/components/ui/CreditCard/CreditCard.tsx +86 -0
- package/components/ui/CreditCard/index.ts +2 -0
- package/components/ui/Dropdown/Dropdown.module.css +269 -0
- package/components/ui/Dropdown/Dropdown.tsx +419 -0
- package/components/ui/Dropdown/index.ts +31 -0
- package/components/ui/GridLines/GridLines.module.css +95 -0
- package/components/ui/GridLines/GridLines.tsx +10 -0
- package/components/ui/GridLines/index.ts +1 -0
- package/components/ui/Illustration/Illustration.module.css +10 -0
- package/components/ui/Illustration/Illustration.tsx +96 -0
- package/components/ui/Illustration/index.ts +2 -0
- package/components/ui/Input/Input.module.css +217 -0
- package/components/ui/Input/Input.tsx +93 -0
- package/components/ui/Input/index.ts +2 -0
- package/components/ui/Phone/Phone.module.css +104 -0
- package/components/ui/Phone/Phone.tsx +54 -0
- package/components/ui/Phone/index.ts +2 -0
- package/components/ui/PinInput/PinInput.module.css +104 -0
- package/components/ui/PinInput/PinInput.tsx +210 -0
- package/components/ui/PinInput/index.ts +1 -0
- package/components/ui/ProgressBar/ProgressBar.module.css +180 -0
- package/components/ui/ProgressBar/ProgressBar.tsx +206 -0
- package/components/ui/ProgressBar/index.ts +2 -0
- package/components/ui/QRCode/QRCode.module.css +13 -0
- package/components/ui/QRCode/QRCode.tsx +128 -0
- package/components/ui/QRCode/index.ts +2 -0
- package/components/ui/RadioButton/RadioButton.module.css +92 -0
- package/components/ui/RadioButton/RadioButton.tsx +134 -0
- package/components/ui/RadioButton/index.ts +2 -0
- package/components/ui/RadioGroup/RadioGroup.module.css +382 -0
- package/components/ui/RadioGroup/RadioGroup.tsx +292 -0
- package/components/ui/RadioGroup/index.ts +1 -0
- package/components/ui/Rating/Rating.module.css +99 -0
- package/components/ui/Rating/Rating.tsx +123 -0
- package/components/ui/Rating/index.ts +2 -0
- package/components/ui/Select/Select.module.css +371 -0
- package/components/ui/Select/Select.tsx +507 -0
- package/components/ui/Select/index.ts +2 -0
- package/components/ui/SidebarNavigation/SidebarDual.tsx +71 -0
- package/components/ui/SidebarNavigation/SidebarFeatureCard.module.css +351 -0
- package/components/ui/SidebarNavigation/SidebarFeatureCard.tsx +388 -0
- package/components/ui/SidebarNavigation/SidebarNavigation.module.css +610 -0
- package/components/ui/SidebarNavigation/SidebarParts.tsx +215 -0
- package/components/ui/SidebarNavigation/SidebarSectionDividers.tsx +46 -0
- package/components/ui/SidebarNavigation/SidebarSectionHeadings.tsx +52 -0
- package/components/ui/SidebarNavigation/SidebarSimple.tsx +46 -0
- package/components/ui/SidebarNavigation/SidebarSlim.tsx +48 -0
- package/components/ui/SidebarNavigation/index.ts +29 -0
- package/components/ui/SidebarNavigation/types.ts +27 -0
- package/components/ui/Slider/Slider.module.css +93 -0
- package/components/ui/Slider/Slider.tsx +118 -0
- package/components/ui/Slider/index.ts +2 -0
- package/components/ui/SocialButton/SocialButton.module.css +223 -0
- package/components/ui/SocialButton/SocialButton.tsx +185 -0
- package/components/ui/SocialButton/index.ts +2 -0
- package/components/ui/Tag/Tag.module.css +203 -0
- package/components/ui/Tag/Tag.tsx +161 -0
- package/components/ui/Tag/index.ts +2 -0
- package/components/ui/TextEditor/TextEditor.module.css +182 -0
- package/components/ui/TextEditor/TextEditor.tsx +323 -0
- package/components/ui/TextEditor/index.ts +1 -0
- package/components/ui/Textarea/Textarea.module.css +75 -0
- package/components/ui/Textarea/Textarea.tsx +59 -0
- package/components/ui/Textarea/index.ts +2 -0
- package/components/ui/Toggle/Toggle.module.css +118 -0
- package/components/ui/Toggle/Toggle.tsx +77 -0
- package/components/ui/Toggle/index.ts +2 -0
- package/components/ui/Tooltip/Tooltip.module.css +95 -0
- package/components/ui/Tooltip/Tooltip.tsx +55 -0
- package/components/ui/Tooltip/index.ts +2 -0
- package/components/ui/VideoPlayer/VideoPlayer.module.css +120 -0
- package/components/ui/VideoPlayer/VideoPlayer.tsx +229 -0
- package/components/ui/VideoPlayer/index.ts +2 -0
- package/lib/cn.ts +3 -0
- package/lib/copy-to-clipboard.ts +21 -0
- package/package.json +61 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
.socialButton {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
gap: 12px;
|
|
6
|
+
font-family: inherit;
|
|
7
|
+
font-weight: 600;
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
transition: all 0.3s;
|
|
10
|
+
outline: none;
|
|
11
|
+
white-space: nowrap;
|
|
12
|
+
border: 1.5px solid transparent;
|
|
13
|
+
width: 100%;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.socialButton:disabled {
|
|
17
|
+
opacity: 0.5;
|
|
18
|
+
cursor: not-allowed;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* --- Sizes --- */
|
|
22
|
+
.sm {
|
|
23
|
+
height: 40px;
|
|
24
|
+
padding: 0 16px;
|
|
25
|
+
font-size: 13px;
|
|
26
|
+
border-radius: 10px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.md {
|
|
30
|
+
height: 48px;
|
|
31
|
+
padding: 0 20px;
|
|
32
|
+
font-size: 14px;
|
|
33
|
+
border-radius: 12px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.lg {
|
|
37
|
+
height: 56px;
|
|
38
|
+
padding: 0 24px;
|
|
39
|
+
font-size: 16px;
|
|
40
|
+
border-radius: 14px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* --- Icon --- */
|
|
44
|
+
.icon {
|
|
45
|
+
display: inline-flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: center;
|
|
48
|
+
flex-shrink: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.label {
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* --- Icon only --- */
|
|
57
|
+
.iconOnly {
|
|
58
|
+
width: auto;
|
|
59
|
+
padding: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.iconOnly.sm {
|
|
63
|
+
width: 40px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.iconOnly.md {
|
|
67
|
+
width: 48px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.iconOnly.lg {
|
|
71
|
+
width: 56px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* --- Theme: Brand --- */
|
|
75
|
+
.theme-brand.social-google {
|
|
76
|
+
background: #ffffff;
|
|
77
|
+
color: #3c4043;
|
|
78
|
+
border-color: rgba(0, 0, 0, 0.1);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.theme-brand.social-google:hover:not(:disabled) {
|
|
82
|
+
background: #f8f9fa;
|
|
83
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.theme-brand.social-facebook {
|
|
87
|
+
background: #1877F2;
|
|
88
|
+
color: #ffffff;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.theme-brand.social-facebook:hover:not(:disabled) {
|
|
92
|
+
background: #166fe5;
|
|
93
|
+
box-shadow: 0 2px 8px rgba(24, 119, 242, 0.4);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.theme-brand.social-apple {
|
|
97
|
+
background: #000000;
|
|
98
|
+
color: #ffffff;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.theme-brand.social-apple:hover:not(:disabled) {
|
|
102
|
+
background: #1a1a1a;
|
|
103
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.theme-brand.social-github {
|
|
107
|
+
background: #24292f;
|
|
108
|
+
color: #ffffff;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.theme-brand.social-github:hover:not(:disabled) {
|
|
112
|
+
background: #32383f;
|
|
113
|
+
box-shadow: 0 2px 8px rgba(36, 41, 47, 0.4);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.theme-brand.social-x {
|
|
117
|
+
background: #000000;
|
|
118
|
+
color: #ffffff;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.theme-brand.social-x:hover:not(:disabled) {
|
|
122
|
+
background: #1a1a1a;
|
|
123
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.theme-brand.social-linkedin {
|
|
127
|
+
background: #0A66C2;
|
|
128
|
+
color: #ffffff;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.theme-brand.social-linkedin:hover:not(:disabled) {
|
|
132
|
+
background: #095baf;
|
|
133
|
+
box-shadow: 0 2px 8px rgba(10, 102, 194, 0.4);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.theme-brand.social-microsoft {
|
|
137
|
+
background: #ffffff;
|
|
138
|
+
color: #3c4043;
|
|
139
|
+
border-color: rgba(0, 0, 0, 0.1);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.theme-brand.social-microsoft:hover:not(:disabled) {
|
|
143
|
+
background: #f8f9fa;
|
|
144
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.theme-brand.social-discord {
|
|
148
|
+
background: #5865F2;
|
|
149
|
+
color: #ffffff;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.theme-brand.social-discord:hover:not(:disabled) {
|
|
153
|
+
background: #4752c4;
|
|
154
|
+
box-shadow: 0 2px 8px rgba(88, 101, 242, 0.4);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.theme-brand.social-slack {
|
|
158
|
+
background: #4A154B;
|
|
159
|
+
color: #ffffff;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.theme-brand.social-slack:hover:not(:disabled) {
|
|
163
|
+
background: #3b1139;
|
|
164
|
+
box-shadow: 0 2px 8px rgba(74, 21, 75, 0.4);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.theme-brand.social-figma {
|
|
168
|
+
background: #ffffff;
|
|
169
|
+
color: #3c4043;
|
|
170
|
+
border-color: rgba(0, 0, 0, 0.1);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.theme-brand.social-figma:hover:not(:disabled) {
|
|
174
|
+
background: #f8f9fa;
|
|
175
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.theme-brand.social-dribbble {
|
|
179
|
+
background: #EA4C89;
|
|
180
|
+
color: #ffffff;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.theme-brand.social-dribbble:hover:not(:disabled) {
|
|
184
|
+
background: #d63d7a;
|
|
185
|
+
box-shadow: 0 2px 8px rgba(234, 76, 137, 0.4);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.theme-brand.social-spotify {
|
|
189
|
+
background: #1DB954;
|
|
190
|
+
color: #ffffff;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.theme-brand.social-spotify:hover:not(:disabled) {
|
|
194
|
+
background: #1aa34a;
|
|
195
|
+
box-shadow: 0 2px 8px rgba(29, 185, 84, 0.4);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* --- Theme: Color --- */
|
|
199
|
+
.theme-color {
|
|
200
|
+
background: var(--color-bg-card);
|
|
201
|
+
border-color: var(--color-border-standard);
|
|
202
|
+
color: var(--color-text-primary);
|
|
203
|
+
backdrop-filter: var(--blur-standard);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.theme-color:hover:not(:disabled) {
|
|
207
|
+
background: var(--color-bg-elevated);
|
|
208
|
+
border-color: var(--color-border-medium);
|
|
209
|
+
box-shadow: var(--shadow-card-light);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* --- Theme: Gray --- */
|
|
213
|
+
.theme-gray {
|
|
214
|
+
background: var(--color-bg-secondary);
|
|
215
|
+
border-color: var(--color-border-subtle);
|
|
216
|
+
color: var(--color-text-secondary);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.theme-gray:hover:not(:disabled) {
|
|
220
|
+
background: var(--color-bg-hover);
|
|
221
|
+
border-color: var(--color-border-standard);
|
|
222
|
+
color: var(--color-text-primary);
|
|
223
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { cn } from "@/lib/cn";
|
|
5
|
+
import styles from "./SocialButton.module.css";
|
|
6
|
+
|
|
7
|
+
export type SocialProvider =
|
|
8
|
+
| "google"
|
|
9
|
+
| "facebook"
|
|
10
|
+
| "apple"
|
|
11
|
+
| "github"
|
|
12
|
+
| "x"
|
|
13
|
+
| "linkedin"
|
|
14
|
+
| "microsoft"
|
|
15
|
+
| "discord"
|
|
16
|
+
| "slack"
|
|
17
|
+
| "figma"
|
|
18
|
+
| "dribbble"
|
|
19
|
+
| "spotify";
|
|
20
|
+
|
|
21
|
+
export type SocialTheme = "brand" | "color" | "gray";
|
|
22
|
+
|
|
23
|
+
export interface SocialButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
24
|
+
social: SocialProvider;
|
|
25
|
+
theme?: SocialTheme;
|
|
26
|
+
size?: "sm" | "md" | "lg";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const SocialButton = forwardRef<HTMLButtonElement, SocialButtonProps>(
|
|
30
|
+
({ social, theme = "brand", size = "md", className, children, ...props }, ref) => {
|
|
31
|
+
const iconOnly = !children;
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<button
|
|
35
|
+
ref={ref}
|
|
36
|
+
className={cn(
|
|
37
|
+
styles.socialButton,
|
|
38
|
+
styles[`theme-${theme}`],
|
|
39
|
+
styles[`social-${social}`],
|
|
40
|
+
styles[size],
|
|
41
|
+
iconOnly ? styles.iconOnly : undefined,
|
|
42
|
+
className
|
|
43
|
+
)}
|
|
44
|
+
{...props}
|
|
45
|
+
>
|
|
46
|
+
<span className={styles.icon}>
|
|
47
|
+
<SocialIcon social={social} theme={theme} />
|
|
48
|
+
</span>
|
|
49
|
+
{children && <span className={styles.label}>{children}</span>}
|
|
50
|
+
</button>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
SocialButton.displayName = "SocialButton";
|
|
56
|
+
|
|
57
|
+
function SocialIcon({ social, theme }: { social: SocialProvider; theme: SocialTheme }) {
|
|
58
|
+
const size = 20;
|
|
59
|
+
|
|
60
|
+
switch (social) {
|
|
61
|
+
case "google":
|
|
62
|
+
return (
|
|
63
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
64
|
+
{theme === "gray" ? (
|
|
65
|
+
<path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z" fill="currentColor" />
|
|
66
|
+
) : (
|
|
67
|
+
<>
|
|
68
|
+
<path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z" fill="#4285F4" />
|
|
69
|
+
<path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853" />
|
|
70
|
+
<path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" fill="#FBBC05" />
|
|
71
|
+
<path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335" />
|
|
72
|
+
</>
|
|
73
|
+
)}
|
|
74
|
+
</svg>
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
case "facebook":
|
|
78
|
+
return (
|
|
79
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
80
|
+
<path d="M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12c0 5.99 4.388 10.954 10.125 11.854V15.47H7.078V12h3.047V9.356c0-3.007 1.792-4.668 4.533-4.668 1.312 0 2.686.234 2.686.234v2.953H15.83c-1.491 0-1.956.925-1.956 1.875V12h3.328l-.532 3.47h-2.796v8.385C19.612 22.954 24 17.99 24 12z" fill={theme === "gray" ? "currentColor" : "#1877F2"} />
|
|
81
|
+
</svg>
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
case "apple":
|
|
85
|
+
return (
|
|
86
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
87
|
+
<path d="M17.05 20.28c-.98.95-2.05.88-3.08.4-1.09-.5-2.08-.48-3.24 0-1.44.62-2.2.44-3.06-.4C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" fill={theme === "gray" ? "currentColor" : theme === "brand" ? "#000000" : "#555555"} />
|
|
88
|
+
</svg>
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
case "github":
|
|
92
|
+
return (
|
|
93
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
94
|
+
<path fillRule="evenodd" clipRule="evenodd" d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" fill={theme === "gray" ? "currentColor" : theme === "brand" ? "#181717" : "#333333"} />
|
|
95
|
+
</svg>
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
case "x":
|
|
99
|
+
return (
|
|
100
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
101
|
+
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" fill={theme === "gray" ? "currentColor" : theme === "brand" ? "#000000" : "#1D9BF0"} />
|
|
102
|
+
</svg>
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
case "linkedin":
|
|
106
|
+
return (
|
|
107
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
108
|
+
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" fill={theme === "gray" ? "currentColor" : "#0A66C2"} />
|
|
109
|
+
</svg>
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
case "microsoft":
|
|
113
|
+
return (
|
|
114
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
115
|
+
{theme === "gray" ? (
|
|
116
|
+
<>
|
|
117
|
+
<rect x="1" y="1" width="10" height="10" fill="currentColor" opacity="0.9" />
|
|
118
|
+
<rect x="13" y="1" width="10" height="10" fill="currentColor" opacity="0.7" />
|
|
119
|
+
<rect x="1" y="13" width="10" height="10" fill="currentColor" opacity="0.6" />
|
|
120
|
+
<rect x="13" y="13" width="10" height="10" fill="currentColor" opacity="0.5" />
|
|
121
|
+
</>
|
|
122
|
+
) : (
|
|
123
|
+
<>
|
|
124
|
+
<rect x="1" y="1" width="10" height="10" fill="#F25022" />
|
|
125
|
+
<rect x="13" y="1" width="10" height="10" fill="#7FBA00" />
|
|
126
|
+
<rect x="1" y="13" width="10" height="10" fill="#00A4EF" />
|
|
127
|
+
<rect x="13" y="13" width="10" height="10" fill="#FFB900" />
|
|
128
|
+
</>
|
|
129
|
+
)}
|
|
130
|
+
</svg>
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
case "discord":
|
|
134
|
+
return (
|
|
135
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
136
|
+
<path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" fill={theme === "gray" ? "currentColor" : "#5865F2"} />
|
|
137
|
+
</svg>
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
case "slack":
|
|
141
|
+
return (
|
|
142
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
143
|
+
{theme === "gray" ? (
|
|
144
|
+
<path d="M5.042 15.165a2.528 2.528 0 01-2.52 2.523A2.528 2.528 0 010 15.165a2.527 2.527 0 012.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 012.521-2.52 2.527 2.527 0 012.521 2.52v6.313A2.528 2.528 0 018.834 24a2.528 2.528 0 01-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 01-2.521-2.52A2.528 2.528 0 018.834 0a2.528 2.528 0 012.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 012.521 2.521 2.528 2.528 0 01-2.521 2.521H2.522A2.528 2.528 0 010 8.834a2.528 2.528 0 012.522-2.521h6.312zm6.313 2.521a2.528 2.528 0 012.521-2.521A2.528 2.528 0 0124 8.834a2.528 2.528 0 01-2.522 2.521h-2.52V8.834zm-1.271 0a2.528 2.528 0 01-2.521 2.521 2.528 2.528 0 01-2.522-2.521V2.522A2.528 2.528 0 0111.355 0a2.528 2.528 0 012.521 2.522v6.312zm-2.521 6.313a2.528 2.528 0 012.521 2.521 2.528 2.528 0 01-2.521 2.522 2.528 2.528 0 01-2.522-2.522v-2.521h2.522zm0-1.271a2.528 2.528 0 01-2.522-2.521 2.528 2.528 0 012.522-2.522h6.313A2.528 2.528 0 0124 15.165a2.528 2.528 0 01-2.522 2.521h-6.313z" fill="currentColor" />
|
|
145
|
+
) : (
|
|
146
|
+
<path d="M5.042 15.165a2.528 2.528 0 01-2.52 2.523A2.528 2.528 0 010 15.165a2.527 2.527 0 012.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 012.521-2.52 2.527 2.527 0 012.521 2.52v6.313A2.528 2.528 0 018.834 24a2.528 2.528 0 01-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 01-2.521-2.52A2.528 2.528 0 018.834 0a2.528 2.528 0 012.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 012.521 2.521 2.528 2.528 0 01-2.521 2.521H2.522A2.528 2.528 0 010 8.834a2.528 2.528 0 012.522-2.521h6.312zm6.313 2.521a2.528 2.528 0 012.521-2.521A2.528 2.528 0 0124 8.834a2.528 2.528 0 01-2.522 2.521h-2.52V8.834zm-1.271 0a2.528 2.528 0 01-2.521 2.521 2.528 2.528 0 01-2.522-2.521V2.522A2.528 2.528 0 0111.355 0a2.528 2.528 0 012.521 2.522v6.312zm-2.521 6.313a2.528 2.528 0 012.521 2.521 2.528 2.528 0 01-2.521 2.522 2.528 2.528 0 01-2.522-2.522v-2.521h2.522zm0-1.271a2.528 2.528 0 01-2.522-2.521 2.528 2.528 0 012.522-2.522h6.313A2.528 2.528 0 0124 15.165a2.528 2.528 0 01-2.522 2.521h-6.313z" fill="#E01E5A" />
|
|
147
|
+
)}
|
|
148
|
+
</svg>
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
case "figma":
|
|
152
|
+
return (
|
|
153
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
154
|
+
{theme === "gray" ? (
|
|
155
|
+
<path d="M15.852 8.981h-4.588V0h4.588c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.491-4.49 4.491zM12.735 7.51h3.117c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-3.117V7.51zm0 8.943h-4.588c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.981zm-4.588-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V8.943H8.148zm4.588 15.057h-4.588c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.981zm-4.588-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V16.49H8.148zm11.704-3.527c0 2.476-2.014 4.49-4.49 4.49s-4.49-2.014-4.49-4.49 2.014-4.49 4.49-4.49 4.49 2.014 4.49 4.49zm-1.471 0c0-1.665-1.355-3.019-3.019-3.019s-3.019 1.355-3.019 3.019 1.355 3.019 3.019 3.019 3.019-1.355 3.019-3.019z" fill="currentColor" />
|
|
156
|
+
) : (
|
|
157
|
+
<>
|
|
158
|
+
<path d="M8.148 24c2.476 0 4.49-2.014 4.49-4.49v-4.49H8.148c-2.476 0-4.49 2.013-4.49 4.49 0 2.476 2.014 4.49 4.49 4.49z" fill="#0ACF83" />
|
|
159
|
+
<path d="M3.657 10.962c0-2.476 2.014-4.49 4.49-4.49h4.49v8.981h-4.49c-2.476 0-4.49-2.014-4.49-4.49z" fill="#A259FF" />
|
|
160
|
+
<path d="M3.657 1.49C3.657.014 5.671 0 8.148 0h4.49v8.981h-4.49c-2.476 0-4.49-2.014-4.49-4.49z" fill="#F24E1E" />
|
|
161
|
+
<path d="M12.735 0h4.49c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.49-4.49 4.49h-4.49V0z" fill="#FF7262" />
|
|
162
|
+
<path d="M21.716 10.962c0 2.476-2.014 4.49-4.49 4.49s-4.49-2.014-4.49-4.49 2.014-4.49 4.49-4.49 4.49 2.014 4.49 4.49z" fill="#1ABCFE" />
|
|
163
|
+
</>
|
|
164
|
+
)}
|
|
165
|
+
</svg>
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
case "dribbble":
|
|
169
|
+
return (
|
|
170
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
171
|
+
<path d="M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12-5.385 12-12 12zm10.12-10.358c-.35-.11-3.17-.953-6.384-.438 1.34 3.684 1.887 6.684 1.992 7.308a10.174 10.174 0 004.392-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.025-8.04 6.4a10.15 10.15 0 006.29 2.166c1.42 0 2.77-.29 4.006-.816zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765.135-.045.27-.084.405-.12-.26-.585-.54-1.167-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248-1.698-3.018-3.53-5.558-3.8-5.928-2.868 1.35-5.01 3.99-5.676 7.17zM9.6 2.052c.282.38 2.145 2.914 3.822 6 3.645-1.365 5.19-3.44 5.373-3.702A10.15 10.15 0 0012 1.822c-.83 0-1.632.08-2.4.23zm10.335 3.483c-.218.29-1.91 2.493-5.724 4.04.24.49.47.985.68 1.486.075.18.15.36.22.53 3.41-.428 6.8.26 7.14.33-.02-2.42-.88-4.64-2.316-6.386z" fill={theme === "gray" ? "currentColor" : "#EA4C89"} />
|
|
172
|
+
</svg>
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
case "spotify":
|
|
176
|
+
return (
|
|
177
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
178
|
+
<path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z" fill={theme === "gray" ? "currentColor" : "#1DB954"} />
|
|
179
|
+
</svg>
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
default:
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/* ── Tag Base ── */
|
|
2
|
+
.tag {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: 6px;
|
|
6
|
+
border-radius: var(--radius-full);
|
|
7
|
+
background: var(--color-bg-card);
|
|
8
|
+
border: 1.5px solid var(--color-border-standard);
|
|
9
|
+
color: var(--color-text-primary);
|
|
10
|
+
font-family: inherit;
|
|
11
|
+
white-space: nowrap;
|
|
12
|
+
transition: all 0.2s;
|
|
13
|
+
cursor: default;
|
|
14
|
+
user-select: none;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* ── Sizes ── */
|
|
18
|
+
.sm {
|
|
19
|
+
padding: 4px 10px;
|
|
20
|
+
font-size: 12px;
|
|
21
|
+
gap: 4px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.md {
|
|
25
|
+
padding: 6px 12px;
|
|
26
|
+
font-size: 13px;
|
|
27
|
+
gap: 6px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.lg {
|
|
31
|
+
padding: 8px 16px;
|
|
32
|
+
font-size: 14px;
|
|
33
|
+
gap: 8px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* ── Label ── */
|
|
37
|
+
.label {
|
|
38
|
+
font-weight: 500;
|
|
39
|
+
line-height: 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* ── Dot ── */
|
|
43
|
+
.dot {
|
|
44
|
+
width: 6px;
|
|
45
|
+
height: 6px;
|
|
46
|
+
border-radius: 50%;
|
|
47
|
+
background: var(--color-lime);
|
|
48
|
+
flex-shrink: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.sm .dot {
|
|
52
|
+
width: 5px;
|
|
53
|
+
height: 5px;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.lg .dot {
|
|
57
|
+
width: 7px;
|
|
58
|
+
height: 7px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* ── Avatar ── */
|
|
62
|
+
.avatar {
|
|
63
|
+
width: 18px;
|
|
64
|
+
height: 18px;
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
object-fit: cover;
|
|
67
|
+
flex-shrink: 0;
|
|
68
|
+
border: 1px solid var(--color-border-subtle);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.sm .avatar {
|
|
72
|
+
width: 14px;
|
|
73
|
+
height: 14px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.lg .avatar {
|
|
77
|
+
width: 22px;
|
|
78
|
+
height: 22px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* ── Count Badge ── */
|
|
82
|
+
.count {
|
|
83
|
+
display: inline-flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
min-width: 18px;
|
|
87
|
+
height: 18px;
|
|
88
|
+
padding: 0 5px;
|
|
89
|
+
border-radius: var(--radius-full);
|
|
90
|
+
background: var(--color-bg-elevated);
|
|
91
|
+
border: 1px solid var(--color-border-subtle);
|
|
92
|
+
font-size: 10px;
|
|
93
|
+
font-weight: 700;
|
|
94
|
+
color: var(--color-text-secondary);
|
|
95
|
+
line-height: 1;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.sm .count {
|
|
99
|
+
min-width: 14px;
|
|
100
|
+
height: 14px;
|
|
101
|
+
padding: 0 3px;
|
|
102
|
+
font-size: 9px;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.lg .count {
|
|
106
|
+
min-width: 20px;
|
|
107
|
+
height: 20px;
|
|
108
|
+
padding: 0 6px;
|
|
109
|
+
font-size: 11px;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* ── Remove Button (X) ── */
|
|
113
|
+
.removeBtn {
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
background: none;
|
|
118
|
+
border: none;
|
|
119
|
+
padding: 0;
|
|
120
|
+
margin: 0 -2px 0 0;
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
color: var(--color-text-tertiary);
|
|
123
|
+
transition: color 0.2s;
|
|
124
|
+
flex-shrink: 0;
|
|
125
|
+
line-height: 1;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.removeBtn:hover {
|
|
129
|
+
color: var(--color-text-primary);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.removeBtn:disabled {
|
|
133
|
+
cursor: not-allowed;
|
|
134
|
+
opacity: 0.4;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* ── Checkbox ── */
|
|
138
|
+
.checkbox {
|
|
139
|
+
display: flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
justify-content: center;
|
|
142
|
+
flex-shrink: 0;
|
|
143
|
+
line-height: 1;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.checkable {
|
|
147
|
+
cursor: pointer;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.checkable:hover {
|
|
151
|
+
border-color: var(--color-border-medium);
|
|
152
|
+
background: var(--color-bg-hover);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.checked {
|
|
156
|
+
border-color: var(--color-border-lime-medium);
|
|
157
|
+
background: var(--color-bg-lime-subtle);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.checked:hover {
|
|
161
|
+
border-color: var(--color-border-lime-strong);
|
|
162
|
+
background: var(--color-bg-lime-medium);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* ── Disabled ── */
|
|
166
|
+
.disabled {
|
|
167
|
+
opacity: 0.5;
|
|
168
|
+
cursor: not-allowed;
|
|
169
|
+
pointer-events: none;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ── Tag Group ── */
|
|
173
|
+
.tagGroup {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: column;
|
|
176
|
+
gap: 10px;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.tagGroupLabel {
|
|
180
|
+
font-weight: 600;
|
|
181
|
+
color: var(--color-text-secondary);
|
|
182
|
+
letter-spacing: 0.01em;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.labelsm {
|
|
186
|
+
font-size: 12px;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.labelmd {
|
|
190
|
+
font-size: 13px;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.labellg {
|
|
194
|
+
font-size: 14px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* ── Tag List ── */
|
|
198
|
+
.tagList {
|
|
199
|
+
display: flex;
|
|
200
|
+
flex-wrap: wrap;
|
|
201
|
+
gap: 8px;
|
|
202
|
+
align-items: center;
|
|
203
|
+
}
|