@srcroot/ui 0.0.30 → 0.0.32
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 +377 -574
- package/package.json +2 -2
- 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
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @srcroot/ui - Stone Theme (Tailwind 4)
|
|
3
|
+
* Warm gray with subtle brown undertones
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "tailwindcss";
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
--background: hsl(0 0% 100%);
|
|
10
|
+
--foreground: hsl(24 9.8% 10%);
|
|
11
|
+
|
|
12
|
+
--card: hsl(0 0% 100%);
|
|
13
|
+
--card-foreground: hsl(24 9.8% 10%);
|
|
14
|
+
|
|
15
|
+
--popover: hsl(0 0% 100%);
|
|
16
|
+
--popover-foreground: hsl(24 9.8% 10%);
|
|
17
|
+
|
|
18
|
+
--primary: hsl(24 9.8% 10%);
|
|
19
|
+
--primary-foreground: hsl(60 9.1% 97.8%);
|
|
20
|
+
|
|
21
|
+
--secondary: hsl(60 4.8% 95.9%);
|
|
22
|
+
--secondary-foreground: hsl(24 9.8% 10%);
|
|
23
|
+
|
|
24
|
+
--muted: hsl(60 4.8% 95.9%);
|
|
25
|
+
--muted-foreground: hsl(25 5.3% 44.7%);
|
|
26
|
+
|
|
27
|
+
--accent: hsl(60 4.8% 95.9%);
|
|
28
|
+
--accent-foreground: hsl(24 9.8% 10%);
|
|
29
|
+
|
|
30
|
+
--destructive: hsl(0 84.2% 60.2%);
|
|
31
|
+
--destructive-foreground: hsl(60 9.1% 97.8%);
|
|
32
|
+
|
|
33
|
+
--success: hsl(142.1 76.2% 36.3%);
|
|
34
|
+
--success-foreground: hsl(60 9.1% 97.8%);
|
|
35
|
+
|
|
36
|
+
--warning: hsl(45.4 93.4% 47.5%);
|
|
37
|
+
--warning-foreground: hsl(24 9.8% 10%);
|
|
38
|
+
|
|
39
|
+
--info: hsl(201.3 96.3% 32.2%);
|
|
40
|
+
--info-foreground: hsl(60 9.1% 97.8%);
|
|
41
|
+
|
|
42
|
+
--border: hsl(20 5.9% 90%);
|
|
43
|
+
--input: hsl(20 5.9% 90%);
|
|
44
|
+
--ring: hsl(24 9.8% 10%);
|
|
45
|
+
|
|
46
|
+
--radius: 0.5rem;
|
|
47
|
+
|
|
48
|
+
--sidebar-width: 16rem;
|
|
49
|
+
--sidebar-width-mobile: 18rem;
|
|
50
|
+
--sidebar-width-collapsed: 3rem;
|
|
51
|
+
--sidebar-width-icon: 3rem;
|
|
52
|
+
--header-height: 3.5rem;
|
|
53
|
+
|
|
54
|
+
--sidebar-background: hsl(0 0% 98%);
|
|
55
|
+
--sidebar-foreground: hsl(24 9.8% 10%);
|
|
56
|
+
--sidebar-primary: hsl(24 9.8% 10%);
|
|
57
|
+
--sidebar-primary-foreground: hsl(60 9.1% 97.8%);
|
|
58
|
+
--sidebar-accent: hsl(60 4.8% 95.9%);
|
|
59
|
+
--sidebar-accent-foreground: hsl(24 9.8% 10%);
|
|
60
|
+
--sidebar-border: hsl(20 5.9% 90%);
|
|
61
|
+
--sidebar-ring: hsl(24 9.8% 10%);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@theme inline {
|
|
65
|
+
--color-border: var(--border);
|
|
66
|
+
--color-input: var(--input);
|
|
67
|
+
--color-ring: var(--ring);
|
|
68
|
+
--color-background: var(--background);
|
|
69
|
+
--color-foreground: var(--foreground);
|
|
70
|
+
|
|
71
|
+
--color-primary: var(--primary);
|
|
72
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
73
|
+
|
|
74
|
+
--color-secondary: var(--secondary);
|
|
75
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
76
|
+
|
|
77
|
+
--color-destructive: var(--destructive);
|
|
78
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
79
|
+
|
|
80
|
+
--color-muted: var(--muted);
|
|
81
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
82
|
+
|
|
83
|
+
--color-accent: var(--accent);
|
|
84
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
85
|
+
|
|
86
|
+
--color-popover: var(--popover);
|
|
87
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
88
|
+
|
|
89
|
+
--color-card: var(--card);
|
|
90
|
+
--color-card-foreground: var(--card-foreground);
|
|
91
|
+
|
|
92
|
+
--color-sidebar: var(--sidebar-background);
|
|
93
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
94
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
95
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
96
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
97
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
98
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
99
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
100
|
+
|
|
101
|
+
--radius-lg: var(--radius);
|
|
102
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
103
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
104
|
+
|
|
105
|
+
--animate-accordion-down: accordion-down 0.2s ease-out;
|
|
106
|
+
--animate-accordion-up: accordion-up 0.2s ease-out;
|
|
107
|
+
|
|
108
|
+
@keyframes accordion-down {
|
|
109
|
+
from {
|
|
110
|
+
height: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
to {
|
|
114
|
+
height: var(--radix-accordion-content-height);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes accordion-up {
|
|
119
|
+
from {
|
|
120
|
+
height: var(--radix-accordion-content-height);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
to {
|
|
124
|
+
height: 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@media (prefers-color-scheme: dark) {
|
|
130
|
+
:root {
|
|
131
|
+
--background: hsl(24 9.8% 10%);
|
|
132
|
+
--foreground: hsl(60 9.1% 97.8%);
|
|
133
|
+
|
|
134
|
+
--card: hsl(24 9.8% 10%);
|
|
135
|
+
--card-foreground: hsl(60 9.1% 97.8%);
|
|
136
|
+
|
|
137
|
+
--popover: hsl(24 9.8% 10%);
|
|
138
|
+
--popover-foreground: hsl(60 9.1% 97.8%);
|
|
139
|
+
|
|
140
|
+
--primary: hsl(60 9.1% 97.8%);
|
|
141
|
+
--primary-foreground: hsl(24 9.8% 10%);
|
|
142
|
+
|
|
143
|
+
--secondary: hsl(12 6.5% 15.1%);
|
|
144
|
+
--secondary-foreground: hsl(60 9.1% 97.8%);
|
|
145
|
+
|
|
146
|
+
--muted: hsl(12 6.5% 15.1%);
|
|
147
|
+
--muted-foreground: hsl(24 5.4% 63.9%);
|
|
148
|
+
|
|
149
|
+
--accent: hsl(12 6.5% 15.1%);
|
|
150
|
+
--accent-foreground: hsl(60 9.1% 97.8%);
|
|
151
|
+
|
|
152
|
+
--destructive: hsl(0 62.8% 30.6%);
|
|
153
|
+
--destructive-foreground: hsl(60 9.1% 97.8%);
|
|
154
|
+
|
|
155
|
+
--success: hsl(142.1 70.6% 45.3%);
|
|
156
|
+
--success-foreground: hsl(24 9.8% 10%);
|
|
157
|
+
|
|
158
|
+
--warning: hsl(48 96.5% 53.1%);
|
|
159
|
+
--warning-foreground: hsl(24 9.8% 10%);
|
|
160
|
+
|
|
161
|
+
--info: hsl(199.4 95.5% 53.8%);
|
|
162
|
+
--info-foreground: hsl(24 9.8% 10%);
|
|
163
|
+
|
|
164
|
+
--border: hsl(12 6.5% 15.1%);
|
|
165
|
+
--input: hsl(12 6.5% 15.1%);
|
|
166
|
+
--ring: hsl(24 5.7% 82.9%);
|
|
167
|
+
|
|
168
|
+
--sidebar-background: hsl(24 9.8% 14%);
|
|
169
|
+
--sidebar-foreground: hsl(60 9.1% 97.8%);
|
|
170
|
+
--sidebar-primary: hsl(60 9.1% 97.8%);
|
|
171
|
+
--sidebar-primary-foreground: hsl(24 9.8% 10%);
|
|
172
|
+
--sidebar-accent: hsl(12 6.5% 15.1%);
|
|
173
|
+
--sidebar-accent-foreground: hsl(60 9.1% 97.8%);
|
|
174
|
+
--sidebar-border: hsl(12 6.5% 15.1%);
|
|
175
|
+
--sidebar-ring: hsl(24 5.7% 82.9%);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
body {
|
|
180
|
+
background: var(--background);
|
|
181
|
+
color: var(--foreground);
|
|
182
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
183
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @srcroot/ui - Zinc Theme (Tailwind 4)
|
|
3
|
+
* Cool gray with subtle blue undertones
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "tailwindcss";
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
--background: hsl(0 0% 100%);
|
|
10
|
+
--foreground: hsl(240 10% 3.9%);
|
|
11
|
+
|
|
12
|
+
--card: hsl(0 0% 100%);
|
|
13
|
+
--card-foreground: hsl(240 10% 3.9%);
|
|
14
|
+
|
|
15
|
+
--popover: hsl(0 0% 100%);
|
|
16
|
+
--popover-foreground: hsl(240 10% 3.9%);
|
|
17
|
+
|
|
18
|
+
--primary: hsl(240 5.9% 10%);
|
|
19
|
+
--primary-foreground: hsl(0 0% 98%);
|
|
20
|
+
|
|
21
|
+
--secondary: hsl(240 4.8% 95.9%);
|
|
22
|
+
--secondary-foreground: hsl(240 5.9% 10%);
|
|
23
|
+
|
|
24
|
+
--muted: hsl(240 4.8% 95.9%);
|
|
25
|
+
--muted-foreground: hsl(240 3.8% 46.1%);
|
|
26
|
+
|
|
27
|
+
--accent: hsl(240 4.8% 95.9%);
|
|
28
|
+
--accent-foreground: hsl(240 5.9% 10%);
|
|
29
|
+
|
|
30
|
+
--destructive: hsl(0 84.2% 60.2%);
|
|
31
|
+
--destructive-foreground: hsl(0 0% 98%);
|
|
32
|
+
|
|
33
|
+
--success: hsl(142.1 76.2% 36.3%);
|
|
34
|
+
--success-foreground: hsl(0 0% 98%);
|
|
35
|
+
|
|
36
|
+
--warning: hsl(45.4 93.4% 47.5%);
|
|
37
|
+
--warning-foreground: hsl(240 5.9% 10%);
|
|
38
|
+
|
|
39
|
+
--info: hsl(201.3 96.3% 32.2%);
|
|
40
|
+
--info-foreground: hsl(0 0% 98%);
|
|
41
|
+
|
|
42
|
+
--border: hsl(240 5.9% 90%);
|
|
43
|
+
--input: hsl(240 5.9% 90%);
|
|
44
|
+
--ring: hsl(240 10% 3.9%);
|
|
45
|
+
|
|
46
|
+
--radius: 0.5rem;
|
|
47
|
+
|
|
48
|
+
--sidebar-width: 16rem;
|
|
49
|
+
--sidebar-width-mobile: 18rem;
|
|
50
|
+
--sidebar-width-collapsed: 3rem;
|
|
51
|
+
--sidebar-width-icon: 3rem;
|
|
52
|
+
--header-height: 3.5rem;
|
|
53
|
+
|
|
54
|
+
--sidebar-background: hsl(0 0% 98%);
|
|
55
|
+
--sidebar-foreground: hsl(240 5.3% 26.1%);
|
|
56
|
+
--sidebar-primary: hsl(240 5.9% 10%);
|
|
57
|
+
--sidebar-primary-foreground: hsl(0 0% 98%);
|
|
58
|
+
--sidebar-accent: hsl(240 4.8% 95.9%);
|
|
59
|
+
--sidebar-accent-foreground: hsl(240 5.9% 10%);
|
|
60
|
+
--sidebar-border: hsl(220 13% 91%);
|
|
61
|
+
--sidebar-ring: hsl(217.2 91.2% 59.8%);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@theme inline {
|
|
65
|
+
--color-border: var(--border);
|
|
66
|
+
--color-input: var(--input);
|
|
67
|
+
--color-ring: var(--ring);
|
|
68
|
+
--color-background: var(--background);
|
|
69
|
+
--color-foreground: var(--foreground);
|
|
70
|
+
|
|
71
|
+
--color-primary: var(--primary);
|
|
72
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
73
|
+
|
|
74
|
+
--color-secondary: var(--secondary);
|
|
75
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
76
|
+
|
|
77
|
+
--color-destructive: var(--destructive);
|
|
78
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
79
|
+
|
|
80
|
+
--color-muted: var(--muted);
|
|
81
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
82
|
+
|
|
83
|
+
--color-accent: var(--accent);
|
|
84
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
85
|
+
|
|
86
|
+
--color-popover: var(--popover);
|
|
87
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
88
|
+
|
|
89
|
+
--color-card: var(--card);
|
|
90
|
+
--color-card-foreground: var(--card-foreground);
|
|
91
|
+
|
|
92
|
+
--color-sidebar: var(--sidebar-background);
|
|
93
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
94
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
95
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
96
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
97
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
98
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
99
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
100
|
+
|
|
101
|
+
--radius-lg: var(--radius);
|
|
102
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
103
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
104
|
+
|
|
105
|
+
--animate-accordion-down: accordion-down 0.2s ease-out;
|
|
106
|
+
--animate-accordion-up: accordion-up 0.2s ease-out;
|
|
107
|
+
|
|
108
|
+
@keyframes accordion-down {
|
|
109
|
+
from {
|
|
110
|
+
height: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
to {
|
|
114
|
+
height: var(--radix-accordion-content-height);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes accordion-up {
|
|
119
|
+
from {
|
|
120
|
+
height: var(--radix-accordion-content-height);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
to {
|
|
124
|
+
height: 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@media (prefers-color-scheme: dark) {
|
|
130
|
+
:root {
|
|
131
|
+
--background: hsl(240 10% 3.9%);
|
|
132
|
+
--foreground: hsl(0 0% 98%);
|
|
133
|
+
|
|
134
|
+
--card: hsl(240 10% 3.9%);
|
|
135
|
+
--card-foreground: hsl(0 0% 98%);
|
|
136
|
+
|
|
137
|
+
--popover: hsl(240 10% 3.9%);
|
|
138
|
+
--popover-foreground: hsl(0 0% 98%);
|
|
139
|
+
|
|
140
|
+
--primary: hsl(0 0% 98%);
|
|
141
|
+
--primary-foreground: hsl(240 5.9% 10%);
|
|
142
|
+
|
|
143
|
+
--secondary: hsl(240 3.7% 15.9%);
|
|
144
|
+
--secondary-foreground: hsl(0 0% 98%);
|
|
145
|
+
|
|
146
|
+
--muted: hsl(240 3.7% 15.9%);
|
|
147
|
+
--muted-foreground: hsl(240 5% 64.9%);
|
|
148
|
+
|
|
149
|
+
--accent: hsl(240 3.7% 15.9%);
|
|
150
|
+
--accent-foreground: hsl(0 0% 98%);
|
|
151
|
+
|
|
152
|
+
--destructive: hsl(0 62.8% 30.6%);
|
|
153
|
+
--destructive-foreground: hsl(0 0% 98%);
|
|
154
|
+
|
|
155
|
+
--success: hsl(142.1 70.6% 45.3%);
|
|
156
|
+
--success-foreground: hsl(240 5.9% 10%);
|
|
157
|
+
|
|
158
|
+
--warning: hsl(48 96.5% 53.1%);
|
|
159
|
+
--warning-foreground: hsl(240 5.9% 10%);
|
|
160
|
+
|
|
161
|
+
--info: hsl(199.4 95.5% 53.8%);
|
|
162
|
+
--info-foreground: hsl(240 5.9% 10%);
|
|
163
|
+
|
|
164
|
+
--border: hsl(240 3.7% 15.9%);
|
|
165
|
+
--input: hsl(240 3.7% 15.9%);
|
|
166
|
+
--ring: hsl(240 4.9% 83.9%);
|
|
167
|
+
|
|
168
|
+
--sidebar-background: hsl(240 5.9% 10%);
|
|
169
|
+
--sidebar-foreground: hsl(240 4.8% 95.9%);
|
|
170
|
+
--sidebar-primary: hsl(224.3 76.3% 48%);
|
|
171
|
+
--sidebar-primary-foreground: hsl(0 0% 100%);
|
|
172
|
+
--sidebar-accent: hsl(240 3.7% 15.9%);
|
|
173
|
+
--sidebar-accent-foreground: hsl(240 4.8% 95.9%);
|
|
174
|
+
--sidebar-border: hsl(240 3.7% 15.9%);
|
|
175
|
+
--sidebar-ring: hsl(217.2 91.2% 59.8%);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
body {
|
|
180
|
+
background: var(--background);
|
|
181
|
+
color: var(--foreground);
|
|
182
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
183
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
3
|
+
import { cn } from "@/lib/utils"
|
|
4
|
+
|
|
5
|
+
import { ScrollArea } from "@/components/ui/scroll-area"
|
|
6
|
+
|
|
7
|
+
const Chatbot = React.forwardRef<
|
|
8
|
+
HTMLDivElement,
|
|
9
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
10
|
+
>(({ className, ...props }, ref) => (
|
|
11
|
+
<div
|
|
12
|
+
ref={ref}
|
|
13
|
+
className={cn(
|
|
14
|
+
"flex flex-col w-full h-[500px] border rounded-lg bg-background text-foreground shadow-sm overflow-hidden",
|
|
15
|
+
className
|
|
16
|
+
)}
|
|
17
|
+
{...props}
|
|
18
|
+
/>
|
|
19
|
+
))
|
|
20
|
+
Chatbot.displayName = "Chatbot"
|
|
21
|
+
|
|
22
|
+
const ChatbotHeader = React.forwardRef<
|
|
23
|
+
HTMLDivElement,
|
|
24
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
25
|
+
>(({ className, ...props }, ref) => (
|
|
26
|
+
<div
|
|
27
|
+
ref={ref}
|
|
28
|
+
className={cn(
|
|
29
|
+
"flex items-center px-4 py-3 border-b bg-muted/40",
|
|
30
|
+
className
|
|
31
|
+
)}
|
|
32
|
+
{...props}
|
|
33
|
+
/>
|
|
34
|
+
))
|
|
35
|
+
ChatbotHeader.displayName = "ChatbotHeader"
|
|
36
|
+
|
|
37
|
+
const ChatbotContent = React.forwardRef<
|
|
38
|
+
HTMLDivElement,
|
|
39
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
40
|
+
>(({ className, ...props }, ref) => (
|
|
41
|
+
<ScrollArea
|
|
42
|
+
ref={ref}
|
|
43
|
+
className={cn("flex-1 p-2 space-y-4 flex flex-col", className)}
|
|
44
|
+
scrollbarSize="thin"
|
|
45
|
+
{...props}
|
|
46
|
+
/>
|
|
47
|
+
))
|
|
48
|
+
ChatbotContent.displayName = "ChatbotContent"
|
|
49
|
+
|
|
50
|
+
const chatbotMessageVariants = cva(
|
|
51
|
+
"max-w-[80%] rounded-2xl px-4 py-2 text-sm break-words",
|
|
52
|
+
{
|
|
53
|
+
variants: {
|
|
54
|
+
variant: {
|
|
55
|
+
user: "bg-primary text-primary-foreground rounded-br-none ml-auto",
|
|
56
|
+
bot: "bg-muted text-foreground rounded-bl-none mr-auto",
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
defaultVariants: {
|
|
60
|
+
variant: "bot",
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
const ChatbotMessage = React.forwardRef<
|
|
66
|
+
HTMLDivElement,
|
|
67
|
+
React.HTMLAttributes<HTMLDivElement> &
|
|
68
|
+
VariantProps<typeof chatbotMessageVariants>
|
|
69
|
+
>(({ className, variant, ...props }, ref) => (
|
|
70
|
+
<div
|
|
71
|
+
ref={ref}
|
|
72
|
+
className={cn(chatbotMessageVariants({ variant }), className)}
|
|
73
|
+
{...props}
|
|
74
|
+
/>
|
|
75
|
+
))
|
|
76
|
+
ChatbotMessage.displayName = "ChatbotMessage"
|
|
77
|
+
|
|
78
|
+
const ChatbotFooter = React.forwardRef<
|
|
79
|
+
HTMLDivElement,
|
|
80
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
81
|
+
>(({ className, ...props }, ref) => (
|
|
82
|
+
<div
|
|
83
|
+
ref={ref}
|
|
84
|
+
className={cn("flex items-center p-3 border-t bg-background rounded-b-lg", className)}
|
|
85
|
+
{...props}
|
|
86
|
+
/>
|
|
87
|
+
))
|
|
88
|
+
ChatbotFooter.displayName = "ChatbotFooter"
|
|
89
|
+
|
|
90
|
+
export {
|
|
91
|
+
Chatbot,
|
|
92
|
+
ChatbotHeader,
|
|
93
|
+
ChatbotContent,
|
|
94
|
+
ChatbotMessage,
|
|
95
|
+
ChatbotFooter,
|
|
96
|
+
}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @srcroot/ui Design Tokens
|
|
3
|
-
*
|
|
4
|
-
* A comprehensive design token system for consistent styling.
|
|
5
|
-
* Copy this file to your project and import it in your main CSS file.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
@tailwind base;
|
|
9
|
-
@tailwind components;
|
|
10
|
-
@tailwind utilities;
|
|
11
|
-
|
|
12
|
-
@layer base {
|
|
13
|
-
:root {
|
|
14
|
-
/* ========================================
|
|
15
|
-
COLOR TOKENS (HSL format for Tailwind)
|
|
16
|
-
======================================== */
|
|
17
|
-
|
|
18
|
-
/* Semantic Colors */
|
|
19
|
-
--background: 0 0% 100%;
|
|
20
|
-
--foreground: 222.2 84% 4.9%;
|
|
21
|
-
|
|
22
|
-
/* Surfaces */
|
|
23
|
-
--card: 0 0% 100%;
|
|
24
|
-
--card-foreground: 222.2 84% 4.9%;
|
|
25
|
-
--popover: 0 0% 100%;
|
|
26
|
-
--popover-foreground: 222.2 84% 4.9%;
|
|
27
|
-
|
|
28
|
-
/* Brand Colors */
|
|
29
|
-
--primary: 222.2 47.4% 11.2%;
|
|
30
|
-
--primary-foreground: 210 40% 98%;
|
|
31
|
-
--secondary: 210 40% 96.1%;
|
|
32
|
-
--secondary-foreground: 222.2 47.4% 11.2%;
|
|
33
|
-
|
|
34
|
-
/* UI Colors */
|
|
35
|
-
--muted: 210 40% 96.1%;
|
|
36
|
-
--muted-foreground: 215.4 16.3% 46.9%;
|
|
37
|
-
--accent: 210 40% 96.1%;
|
|
38
|
-
--accent-foreground: 222.2 47.4% 11.2%;
|
|
39
|
-
|
|
40
|
-
/* Status Colors */
|
|
41
|
-
--destructive: 0 84.2% 60.2%;
|
|
42
|
-
--destructive-foreground: 210 40% 98%;
|
|
43
|
-
--success: 142.1 76.2% 36.3%;
|
|
44
|
-
--success-foreground: 355.7 100% 97.3%;
|
|
45
|
-
--warning: 45.4 93.4% 47.5%;
|
|
46
|
-
--warning-foreground: 26 83.3% 14.1%;
|
|
47
|
-
--info: 201.3 96.3% 32.2%;
|
|
48
|
-
--info-foreground: 210 40% 98%;
|
|
49
|
-
|
|
50
|
-
/* Form & Border Colors */
|
|
51
|
-
--border: 214.3 31.8% 91.4%;
|
|
52
|
-
--input: 214.3 31.8% 91.4%;
|
|
53
|
-
--ring: 222.2 84% 4.9%;
|
|
54
|
-
|
|
55
|
-
/* ========================================
|
|
56
|
-
RADIUS TOKENS
|
|
57
|
-
======================================== */
|
|
58
|
-
--radius: 0.5rem;
|
|
59
|
-
--radius-sm: 0.25rem;
|
|
60
|
-
--radius-md: 0.5rem;
|
|
61
|
-
--radius-lg: 0.75rem;
|
|
62
|
-
--radius-xl: 1rem;
|
|
63
|
-
--radius-2xl: 1.5rem;
|
|
64
|
-
--radius-full: 9999px;
|
|
65
|
-
|
|
66
|
-
/* ========================================
|
|
67
|
-
SPACING TOKENS
|
|
68
|
-
======================================== */
|
|
69
|
-
--spacing-0: 0;
|
|
70
|
-
--spacing-1: 0.25rem;
|
|
71
|
-
--spacing-2: 0.5rem;
|
|
72
|
-
--spacing-3: 0.75rem;
|
|
73
|
-
--spacing-4: 1rem;
|
|
74
|
-
--spacing-6: 1.5rem;
|
|
75
|
-
--spacing-8: 2rem;
|
|
76
|
-
--spacing-12: 3rem;
|
|
77
|
-
--spacing-16: 4rem;
|
|
78
|
-
|
|
79
|
-
/* ========================================
|
|
80
|
-
TYPOGRAPHY TOKENS
|
|
81
|
-
======================================== */
|
|
82
|
-
--font-sans: ui-sans-serif, system-ui, sans-serif;
|
|
83
|
-
--font-mono: ui-monospace, monospace;
|
|
84
|
-
|
|
85
|
-
--text-xs: 0.75rem;
|
|
86
|
-
--text-sm: 0.875rem;
|
|
87
|
-
--text-base: 1rem;
|
|
88
|
-
--text-lg: 1.125rem;
|
|
89
|
-
--text-xl: 1.25rem;
|
|
90
|
-
--text-2xl: 1.5rem;
|
|
91
|
-
--text-3xl: 1.875rem;
|
|
92
|
-
--text-4xl: 2.25rem;
|
|
93
|
-
|
|
94
|
-
/* ========================================
|
|
95
|
-
SHADOW TOKENS
|
|
96
|
-
======================================== */
|
|
97
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
98
|
-
--shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
99
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
100
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
101
|
-
|
|
102
|
-
/* ========================================
|
|
103
|
-
COMPONENT TOKENS
|
|
104
|
-
======================================== */
|
|
105
|
-
--sidebar-width: 16rem;
|
|
106
|
-
--sidebar-width-mobile: 18rem;
|
|
107
|
-
--sidebar-width-collapsed: 3rem;
|
|
108
|
-
--sidebar-width-icon: 3rem;
|
|
109
|
-
--header-height: 3.5rem;
|
|
110
|
-
|
|
111
|
-
--sidebar-background: 0 0% 98%;
|
|
112
|
-
--sidebar-foreground: 240 5.3% 26.1%;
|
|
113
|
-
--sidebar-primary: 240 5.9% 10%;
|
|
114
|
-
--sidebar-primary-foreground: 0 0% 98%;
|
|
115
|
-
--sidebar-accent: 240 4.8% 95.9%;
|
|
116
|
-
--sidebar-accent-foreground: 240 5.9% 10%;
|
|
117
|
-
--sidebar-border: 220 13% 91%;
|
|
118
|
-
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/* ========================================
|
|
122
|
-
DARK MODE TOKENS
|
|
123
|
-
======================================== */
|
|
124
|
-
.dark {
|
|
125
|
-
--background: 222.2 84% 4.9%;
|
|
126
|
-
--foreground: 210 40% 98%;
|
|
127
|
-
|
|
128
|
-
--card: 222.2 84% 4.9%;
|
|
129
|
-
--card-foreground: 210 40% 98%;
|
|
130
|
-
--popover: 222.2 84% 4.9%;
|
|
131
|
-
--popover-foreground: 210 40% 98%;
|
|
132
|
-
|
|
133
|
-
--primary: 210 40% 98%;
|
|
134
|
-
--primary-foreground: 222.2 47.4% 11.2%;
|
|
135
|
-
--secondary: 217.2 32.6% 17.5%;
|
|
136
|
-
--secondary-foreground: 210 40% 98%;
|
|
137
|
-
|
|
138
|
-
--muted: 217.2 32.6% 17.5%;
|
|
139
|
-
--muted-foreground: 215 20.2% 65.1%;
|
|
140
|
-
--accent: 217.2 32.6% 17.5%;
|
|
141
|
-
--accent-foreground: 210 40% 98%;
|
|
142
|
-
|
|
143
|
-
--destructive: 0 62.8% 30.6%;
|
|
144
|
-
--destructive-foreground: 210 40% 98%;
|
|
145
|
-
--success: 142.1 70.6% 45.3%;
|
|
146
|
-
--success-foreground: 144.9 80.4% 10%;
|
|
147
|
-
--warning: 48 96.5% 53.1%;
|
|
148
|
-
--warning-foreground: 20.9 91.7% 14.1%;
|
|
149
|
-
--info: 199.4 95.5% 53.8%;
|
|
150
|
-
--info-foreground: 204.9 73.1% 12.9%;
|
|
151
|
-
|
|
152
|
-
--border: 217.2 32.6% 17.5%;
|
|
153
|
-
--input: 217.2 32.6% 17.5%;
|
|
154
|
-
--ring: 212.7 26.8% 83.9%;
|
|
155
|
-
|
|
156
|
-
--sidebar-background: 240 5.9% 10%;
|
|
157
|
-
--sidebar-foreground: 240 4.8% 95.9%;
|
|
158
|
-
--sidebar-primary: 224.3 76.3% 48%;
|
|
159
|
-
--sidebar-primary-foreground: 0 0% 100%;
|
|
160
|
-
--sidebar-accent: 240 3.7% 15.9%;
|
|
161
|
-
--sidebar-accent-foreground: 240 4.8% 95.9%;
|
|
162
|
-
--sidebar-border: 240 3.7% 15.9%;
|
|
163
|
-
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
164
|
-
|
|
165
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
|
|
166
|
-
--shadow: 0 1px 3px 0 rgb(0 0 0 / 0.4);
|
|
167
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4);
|
|
168
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/* ========================================
|
|
173
|
-
BASE STYLES
|
|
174
|
-
======================================== */
|
|
175
|
-
@layer base {
|
|
176
|
-
* {
|
|
177
|
-
@apply border-border;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
body {
|
|
181
|
-
@apply bg-background text-foreground;
|
|
182
|
-
font-feature-settings: "rlig" 1, "calt" 1;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/* ========================================
|
|
187
|
-
ACCORDION ANIMATION (required)
|
|
188
|
-
======================================== */
|
|
189
|
-
@layer utilities {
|
|
190
|
-
@keyframes accordion-down {
|
|
191
|
-
from {
|
|
192
|
-
height: 0;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
to {
|
|
196
|
-
height: var(--radix-accordion-content-height);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
@keyframes accordion-up {
|
|
201
|
-
from {
|
|
202
|
-
height: var(--radix-accordion-content-height);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
to {
|
|
206
|
-
height: 0;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
.animate-accordion-down {
|
|
211
|
-
animation: accordion-down 0.2s ease-out;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.animate-accordion-up {
|
|
215
|
-
animation: accordion-up 0.2s ease-out;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @srcroot/ui Theme Index
|
|
3
|
-
*
|
|
4
|
-
* Available themes:
|
|
5
|
-
* - neutral.css - Pure gray, no undertones
|
|
6
|
-
* - stone.css - Warm gray with brown undertones
|
|
7
|
-
* - zinc.css - Cool gray with subtle blue undertones
|
|
8
|
-
* - gray.css - True neutral gray
|
|
9
|
-
* - slate.css - Cool gray with strong blue undertones (default)
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* Copy the theme file contents into your globals.css or import it:
|
|
13
|
-
*
|
|
14
|
-
* @import '@srcroot/ui/themes/slate.css';
|
|
15
|
-
*
|
|
16
|
-
* Or with the base tokens:
|
|
17
|
-
* @import '@srcroot/ui/design-tokens.css';
|
|
18
|
-
* @import '@srcroot/ui/themes/zinc.css';
|
|
19
|
-
*/
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|