@srcroot/ui 0.0.30 → 0.0.33
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/index.js +426 -594
- package/package.json +10 -9
- package/src/registry/analytics/google-analytics.tsx +36 -0
- package/src/registry/analytics/google-tag-manager.tsx +62 -0
- package/src/registry/analytics/meta-pixel.tsx +44 -0
- package/src/registry/analytics/microsoft-clarity.tsx +31 -0
- package/src/registry/analytics/tiktok-pixel.tsx +34 -0
- package/src/registry/lib/utils.ts +6 -0
- package/src/registry/themes/gradients.css +236 -0
- package/{registry/themes → src/registry/themes/v3}/gray.css +45 -1
- package/{registry/themes → src/registry/themes/v3}/neutral.css +45 -1
- package/{registry/themes → src/registry/themes/v3}/slate.css +45 -1
- package/{registry/themes → src/registry/themes/v3}/stone.css +45 -1
- package/{registry/themes → src/registry/themes/v3}/zinc.css +45 -1
- package/src/registry/themes/v4/gray.css +183 -0
- package/src/registry/themes/v4/neutral.css +183 -0
- package/src/registry/themes/v4/slate.css +183 -0
- package/src/registry/themes/v4/stone.css +183 -0
- package/src/registry/themes/v4/zinc.css +183 -0
- package/src/registry/ui/chatbot.tsx +96 -0
- package/registry/design-tokens.css +0 -217
- package/registry/themes/index.css +0 -19
- /package/{registry → src/registry/ui}/accordion.tsx +0 -0
- /package/{registry → src/registry/ui}/alert-dialog.tsx +0 -0
- /package/{registry → src/registry/ui}/alert.tsx +0 -0
- /package/{registry → src/registry/ui}/aspect-ratio.tsx +0 -0
- /package/{registry → src/registry/ui}/avatar.tsx +0 -0
- /package/{registry → src/registry/ui}/badge.tsx +0 -0
- /package/{registry → src/registry/ui}/breadcrumb.tsx +0 -0
- /package/{registry → src/registry/ui}/button-group.tsx +0 -0
- /package/{registry → src/registry/ui}/button.tsx +0 -0
- /package/{registry → src/registry/ui}/calendar.tsx +0 -0
- /package/{registry → src/registry/ui}/card.tsx +0 -0
- /package/{registry → src/registry/ui}/carousel.tsx +0 -0
- /package/{registry → src/registry/ui}/checkbox.tsx +0 -0
- /package/{registry → src/registry/ui}/collapsible.tsx +0 -0
- /package/{registry → src/registry/ui}/combobox.tsx +0 -0
- /package/{registry → src/registry/ui}/command.tsx +0 -0
- /package/{registry → src/registry/ui}/container.tsx +0 -0
- /package/{registry → src/registry/ui}/context-menu.tsx +0 -0
- /package/{registry → src/registry/ui}/date-picker.tsx +0 -0
- /package/{registry → src/registry/ui}/dialog.tsx +0 -0
- /package/{registry → src/registry/ui}/drawer.tsx +0 -0
- /package/{registry → src/registry/ui}/dropdown-menu.tsx +0 -0
- /package/{registry → src/registry/ui}/file-upload.tsx +0 -0
- /package/{registry → src/registry/ui}/hover-card.tsx +0 -0
- /package/{registry → src/registry/ui}/image.tsx +0 -0
- /package/{registry → src/registry/ui}/input.tsx +0 -0
- /package/{registry → src/registry/ui}/kbd.tsx +0 -0
- /package/{registry → src/registry/ui}/label.tsx +0 -0
- /package/{registry → src/registry/ui}/loading-spinner.tsx +0 -0
- /package/{registry → src/registry/ui}/menubar.tsx +0 -0
- /package/{registry → src/registry/ui}/native-select.tsx +0 -0
- /package/{registry → src/registry/ui}/otp-input.tsx +0 -0
- /package/{registry → src/registry/ui}/pagination.tsx +0 -0
- /package/{registry → src/registry/ui}/popover.tsx +0 -0
- /package/{registry → src/registry/ui}/progress.tsx +0 -0
- /package/{registry → src/registry/ui}/radio.tsx +0 -0
- /package/{registry → src/registry/ui}/resizable.tsx +0 -0
- /package/{registry → src/registry/ui}/scroll-area.tsx +0 -0
- /package/{registry → src/registry/ui}/search.tsx +0 -0
- /package/{registry → src/registry/ui}/select.tsx +0 -0
- /package/{registry → src/registry/ui}/separator.tsx +0 -0
- /package/{registry → src/registry/ui}/sheet.tsx +0 -0
- /package/{registry → src/registry/ui}/sidebar.tsx +0 -0
- /package/{registry → src/registry/ui}/skeleton.tsx +0 -0
- /package/{registry → src/registry/ui}/slider.tsx +0 -0
- /package/{registry → src/registry/ui}/star-rating.tsx +0 -0
- /package/{registry → src/registry/ui}/switch.tsx +0 -0
- /package/{registry → src/registry/ui}/table.tsx +0 -0
- /package/{registry → src/registry/ui}/tabs.tsx +0 -0
- /package/{registry → src/registry/ui}/text.tsx +0 -0
- /package/{registry → src/registry/ui}/textarea.tsx +0 -0
- /package/{registry → src/registry/ui}/toast.tsx +0 -0
- /package/{registry → src/registry/ui}/toggle-group.tsx +0 -0
- /package/{registry → src/registry/ui}/toggle.tsx +0 -0
- /package/{registry → src/registry/ui}/tooltip.tsx +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@srcroot/ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.33",
|
|
4
4
|
"description": "A UI library with polymorphic, accessible React components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"dist",
|
|
15
|
-
"registry"
|
|
15
|
+
"src/registry"
|
|
16
16
|
],
|
|
17
17
|
"keywords": [
|
|
18
18
|
"react",
|
|
@@ -33,28 +33,29 @@
|
|
|
33
33
|
"@types/fs-extra": "^11.0.4",
|
|
34
34
|
"@types/node": "^22.10.1",
|
|
35
35
|
"@types/prompts": "^2.4.9",
|
|
36
|
-
"tsup": "^8.3.5",
|
|
37
|
-
"typescript": "^5.7.2",
|
|
38
|
-
"tailwindcss-animate": "^1.0.7",
|
|
39
36
|
"class-variance-authority": "^0.7.1",
|
|
40
37
|
"clsx": "^2.1.1",
|
|
41
38
|
"cmdk": "^1.0.0",
|
|
42
39
|
"react": "^18.0.0 || ^19.0.0",
|
|
43
40
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
41
|
+
"react-icons": "^5.5.0",
|
|
44
42
|
"tailwind-merge": "^3.4.0",
|
|
45
43
|
"tailwindcss": "^3.0.0 || ^4.0.0",
|
|
46
|
-
"
|
|
44
|
+
"tailwindcss-animate": "^1.0.7",
|
|
45
|
+
"tsup": "^8.3.5",
|
|
46
|
+
"type-fest": "^5.3.1",
|
|
47
|
+
"typescript": "^5.7.2"
|
|
47
48
|
},
|
|
48
49
|
"peerDependencies": {
|
|
49
50
|
"class-variance-authority": "^0.7.1",
|
|
50
51
|
"clsx": "^2.1.1",
|
|
51
52
|
"cmdk": "^1.0.0",
|
|
52
|
-
"react-icons": "^5.5.0",
|
|
53
53
|
"react": "^18.0.0 || ^19.0.0",
|
|
54
54
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
55
|
+
"react-icons": "^5.5.0",
|
|
55
56
|
"tailwind-merge": "^3.4.0",
|
|
56
|
-
"tailwindcss
|
|
57
|
-
"tailwindcss": "^
|
|
57
|
+
"tailwindcss": "^3.0.0 || ^4.0.0",
|
|
58
|
+
"tailwindcss-animate": "^1.0.7"
|
|
58
59
|
},
|
|
59
60
|
"peerDependenciesMeta": {
|
|
60
61
|
"cmdk": {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Script from 'next/script';
|
|
2
|
+
import type { FC } from 'react';
|
|
3
|
+
|
|
4
|
+
interface GoogleAnalyticsProps {
|
|
5
|
+
gaIds: string[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const GoogleAnalytics: FC<GoogleAnalyticsProps> = ({ gaIds }) => {
|
|
9
|
+
if (gaIds.length === 0) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<>
|
|
15
|
+
<Script
|
|
16
|
+
id="ga4-script"
|
|
17
|
+
strategy="afterInteractive"
|
|
18
|
+
src={`https://www.googletagmanager.com/gtag/js?id=${gaIds[0]}`}
|
|
19
|
+
/>
|
|
20
|
+
<Script
|
|
21
|
+
id="ga4-init"
|
|
22
|
+
strategy="afterInteractive"
|
|
23
|
+
dangerouslySetInnerHTML={{
|
|
24
|
+
__html: `
|
|
25
|
+
window.dataLayer = window.dataLayer || [];
|
|
26
|
+
function gtag(){dataLayer.push(arguments);}
|
|
27
|
+
gtag('js', new Date());
|
|
28
|
+
${gaIds.map((id) => `gtag('config', '${id}', { page_path: window.location.pathname });`).join('\n')}
|
|
29
|
+
`,
|
|
30
|
+
}}
|
|
31
|
+
/>
|
|
32
|
+
</>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default GoogleAnalytics;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import Script from 'next/script';
|
|
2
|
+
import type { FC, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface GTMContainer {
|
|
5
|
+
gtmId: string;
|
|
6
|
+
tagServerUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface GoogleTagManagerProps {
|
|
10
|
+
containers: GTMContainer[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const GoogleTagManager: FC<GoogleTagManagerProps> = ({ containers }) => {
|
|
14
|
+
const defaultServer = 'https://www.googletagmanager.com/gtm.js';
|
|
15
|
+
|
|
16
|
+
// Group containers by tagServer to avoid duplicate script loads
|
|
17
|
+
const scriptsMap = containers.reduce((map, container) => {
|
|
18
|
+
const server = container.tagServerUrl || defaultServer;
|
|
19
|
+
if (!map.has(server)) {
|
|
20
|
+
map.set(server, []);
|
|
21
|
+
}
|
|
22
|
+
map.get(server)!.push(container.gtmId);
|
|
23
|
+
return map;
|
|
24
|
+
}, new Map<string, string[]>());
|
|
25
|
+
|
|
26
|
+
const scriptElements: ReactNode[] = Array.from(scriptsMap.entries()).map(([server, ids]) => (
|
|
27
|
+
<Script
|
|
28
|
+
key={server}
|
|
29
|
+
id={`gtm-script-${server}`}
|
|
30
|
+
strategy="afterInteractive"
|
|
31
|
+
dangerouslySetInnerHTML={{
|
|
32
|
+
__html: `
|
|
33
|
+
${ids
|
|
34
|
+
.map(
|
|
35
|
+
id => `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s);j.async=true;j.src="${server}?"+i;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','${id}');`
|
|
36
|
+
)
|
|
37
|
+
.join('')}
|
|
38
|
+
`,
|
|
39
|
+
}}
|
|
40
|
+
/>
|
|
41
|
+
));
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<>
|
|
45
|
+
{scriptElements}
|
|
46
|
+
|
|
47
|
+
<noscript>
|
|
48
|
+
{containers.map(({ gtmId, tagServer = defaultServer }) => (
|
|
49
|
+
<iframe
|
|
50
|
+
key={gtmId}
|
|
51
|
+
src={`${tagServer}/ns.html?id=${gtmId}`}
|
|
52
|
+
height="0"
|
|
53
|
+
width="0"
|
|
54
|
+
style={{ display: 'none', visibility: 'hidden' }}
|
|
55
|
+
/>
|
|
56
|
+
))}
|
|
57
|
+
</noscript>
|
|
58
|
+
</>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default GoogleTagManager;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import Script from 'next/script';
|
|
2
|
+
import type { FC } from 'react';
|
|
3
|
+
|
|
4
|
+
interface MetaPixelProps {
|
|
5
|
+
pixelIds: string[]; // ← array now
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const MetaPixel: FC<MetaPixelProps> = ({ pixelIds }) => {
|
|
9
|
+
return (
|
|
10
|
+
<>
|
|
11
|
+
<Script
|
|
12
|
+
id="fb-script-multi"
|
|
13
|
+
strategy="afterInteractive"
|
|
14
|
+
dangerouslySetInnerHTML={{
|
|
15
|
+
__html: `
|
|
16
|
+
!function(f,b,e,v,n,t,s)
|
|
17
|
+
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
|
18
|
+
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
|
19
|
+
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
|
20
|
+
n.queue=[];t=b.createElement(e);t.async=!0;
|
|
21
|
+
t.src=v;s=b.getElementsByTagName(e)[0];
|
|
22
|
+
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
|
23
|
+
'https://connect.facebook.net/en_US/fbevents.js');
|
|
24
|
+
${pixelIds.map(id => `fbq('init', '${id}');`).join('\n')}
|
|
25
|
+
fbq('track', 'PageView');
|
|
26
|
+
`,
|
|
27
|
+
}}
|
|
28
|
+
/>
|
|
29
|
+
|
|
30
|
+
{/* One noscript tag per pixel */}
|
|
31
|
+
{pixelIds.map(id => (
|
|
32
|
+
<noscript key={id}>
|
|
33
|
+
<img
|
|
34
|
+
height="1" width="1" style={{ display: 'none' }}
|
|
35
|
+
src={`https://www.facebook.com/tr?id=${id}&ev=PageView&noscript=1`}
|
|
36
|
+
alt=""
|
|
37
|
+
/>
|
|
38
|
+
</noscript>
|
|
39
|
+
))}
|
|
40
|
+
</>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default MetaPixel;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import Script from 'next/script';
|
|
2
|
+
import type { FC } from 'react';
|
|
3
|
+
|
|
4
|
+
interface MicrosoftClarityProps {
|
|
5
|
+
clarityIds: string[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const MicrosoftClarity: FC<MicrosoftClarityProps> = ({ clarityIds }) => {
|
|
9
|
+
return (
|
|
10
|
+
<>
|
|
11
|
+
{clarityIds.map((id) => (
|
|
12
|
+
<Script
|
|
13
|
+
key={id}
|
|
14
|
+
id={`microsoft-clarity-init-${id}`}
|
|
15
|
+
strategy="afterInteractive"
|
|
16
|
+
dangerouslySetInnerHTML={{
|
|
17
|
+
__html: `
|
|
18
|
+
(function(c,l,a,r,i,t,y){
|
|
19
|
+
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
|
|
20
|
+
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
|
|
21
|
+
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
|
|
22
|
+
})(window, document, "clarity", "script", "${id}");
|
|
23
|
+
`,
|
|
24
|
+
}}
|
|
25
|
+
/>
|
|
26
|
+
))}
|
|
27
|
+
</>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default MicrosoftClarity;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import Script from 'next/script';
|
|
2
|
+
import type { FC } from 'react';
|
|
3
|
+
|
|
4
|
+
interface TikTokPixelProps {
|
|
5
|
+
pixelIds: string[]; // ← array
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const TikTokPixel: FC<TikTokPixelProps> = ({ pixelIds }) => {
|
|
9
|
+
return (
|
|
10
|
+
<Script
|
|
11
|
+
id="tiktok-script-multi"
|
|
12
|
+
strategy="afterInteractive"
|
|
13
|
+
dangerouslySetInnerHTML={{
|
|
14
|
+
__html: `
|
|
15
|
+
!function (w, d, t) {
|
|
16
|
+
w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];
|
|
17
|
+
ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],
|
|
18
|
+
ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};
|
|
19
|
+
for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);
|
|
20
|
+
ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},
|
|
21
|
+
ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js";
|
|
22
|
+
ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};
|
|
23
|
+
var s=document.createElement("script");s.type="text/javascript",s.async=!0,s.src=r+"?sdkid="+e+"&lib="+t;
|
|
24
|
+
var p=document.getElementsByTagName("script")[0];p.parentNode.insertBefore(s,p)};
|
|
25
|
+
${pixelIds.map(id => `ttq.load('${id}');`).join('\n')}
|
|
26
|
+
ttq.page();
|
|
27
|
+
}(window, document, 'ttq');
|
|
28
|
+
`,
|
|
29
|
+
}}
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default TikTokPixel;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
@import url('https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700;800&family=Inter:wght@300;400;500;600&display=swap');
|
|
2
|
+
|
|
3
|
+
@tailwind base;
|
|
4
|
+
@tailwind components;
|
|
5
|
+
@tailwind utilities;
|
|
6
|
+
|
|
7
|
+
@layer base {
|
|
8
|
+
:root {
|
|
9
|
+
--background: 0 0% 100%;
|
|
10
|
+
--foreground: 250 20% 10%;
|
|
11
|
+
|
|
12
|
+
--card: 0 0% 100%;
|
|
13
|
+
--card-foreground: 250 20% 10%;
|
|
14
|
+
|
|
15
|
+
--popover: 0 0% 100%;
|
|
16
|
+
--popover-foreground: 250 20% 10%;
|
|
17
|
+
|
|
18
|
+
--primary: 246 80% 60%;
|
|
19
|
+
--primary-foreground: 0 0% 100%;
|
|
20
|
+
|
|
21
|
+
--secondary: 320 85% 55%;
|
|
22
|
+
--secondary-foreground: 0 0% 100%;
|
|
23
|
+
|
|
24
|
+
--muted: 250 20% 96%;
|
|
25
|
+
--muted-foreground: 250 10% 45%;
|
|
26
|
+
|
|
27
|
+
--accent: 320 85% 55%;
|
|
28
|
+
--accent-foreground: 0 0% 100%;
|
|
29
|
+
|
|
30
|
+
--destructive: 0 84.2% 60.2%;
|
|
31
|
+
--destructive-foreground: 210 40% 98%;
|
|
32
|
+
|
|
33
|
+
--border: 250 15% 90%;
|
|
34
|
+
--input: 250 15% 90%;
|
|
35
|
+
--ring: 246 80% 60%;
|
|
36
|
+
|
|
37
|
+
--radius: 0.75rem;
|
|
38
|
+
|
|
39
|
+
/* Custom brand colors */
|
|
40
|
+
--brand-purple: 246 80% 60%;
|
|
41
|
+
--brand-magenta: 320 85% 55%;
|
|
42
|
+
--brand-light: 300 60% 97%;
|
|
43
|
+
|
|
44
|
+
/* Gradients */
|
|
45
|
+
--gradient-brand: linear-gradient(135deg, hsl(246 80% 60%) 0%, hsl(320 85% 55%) 100%);
|
|
46
|
+
--gradient-hero: linear-gradient(135deg, hsl(270 60% 95%) 0%, hsl(320 70% 95%) 50%, hsl(246 60% 95%) 100%);
|
|
47
|
+
--gradient-card: linear-gradient(180deg, hsl(0 0% 100%) 0%, hsl(300 60% 98%) 100%);
|
|
48
|
+
|
|
49
|
+
/* Shadows */
|
|
50
|
+
--shadow-sm: 0 2px 8px -2px hsl(246 80% 60% / 0.1);
|
|
51
|
+
--shadow-md: 0 8px 24px -4px hsl(246 80% 60% / 0.15);
|
|
52
|
+
--shadow-lg: 0 16px 48px -8px hsl(246 80% 60% / 0.2);
|
|
53
|
+
--shadow-glow: 0 0 40px hsl(320 85% 55% / 0.3);
|
|
54
|
+
|
|
55
|
+
--sidebar-background: 0 0% 98%;
|
|
56
|
+
--sidebar-foreground: 240 5.3% 26.1%;
|
|
57
|
+
--sidebar-primary: 240 5.9% 10%;
|
|
58
|
+
--sidebar-primary-foreground: 0 0% 98%;
|
|
59
|
+
--sidebar-accent: 240 4.8% 95.9%;
|
|
60
|
+
--sidebar-accent-foreground: 240 5.9% 10%;
|
|
61
|
+
--sidebar-border: 220 13% 91%;
|
|
62
|
+
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.dark {
|
|
66
|
+
--background: 250 20% 6%;
|
|
67
|
+
--foreground: 0 0% 98%;
|
|
68
|
+
|
|
69
|
+
--card: 250 20% 8%;
|
|
70
|
+
--card-foreground: 0 0% 98%;
|
|
71
|
+
|
|
72
|
+
--popover: 250 20% 8%;
|
|
73
|
+
--popover-foreground: 0 0% 98%;
|
|
74
|
+
|
|
75
|
+
--primary: 246 80% 65%;
|
|
76
|
+
--primary-foreground: 250 20% 6%;
|
|
77
|
+
|
|
78
|
+
--secondary: 320 85% 60%;
|
|
79
|
+
--secondary-foreground: 0 0% 100%;
|
|
80
|
+
|
|
81
|
+
--muted: 250 20% 15%;
|
|
82
|
+
--muted-foreground: 250 10% 60%;
|
|
83
|
+
|
|
84
|
+
--accent: 320 85% 60%;
|
|
85
|
+
--accent-foreground: 0 0% 100%;
|
|
86
|
+
|
|
87
|
+
--destructive: 0 62.8% 30.6%;
|
|
88
|
+
--destructive-foreground: 210 40% 98%;
|
|
89
|
+
|
|
90
|
+
--border: 250 20% 18%;
|
|
91
|
+
--input: 250 20% 18%;
|
|
92
|
+
--ring: 246 80% 65%;
|
|
93
|
+
|
|
94
|
+
--brand-purple: 246 80% 65%;
|
|
95
|
+
--brand-magenta: 320 85% 60%;
|
|
96
|
+
--brand-light: 250 20% 12%;
|
|
97
|
+
|
|
98
|
+
--gradient-brand: linear-gradient(135deg, hsl(246 80% 65%) 0%, hsl(320 85% 60%) 100%);
|
|
99
|
+
--gradient-hero: linear-gradient(135deg, hsl(250 30% 12%) 0%, hsl(320 30% 15%) 50%, hsl(246 30% 12%) 100%);
|
|
100
|
+
--gradient-card: linear-gradient(180deg, hsl(250 20% 10%) 0%, hsl(300 20% 12%) 100%);
|
|
101
|
+
|
|
102
|
+
--shadow-sm: 0 2px 8px -2px hsl(0 0% 0% / 0.3);
|
|
103
|
+
--shadow-md: 0 8px 24px -4px hsl(0 0% 0% / 0.4);
|
|
104
|
+
--shadow-lg: 0 16px 48px -8px hsl(0 0% 0% / 0.5);
|
|
105
|
+
--shadow-glow: 0 0 40px hsl(320 85% 60% / 0.2);
|
|
106
|
+
|
|
107
|
+
--sidebar-background: 240 5.9% 10%;
|
|
108
|
+
--sidebar-foreground: 240 4.8% 95.9%;
|
|
109
|
+
--sidebar-primary: 224.3 76.3% 48%;
|
|
110
|
+
--sidebar-primary-foreground: 0 0% 100%;
|
|
111
|
+
--sidebar-accent: 240 3.7% 15.9%;
|
|
112
|
+
--sidebar-accent-foreground: 240 4.8% 95.9%;
|
|
113
|
+
--sidebar-border: 240 3.7% 15.9%;
|
|
114
|
+
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@layer base {
|
|
119
|
+
* {
|
|
120
|
+
@apply border-border;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
body {
|
|
124
|
+
@apply bg-background text-foreground font-sans antialiased;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
h1,
|
|
128
|
+
h2,
|
|
129
|
+
h3,
|
|
130
|
+
h4,
|
|
131
|
+
h5,
|
|
132
|
+
h6 {
|
|
133
|
+
@apply font-display font-bold tracking-tight;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@layer utilities {
|
|
138
|
+
.gradient-brand {
|
|
139
|
+
background: var(--gradient-brand);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.gradient-hero {
|
|
143
|
+
background: var(--gradient-hero);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.gradient-card {
|
|
147
|
+
background: var(--gradient-card);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.text-gradient {
|
|
151
|
+
background: var(--gradient-brand);
|
|
152
|
+
-webkit-background-clip: text;
|
|
153
|
+
-webkit-text-fill-color: transparent;
|
|
154
|
+
background-clip: text;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.shadow-brand-sm {
|
|
158
|
+
box-shadow: var(--shadow-sm);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.shadow-brand-md {
|
|
162
|
+
box-shadow: var(--shadow-md);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.shadow-brand-lg {
|
|
166
|
+
box-shadow: var(--shadow-lg);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.shadow-glow {
|
|
170
|
+
box-shadow: var(--shadow-glow);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@layer components {
|
|
175
|
+
.animate-fade-up {
|
|
176
|
+
animation: fadeUp 0.6s ease-out forwards;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.animate-fade-in {
|
|
180
|
+
animation: fadeIn 0.5s ease-out forwards;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.animate-scale-in {
|
|
184
|
+
animation: scaleIn 0.4s ease-out forwards;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.animate-slide-in {
|
|
188
|
+
animation: slideIn 0.5s ease-out forwards;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@keyframes fadeUp {
|
|
193
|
+
from {
|
|
194
|
+
opacity: 0;
|
|
195
|
+
transform: translateY(30px);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
to {
|
|
199
|
+
opacity: 1;
|
|
200
|
+
transform: translateY(0);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@keyframes fadeIn {
|
|
205
|
+
from {
|
|
206
|
+
opacity: 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
to {
|
|
210
|
+
opacity: 1;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
@keyframes scaleIn {
|
|
215
|
+
from {
|
|
216
|
+
opacity: 0;
|
|
217
|
+
transform: scale(0.95);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
to {
|
|
221
|
+
opacity: 1;
|
|
222
|
+
transform: scale(1);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
@keyframes slideIn {
|
|
227
|
+
from {
|
|
228
|
+
opacity: 0;
|
|
229
|
+
transform: translateX(-20px);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
to {
|
|
233
|
+
opacity: 1;
|
|
234
|
+
transform: translateX(0);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @srcroot/ui - Gray Theme
|
|
2
|
+
* @srcroot/ui - Gray Theme (Tailwind 3)
|
|
3
3
|
* True neutral gray (the default)
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
@tailwind base;
|
|
7
|
+
@tailwind components;
|
|
8
|
+
@tailwind utilities;
|
|
9
|
+
|
|
6
10
|
@layer base {
|
|
7
11
|
:root {
|
|
8
12
|
--background: 0 0% 100%;
|
|
@@ -107,4 +111,44 @@
|
|
|
107
111
|
--sidebar-border: 215 27.9% 16.9%;
|
|
108
112
|
--sidebar-ring: 216 12.2% 83.9%;
|
|
109
113
|
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@layer base {
|
|
117
|
+
* {
|
|
118
|
+
@apply border-border;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
body {
|
|
122
|
+
@apply bg-background text-foreground;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@layer utilities {
|
|
127
|
+
@keyframes accordion-down {
|
|
128
|
+
from {
|
|
129
|
+
height: 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
to {
|
|
133
|
+
height: var(--radix-accordion-content-height);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@keyframes accordion-up {
|
|
138
|
+
from {
|
|
139
|
+
height: var(--radix-accordion-content-height);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
to {
|
|
143
|
+
height: 0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.animate-accordion-down {
|
|
148
|
+
animation: accordion-down 0.2s ease-out;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.animate-accordion-up {
|
|
152
|
+
animation: accordion-up 0.2s ease-out;
|
|
153
|
+
}
|
|
110
154
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @srcroot/ui - Neutral Theme
|
|
2
|
+
* @srcroot/ui - Neutral Theme (Tailwind 3)
|
|
3
3
|
* A balanced gray with no strong undertones
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
@tailwind base;
|
|
7
|
+
@tailwind components;
|
|
8
|
+
@tailwind utilities;
|
|
9
|
+
|
|
6
10
|
@layer base {
|
|
7
11
|
:root {
|
|
8
12
|
--background: 0 0% 100%;
|
|
@@ -107,4 +111,44 @@
|
|
|
107
111
|
--sidebar-border: 0 0% 14.9%;
|
|
108
112
|
--sidebar-ring: 0 0% 83.1%;
|
|
109
113
|
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@layer base {
|
|
117
|
+
* {
|
|
118
|
+
@apply border-border;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
body {
|
|
122
|
+
@apply bg-background text-foreground;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@layer utilities {
|
|
127
|
+
@keyframes accordion-down {
|
|
128
|
+
from {
|
|
129
|
+
height: 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
to {
|
|
133
|
+
height: var(--radix-accordion-content-height);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@keyframes accordion-up {
|
|
138
|
+
from {
|
|
139
|
+
height: var(--radix-accordion-content-height);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
to {
|
|
143
|
+
height: 0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.animate-accordion-down {
|
|
148
|
+
animation: accordion-down 0.2s ease-out;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.animate-accordion-up {
|
|
152
|
+
animation: accordion-up 0.2s ease-out;
|
|
153
|
+
}
|
|
110
154
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @srcroot/ui - Slate Theme
|
|
2
|
+
* @srcroot/ui - Slate Theme (Tailwind 3)
|
|
3
3
|
* Cool gray with strong blue undertones (shadcn default)
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
@tailwind base;
|
|
7
|
+
@tailwind components;
|
|
8
|
+
@tailwind utilities;
|
|
9
|
+
|
|
6
10
|
@layer base {
|
|
7
11
|
:root {
|
|
8
12
|
--background: 0 0% 100%;
|
|
@@ -107,4 +111,44 @@
|
|
|
107
111
|
--sidebar-border: 217.2 32.6% 17.5%;
|
|
108
112
|
--sidebar-ring: 212.7 26.8% 83.9%;
|
|
109
113
|
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@layer base {
|
|
117
|
+
* {
|
|
118
|
+
@apply border-border;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
body {
|
|
122
|
+
@apply bg-background text-foreground;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@layer utilities {
|
|
127
|
+
@keyframes accordion-down {
|
|
128
|
+
from {
|
|
129
|
+
height: 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
to {
|
|
133
|
+
height: var(--radix-accordion-content-height);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@keyframes accordion-up {
|
|
138
|
+
from {
|
|
139
|
+
height: var(--radix-accordion-content-height);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
to {
|
|
143
|
+
height: 0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.animate-accordion-down {
|
|
148
|
+
animation: accordion-down 0.2s ease-out;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.animate-accordion-up {
|
|
152
|
+
animation: accordion-up 0.2s ease-out;
|
|
153
|
+
}
|
|
110
154
|
}
|