@glasshome/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.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +14 -0
  5. package/dist/lib/use-is-mobile.d.ts +1 -0
  6. package/dist/lib/utils.d.ts +2 -0
  7. package/dist/solid/accordion.d.ts +12 -0
  8. package/dist/solid/alert-dialog.d.ts +22 -0
  9. package/dist/solid/alert.d.ts +15 -0
  10. package/dist/solid/aspect-ratio.d.ts +6 -0
  11. package/dist/solid/avatar.d.ts +6 -0
  12. package/dist/solid/badge.d.ts +16 -0
  13. package/dist/solid/breadcrumb.d.ts +11 -0
  14. package/dist/solid/button-group.d.ts +18 -0
  15. package/dist/solid/button.d.ts +16 -0
  16. package/dist/solid/calendar.d.ts +17 -0
  17. package/dist/solid/card.d.ts +9 -0
  18. package/dist/solid/carousel.d.ts +15 -0
  19. package/dist/solid/checkbox.d.ts +4 -0
  20. package/dist/solid/collapsible.d.ts +6 -0
  21. package/dist/solid/command.d.ts +24 -0
  22. package/dist/solid/context-menu.d.ts +43 -0
  23. package/dist/solid/copy-button.d.ts +7 -0
  24. package/dist/solid/dialog.d.ts +19 -0
  25. package/dist/solid/dock.d.ts +24 -0
  26. package/dist/solid/drawer.d.ts +22 -0
  27. package/dist/solid/dropdown-menu.d.ts +32 -0
  28. package/dist/solid/empty.d.ts +18 -0
  29. package/dist/solid/field.d.ts +29 -0
  30. package/dist/solid/form.d.ts +24 -0
  31. package/dist/solid/geometric-background.d.ts +17 -0
  32. package/dist/solid/glass-effect.d.ts +6 -0
  33. package/dist/solid/hover-card.d.ts +11 -0
  34. package/dist/solid/index.d.ts +59 -0
  35. package/dist/solid/index.js +16036 -0
  36. package/dist/solid/input-group.d.ts +28 -0
  37. package/dist/solid/input-otp.d.ts +15 -0
  38. package/dist/solid/input.d.ts +3 -0
  39. package/dist/solid/item.d.ts +35 -0
  40. package/dist/solid/kbd.d.ts +4 -0
  41. package/dist/solid/label.d.ts +3 -0
  42. package/dist/solid/menubar.d.ts +25 -0
  43. package/dist/solid/navigation-menu.d.ts +20 -0
  44. package/dist/solid/pagination.d.ts +13 -0
  45. package/dist/solid/popover.d.ts +16 -0
  46. package/dist/solid/progress.d.ts +6 -0
  47. package/dist/solid/radio-group.d.ts +5 -0
  48. package/dist/solid/resizable.d.ts +14 -0
  49. package/dist/solid/responsive-dialog.d.ts +16 -0
  50. package/dist/solid/scroll-area.d.ts +6 -0
  51. package/dist/solid/select.d.ts +30 -0
  52. package/dist/solid/separator.d.ts +6 -0
  53. package/dist/solid/sheet.d.ts +22 -0
  54. package/dist/solid/sidebar.d.ts +74 -0
  55. package/dist/solid/skeleton.d.ts +3 -0
  56. package/dist/solid/slider.d.ts +18 -0
  57. package/dist/solid/sonner.d.ts +5 -0
  58. package/dist/solid/spinner.d.ts +3 -0
  59. package/dist/solid/switch.d.ts +11 -0
  60. package/dist/solid/table.d.ts +10 -0
  61. package/dist/solid/tabs.d.ts +12 -0
  62. package/dist/solid/textarea.d.ts +3 -0
  63. package/dist/solid/toggle-group.d.ts +7 -0
  64. package/dist/solid/toggle.d.ts +15 -0
  65. package/dist/solid/tooltip.d.ts +11 -0
  66. package/dist/utils-eGXXUFl7.js +2935 -0
  67. package/package.json +77 -0
  68. package/src/styles/globals.css +411 -0
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@glasshome/ui",
3
+ "version": "0.1.0",
4
+ "description": "SolidJS component library for GlassHome, built on Kobalte",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "homepage": "https://github.com/glasshome/ui#readme",
9
+ "bugs": {
10
+ "url": "https://github.com/glasshome/ui/issues"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "engines": {
16
+ "node": ">=18"
17
+ },
18
+ "sideEffects": false,
19
+ "keywords": [
20
+ "solidjs",
21
+ "components",
22
+ "kobalte",
23
+ "ui",
24
+ "home-assistant",
25
+ "smart-home",
26
+ "tailwindcss",
27
+ "glasshome"
28
+ ],
29
+ "exports": {
30
+ ".": {
31
+ "@glasshome/source": "./src/index.ts",
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ },
35
+ "./solid": {
36
+ "@glasshome/source": "./src/solid/index.ts",
37
+ "types": "./dist/solid/index.d.ts",
38
+ "import": "./dist/solid/index.js"
39
+ },
40
+ "./styles": "./src/styles/globals.css",
41
+ "./package.json": "./package.json"
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "src/styles"
46
+ ],
47
+ "scripts": {
48
+ "build": "vite build && tsc",
49
+ "dev": "vite build --watch"
50
+ },
51
+ "peerDependencies": {
52
+ "solid-js": "^1.9.9"
53
+ },
54
+ "dependencies": {
55
+ "@kobalte/core": "^0.13.11",
56
+ "clsx": "^2.1.1",
57
+ "cva": "^1.0.0-beta.4",
58
+ "embla-carousel": "^8.5.1",
59
+ "lucide-solid": "^0.544.0",
60
+ "solid-sonner": "^0.3.1",
61
+ "tailwind-merge": "^3.4.0",
62
+ "tailwindcss": "^4.1.13",
63
+ "tw-animate-css": "^1.4.0"
64
+ },
65
+ "devDependencies": {
66
+ "@types/node": "^25.2.2",
67
+ "typescript": "^5",
68
+ "vite": "^7.3.1",
69
+ "vite-plugin-solid": "^2.11.10"
70
+ },
71
+ "repository": {
72
+ "type": "git",
73
+ "url": "https://github.com/glasshome/ui.git"
74
+ },
75
+ "author": "GlassHome Labs",
76
+ "license": "MIT"
77
+ }
@@ -0,0 +1,411 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+
4
+ @source "../";
5
+
6
+ @custom-variant dark (&:is(.dark *));
7
+
8
+ @theme inline {
9
+ --color-background: var(--background);
10
+ --color-foreground: var(--foreground);
11
+ --color-card: var(--card);
12
+ --color-card-foreground: var(--card-foreground);
13
+ --color-popover: var(--popover);
14
+ --color-popover-foreground: var(--popover-foreground);
15
+ --color-primary: var(--primary);
16
+ --color-primary-foreground: var(--primary-foreground);
17
+ --color-secondary: var(--secondary);
18
+ --color-secondary-foreground: var(--secondary-foreground);
19
+ --color-muted: var(--muted);
20
+ --color-muted-foreground: var(--muted-foreground);
21
+ --color-accent: var(--accent);
22
+ --color-accent-foreground: var(--accent-foreground);
23
+ --color-destructive: var(--destructive);
24
+ --color-destructive-foreground: var(--destructive-foreground);
25
+ --color-border: var(--border);
26
+ --color-input: var(--input);
27
+ --color-ring: var(--ring);
28
+ --color-chart-1: var(--chart-1);
29
+ --color-chart-2: var(--chart-2);
30
+ --color-chart-3: var(--chart-3);
31
+ --color-chart-4: var(--chart-4);
32
+ --color-chart-5: var(--chart-5);
33
+ --font-sans: var(--font-sans);
34
+ --font-mono: var(--font-mono);
35
+ --font-serif: var(--font-serif);
36
+
37
+ --radius-sm: calc(var(--radius) - 4px);
38
+ --radius-md: calc(var(--radius) - 2px);
39
+ --radius-lg: var(--radius);
40
+ --radius-xl: calc(var(--radius) + 4px);
41
+
42
+ --shadow-2xs: var(--shadow-2xs);
43
+ --shadow-xs: var(--shadow-xs);
44
+ --shadow-sm: var(--shadow-sm);
45
+ --shadow: var(--shadow);
46
+ --shadow-md: var(--shadow-md);
47
+ --shadow-lg: var(--shadow-lg);
48
+ --shadow-xl: var(--shadow-xl);
49
+ --shadow-2xl: var(--shadow-2xl);
50
+
51
+ --animate-collapsible-down: collapsible-down 0.2s ease-out;
52
+ --animate-collapsible-up: collapsible-up 0.2s ease-out;
53
+ }
54
+
55
+ @keyframes collapsible-down {
56
+ from {
57
+ height: 0;
58
+ }
59
+ to {
60
+ height: var(--kb-collapsible-content-height);
61
+ }
62
+ }
63
+
64
+ @keyframes collapsible-up {
65
+ from {
66
+ height: var(--kb-collapsible-content-height);
67
+ }
68
+ to {
69
+ height: 0;
70
+ }
71
+ }
72
+
73
+ :root {
74
+ --background: oklch(0.985 0.002 247.8763);
75
+ --foreground: oklch(0 0 0);
76
+ --card: oklch(0.99 0.008 285);
77
+ --card-foreground: oklch(0 0 0);
78
+ --popover: oklch(0.9911 0 0);
79
+ --popover-foreground: oklch(0 0 0);
80
+ --primary: oklch(0.48 0.2 215.221);
81
+ --primary-foreground: oklch(1 0 0);
82
+ --secondary: oklch(0.96 0.01 250);
83
+ --secondary-foreground: oklch(0.9551 0 0);
84
+ --muted: oklch(0.9702 0 0);
85
+ --muted-foreground: oklch(0.4386 0 0);
86
+ --accent: oklch(0.6 0.2 195);
87
+ --accent-foreground: oklch(1 0 0);
88
+ --destructive: oklch(0.629 0.1902 23.0704);
89
+ --destructive-foreground: oklch(1 0 0);
90
+ --border: oklch(0.93 0.0094 286.2156);
91
+ --input: oklch(0.9401 0 0);
92
+ --ring: oklch(0.6132 0.2294 291.7437);
93
+ --chart-1: oklch(0.7459 0.1483 156.4499);
94
+ --chart-2: oklch(0.48 0.2 215.221);
95
+ --chart-3: oklch(0.7336 0.1758 50.5517);
96
+ --chart-4: oklch(0.5828 0.1809 259.7276);
97
+ --chart-5: oklch(0.559 0 0);
98
+ --font-sans: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
99
+ --font-serif: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
100
+ --font-mono: "GeistMono Variable", "JetBrains Mono", "Fira Code", Consolas, monospace;
101
+ --radius: 1.4rem;
102
+ --shadow-x: 0px;
103
+ --shadow-y: 2px;
104
+ --shadow-blur: 3px;
105
+ --shadow-spread: 0px;
106
+ --shadow-opacity: 0.16;
107
+ --shadow-color: hsl(0 0% 0%);
108
+ --shadow-2xs: 0px 2px 3px 0px hsl(0 0% 0% / 0.08);
109
+ --shadow-xs: 0px 2px 3px 0px hsl(0 0% 0% / 0.08);
110
+ --shadow-sm: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 1px 2px -1px hsl(0 0% 0% / 0.16);
111
+ --shadow: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 1px 2px -1px hsl(0 0% 0% / 0.16);
112
+ --shadow-md: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 2px 4px -1px hsl(0 0% 0% / 0.16);
113
+ --shadow-lg: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 4px 6px -1px hsl(0 0% 0% / 0.16);
114
+ --shadow-xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 8px 10px -1px hsl(0 0% 0% / 0.16);
115
+ --shadow-2xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.4);
116
+ --tracking-normal: 0em;
117
+ --spacing: 0.27rem;
118
+ }
119
+
120
+ .dark {
121
+ --background: oklch(0.12 0.01 250);
122
+ --foreground: oklch(0.9551 0 0);
123
+ --card: oklch(0.17 0.01 250);
124
+ --card-foreground: oklch(0.9551 0 0);
125
+ --popover: oklch(0.16 0.005 0);
126
+ --popover-foreground: oklch(0.9551 0 0);
127
+ --primary: oklch(0.48 0.2 215.221);
128
+ --primary-foreground: oklch(1 0 0);
129
+ --secondary: oklch(0.14 0.01 250);
130
+ --secondary-foreground: oklch(0.9551 0 0);
131
+ --muted: oklch(0.22 0.006 0);
132
+ --muted-foreground: oklch(0.7058 0 0);
133
+ --accent: oklch(0.6 0.2 195);
134
+ --accent-foreground: oklch(1 0 0);
135
+ --destructive: oklch(0.7106 0.1661 22.2162);
136
+ --destructive-foreground: oklch(1 0 0);
137
+ --border: oklch(0.26 0.012 250);
138
+ --input: oklch(0.25 0.005 0);
139
+ --ring: oklch(0.6132 0.2294 291.7437);
140
+ --chart-1: oklch(0.8003 0.1821 151.711);
141
+ --chart-2: oklch(0.48 0.2 215.221);
142
+ --chart-3: oklch(0.8077 0.1035 19.5706);
143
+ --chart-4: oklch(0.6691 0.1569 260.1063);
144
+ --chart-5: oklch(0.7058 0 0);
145
+ --font-sans: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
146
+ --font-serif: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
147
+ --font-mono: "GeistMono Variable", "JetBrains Mono", "Fira Code", Consolas, monospace;
148
+ --radius: 1.4rem;
149
+ --shadow-x: 0px;
150
+ --shadow-y: 2px;
151
+ --shadow-blur: 3px;
152
+ --shadow-spread: 0px;
153
+ --shadow-opacity: 0.16;
154
+ --shadow-color: hsl(0 0% 0%);
155
+ --shadow-2xs: 0px 2px 3px 0px hsl(0 0% 0% / 0.08);
156
+ --shadow-xs: 0px 2px 3px 0px hsl(0 0% 0% / 0.08);
157
+ --shadow-sm: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 1px 2px -1px hsl(0 0% 0% / 0.16);
158
+ --shadow: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 1px 2px -1px hsl(0 0% 0% / 0.16);
159
+ --shadow-md: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 2px 4px -1px hsl(0 0% 0% / 0.16);
160
+ --shadow-lg: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 4px 6px -1px hsl(0 0% 0% / 0.16);
161
+ --shadow-xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 8px 10px -1px hsl(0 0% 0% / 0.16);
162
+ --shadow-2xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.4);
163
+ }
164
+
165
+ @layer base {
166
+ * {
167
+ @apply border-border outline-ring/50;
168
+ }
169
+ body {
170
+ @apply bg-background text-foreground min-w-[320px] min-h-screen relative m-0;
171
+ }
172
+ }
173
+
174
+ /* Utility classes */
175
+ .scrollbar-hide {
176
+ -ms-overflow-style: none;
177
+ scrollbar-width: none;
178
+ }
179
+
180
+ .scrollbar-hide::-webkit-scrollbar {
181
+ display: none;
182
+ }
183
+
184
+ /* Weather widget animations */
185
+ @keyframes rainFall {
186
+ to {
187
+ transform: translateY(110vh);
188
+ }
189
+ }
190
+
191
+ @keyframes snowFall {
192
+ to {
193
+ transform: translateY(110vh);
194
+ }
195
+ }
196
+
197
+ @keyframes sway {
198
+ 0%,
199
+ 100% {
200
+ transform: translateX(0);
201
+ }
202
+ 50% {
203
+ transform: translateX(20px);
204
+ }
205
+ }
206
+
207
+ @keyframes windBlow {
208
+ to {
209
+ transform: translateX(calc(100vw + 200px));
210
+ }
211
+ }
212
+
213
+ @keyframes swirl {
214
+ 0%,
215
+ 100% {
216
+ transform: translate(0, 0) rotate(0deg);
217
+ }
218
+ 50% {
219
+ transform: translate(30px, -20px) rotate(180deg);
220
+ }
221
+ }
222
+
223
+ @keyframes cloudDrift {
224
+ to {
225
+ transform: translateX(calc(100vw + 200px));
226
+ }
227
+ }
228
+
229
+ @keyframes fogDrift {
230
+ to {
231
+ transform: translateX(50vw);
232
+ }
233
+ }
234
+
235
+ @keyframes shootingStar {
236
+ 0% {
237
+ transform: translate(0, 0) rotate(-45deg);
238
+ opacity: 0;
239
+ }
240
+ 10% {
241
+ opacity: 1;
242
+ }
243
+ 100% {
244
+ transform: translate(-400px, 400px) rotate(-45deg);
245
+ opacity: 0;
246
+ }
247
+ }
248
+
249
+ /* Loading and Error screen animations */
250
+ @keyframes float {
251
+ 0%,
252
+ 100% {
253
+ transform: translateY(0px);
254
+ }
255
+ 50% {
256
+ transform: translateY(-10px);
257
+ }
258
+ }
259
+
260
+ @keyframes spin-slow {
261
+ from {
262
+ transform: rotate(0deg);
263
+ }
264
+ to {
265
+ transform: rotate(360deg);
266
+ }
267
+ }
268
+
269
+ .animate-float {
270
+ animation: float 3s ease-in-out infinite;
271
+ }
272
+
273
+ .animate-spin-slow {
274
+ animation: spin-slow 8s linear infinite;
275
+ }
276
+
277
+ /* Line clamp utilities */
278
+ .line-clamp-1 {
279
+ overflow: hidden;
280
+ display: -webkit-box;
281
+ -webkit-box-orient: vertical;
282
+ -webkit-line-clamp: 1;
283
+ }
284
+
285
+ .line-clamp-2 {
286
+ overflow: hidden;
287
+ display: -webkit-box;
288
+ -webkit-box-orient: vertical;
289
+ -webkit-line-clamp: 2;
290
+ }
291
+
292
+ .line-clamp-3 {
293
+ overflow: hidden;
294
+ display: -webkit-box;
295
+ -webkit-box-orient: vertical;
296
+ -webkit-line-clamp: 3;
297
+ }
298
+
299
+ /* Widget fade-in and slide animation */
300
+ @keyframes widget-slot-in {
301
+ from {
302
+ opacity: 0;
303
+ transform: translateY(30px);
304
+ }
305
+ to {
306
+ opacity: 1;
307
+ transform: translateY(0);
308
+ }
309
+ }
310
+
311
+ .widget-slot-in {
312
+ opacity: 0;
313
+ animation: widget-slot-in 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
314
+ }
315
+
316
+ /* Geometric Background Animations */
317
+ @keyframes geometric-entrance {
318
+ from {
319
+ opacity: 0;
320
+ transform: translate(var(--entrance-x, 0px), var(--entrance-y, 0px)) scale(0.8)
321
+ rotate(var(--entrance-rotate, 0deg));
322
+ }
323
+ to {
324
+ opacity: 1;
325
+ transform: translate(0, 0) scale(1) rotate(var(--final-rotate, 0deg));
326
+ }
327
+ }
328
+
329
+ @keyframes geometric-float {
330
+ 0% {
331
+ transform: translate(0, 0) scale(1) rotate(var(--base-rotate, 0deg));
332
+ }
333
+ 25% {
334
+ transform: translate(-10px, 12px) scale(1.025) rotate(calc(var(--base-rotate, 0deg) + 6deg));
335
+ }
336
+ 50% {
337
+ transform: translate(11px, -8px) scale(0.98) rotate(calc(var(--base-rotate, 0deg) - 5deg));
338
+ }
339
+ 75% {
340
+ transform: translate(-7px, 10px) scale(1.02) rotate(calc(var(--base-rotate, 0deg) + 7deg));
341
+ }
342
+ 100% {
343
+ transform: translate(0, 0) scale(1) rotate(var(--base-rotate, 0deg));
344
+ }
345
+ }
346
+
347
+ .geometric-shape-entrance {
348
+ animation: geometric-entrance 3s cubic-bezier(0.34, 1.4, 0.64, 1) forwards;
349
+ animation-delay: var(--entrance-delay, 0s);
350
+ opacity: 0;
351
+ }
352
+
353
+ .geometric-shape-float {
354
+ animation: geometric-float var(--float-duration, 18s) ease-in-out infinite;
355
+ will-change: transform;
356
+ }
357
+
358
+ @media (prefers-reduced-motion: reduce) {
359
+ .geometric-shape-entrance {
360
+ animation: none;
361
+ opacity: 1;
362
+ transform: translate(0, 0) scale(1) rotate(var(--final-rotate, 0deg));
363
+ }
364
+ .geometric-shape-float {
365
+ animation: none;
366
+ }
367
+ }
368
+
369
+ /* Area title transition animations only */
370
+ ::view-transition-old(area-title),
371
+ ::view-transition-new(area-title) {
372
+ animation-duration: 0.4s;
373
+ animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
374
+ }
375
+
376
+ ::view-transition-old(area-title) {
377
+ animation-name: fade-out-scale;
378
+ }
379
+
380
+ ::view-transition-new(area-title) {
381
+ animation-name: fade-in-scale;
382
+ }
383
+
384
+ @keyframes fade-out-scale {
385
+ from {
386
+ opacity: 1;
387
+ transform: scale(1);
388
+ }
389
+ to {
390
+ opacity: 0;
391
+ transform: scale(0.95);
392
+ }
393
+ }
394
+
395
+ @keyframes fade-in-scale {
396
+ from {
397
+ opacity: 0;
398
+ transform: scale(1.05);
399
+ }
400
+ to {
401
+ opacity: 1;
402
+ transform: scale(1);
403
+ }
404
+ }
405
+
406
+ @media (prefers-reduced-motion) {
407
+ ::view-transition-old(area-title),
408
+ ::view-transition-new(area-title) {
409
+ animation: none !important;
410
+ }
411
+ }