jasmincss 1.0.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 (76) hide show
  1. package/README.md +524 -0
  2. package/bin/jasmin.js +45 -0
  3. package/dist/index.d.ts +62 -0
  4. package/dist/index.js +14568 -0
  5. package/dist/index.mjs +14524 -0
  6. package/dist/jasmin.css +63308 -0
  7. package/dist/jasmin.min.css +1 -0
  8. package/dist/plugins/nextjs.js +14777 -0
  9. package/dist/plugins/nextjs.mjs +14747 -0
  10. package/dist/plugins/vite.js +14889 -0
  11. package/dist/plugins/vite.mjs +14860 -0
  12. package/package.json +101 -0
  13. package/src/cli/add.js +83 -0
  14. package/src/cli/init.js +210 -0
  15. package/src/cli/run.js +142 -0
  16. package/src/components/accordion.js +309 -0
  17. package/src/components/alerts.js +357 -0
  18. package/src/components/avatars.js +331 -0
  19. package/src/components/badges.js +353 -0
  20. package/src/components/buttons.js +412 -0
  21. package/src/components/cards.js +342 -0
  22. package/src/components/carousel.js +495 -0
  23. package/src/components/chips.js +440 -0
  24. package/src/components/command-palette.js +434 -0
  25. package/src/components/datepicker.js +517 -0
  26. package/src/components/dropdown.js +411 -0
  27. package/src/components/forms.js +516 -0
  28. package/src/components/index.js +81 -0
  29. package/src/components/modals.js +349 -0
  30. package/src/components/navigation.js +463 -0
  31. package/src/components/offcanvas.js +390 -0
  32. package/src/components/popover.js +427 -0
  33. package/src/components/progress.js +396 -0
  34. package/src/components/rating.js +394 -0
  35. package/src/components/skeleton.js +408 -0
  36. package/src/components/spinner.js +453 -0
  37. package/src/components/stepper.js +389 -0
  38. package/src/components/tables.js +304 -0
  39. package/src/components/timeline.js +452 -0
  40. package/src/components/timepicker.js +529 -0
  41. package/src/components/tooltips.js +345 -0
  42. package/src/components/upload.js +490 -0
  43. package/src/config/defaults.js +263 -0
  44. package/src/config/loader.js +109 -0
  45. package/src/core/base.js +241 -0
  46. package/src/core/compiler.js +135 -0
  47. package/src/core/utilities/accessibility.js +290 -0
  48. package/src/core/utilities/animations.js +205 -0
  49. package/src/core/utilities/background.js +109 -0
  50. package/src/core/utilities/colors.js +234 -0
  51. package/src/core/utilities/columns.js +161 -0
  52. package/src/core/utilities/effects.js +261 -0
  53. package/src/core/utilities/filters.js +135 -0
  54. package/src/core/utilities/icons.js +806 -0
  55. package/src/core/utilities/index.js +239 -0
  56. package/src/core/utilities/layout.js +321 -0
  57. package/src/core/utilities/scroll.js +205 -0
  58. package/src/core/utilities/spacing.js +120 -0
  59. package/src/core/utilities/svg.js +191 -0
  60. package/src/core/utilities/transforms.js +116 -0
  61. package/src/core/utilities/typography.js +188 -0
  62. package/src/index.js +7 -0
  63. package/src/js/components/accordion.js +154 -0
  64. package/src/js/components/alert.js +198 -0
  65. package/src/js/components/carousel.js +226 -0
  66. package/src/js/components/dropdown.js +166 -0
  67. package/src/js/components/modal.js +169 -0
  68. package/src/js/components/offcanvas.js +175 -0
  69. package/src/js/components/popover.js +221 -0
  70. package/src/js/components/tabs.js +163 -0
  71. package/src/js/components/tooltip.js +200 -0
  72. package/src/js/index.js +79 -0
  73. package/src/js/types/config.d.ts +228 -0
  74. package/src/js/types/index.d.ts +439 -0
  75. package/src/plugins/nextjs.js +100 -0
  76. package/src/plugins/vite.js +133 -0
@@ -0,0 +1,490 @@
1
+ // File Upload component for JasminCSS
2
+
3
+ export function generateUploadStyles(config) {
4
+ return `/* Upload Zone Base */
5
+ .upload-zone {
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ justify-content: center;
10
+ padding: 2rem;
11
+ min-height: 12rem;
12
+ border: 2px dashed var(--j-border);
13
+ border-radius: var(--j-radius-lg, 0.5rem);
14
+ background-color: var(--j-bg-subtle);
15
+ cursor: pointer;
16
+ transition: all 200ms ease-in-out;
17
+ }
18
+
19
+ .upload-zone:hover {
20
+ border-color: var(--j-primary);
21
+ background-color: color-mix(in srgb, var(--j-primary) 5%, transparent);
22
+ }
23
+
24
+ .upload-zone:focus-within {
25
+ border-color: var(--j-primary);
26
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--j-primary) 20%, transparent);
27
+ }
28
+
29
+ /* Drag Active State */
30
+ .upload-zone.drag-active,
31
+ .upload-zone.dragover {
32
+ border-color: var(--j-primary);
33
+ background-color: color-mix(in srgb, var(--j-primary) 10%, transparent);
34
+ border-style: solid;
35
+ }
36
+
37
+ /* Upload Icon */
38
+ .upload-icon {
39
+ width: 3rem;
40
+ height: 3rem;
41
+ margin-bottom: 1rem;
42
+ color: var(--j-text-muted);
43
+ transition: color 200ms ease-in-out;
44
+ }
45
+
46
+ .upload-zone:hover .upload-icon,
47
+ .upload-zone.drag-active .upload-icon {
48
+ color: var(--j-primary);
49
+ }
50
+
51
+ /* Default cloud upload icon */
52
+ .upload-icon::before {
53
+ content: "☁";
54
+ font-size: 3rem;
55
+ line-height: 1;
56
+ }
57
+
58
+ .upload-icon:has(svg)::before {
59
+ display: none;
60
+ }
61
+
62
+ /* Upload Text */
63
+ .upload-text {
64
+ text-align: center;
65
+ }
66
+
67
+ .upload-title {
68
+ margin: 0 0 0.25rem;
69
+ font-size: 1rem;
70
+ font-weight: 500;
71
+ color: var(--j-text);
72
+ }
73
+
74
+ .upload-title-link {
75
+ color: var(--j-primary);
76
+ text-decoration: underline;
77
+ cursor: pointer;
78
+ }
79
+
80
+ .upload-description {
81
+ margin: 0;
82
+ font-size: 0.875rem;
83
+ color: var(--j-text-muted);
84
+ }
85
+
86
+ /* Hidden Input */
87
+ .upload-input {
88
+ position: absolute;
89
+ width: 1px;
90
+ height: 1px;
91
+ padding: 0;
92
+ margin: -1px;
93
+ overflow: hidden;
94
+ clip: rect(0, 0, 0, 0);
95
+ white-space: nowrap;
96
+ border: 0;
97
+ }
98
+
99
+ /* Upload Sizes */
100
+ .upload-zone-sm {
101
+ padding: 1.5rem;
102
+ min-height: 8rem;
103
+ }
104
+
105
+ .upload-zone-sm .upload-icon {
106
+ width: 2rem;
107
+ height: 2rem;
108
+ margin-bottom: 0.75rem;
109
+ }
110
+
111
+ .upload-zone-sm .upload-icon::before {
112
+ font-size: 2rem;
113
+ }
114
+
115
+ .upload-zone-lg {
116
+ padding: 3rem;
117
+ min-height: 16rem;
118
+ }
119
+
120
+ .upload-zone-lg .upload-icon {
121
+ width: 4rem;
122
+ height: 4rem;
123
+ }
124
+
125
+ .upload-zone-lg .upload-icon::before {
126
+ font-size: 4rem;
127
+ }
128
+
129
+ /* Upload Compact (inline) */
130
+ .upload-compact {
131
+ flex-direction: row;
132
+ padding: 1rem;
133
+ min-height: auto;
134
+ gap: 1rem;
135
+ }
136
+
137
+ .upload-compact .upload-icon {
138
+ width: 2rem;
139
+ height: 2rem;
140
+ margin-bottom: 0;
141
+ }
142
+
143
+ .upload-compact .upload-text {
144
+ text-align: left;
145
+ }
146
+
147
+ /* Upload Colors */
148
+ .upload-zone-primary {
149
+ border-color: var(--j-primary);
150
+ background-color: color-mix(in srgb, var(--j-primary) 5%, transparent);
151
+ }
152
+
153
+ .upload-zone-success {
154
+ border-color: var(--j-success);
155
+ }
156
+
157
+ .upload-zone-success:hover {
158
+ border-color: var(--j-success);
159
+ background-color: color-mix(in srgb, var(--j-success) 10%, transparent);
160
+ }
161
+
162
+ /* Upload Error State */
163
+ .upload-zone-error {
164
+ border-color: var(--j-error);
165
+ background-color: color-mix(in srgb, var(--j-error) 5%, transparent);
166
+ }
167
+
168
+ .upload-zone-error .upload-icon {
169
+ color: var(--j-error);
170
+ }
171
+
172
+ /* Upload Disabled */
173
+ .upload-zone-disabled {
174
+ opacity: 0.5;
175
+ cursor: not-allowed;
176
+ pointer-events: none;
177
+ }
178
+
179
+ /* File List */
180
+ .upload-file-list {
181
+ display: flex;
182
+ flex-direction: column;
183
+ gap: 0.5rem;
184
+ margin-top: 1rem;
185
+ width: 100%;
186
+ }
187
+
188
+ .upload-file-item {
189
+ display: flex;
190
+ align-items: center;
191
+ gap: 0.75rem;
192
+ padding: 0.75rem 1rem;
193
+ background-color: var(--j-bg);
194
+ border: 1px solid var(--j-border);
195
+ border-radius: var(--j-radius-default, 0.375rem);
196
+ }
197
+
198
+ .upload-file-icon {
199
+ width: 2rem;
200
+ height: 2rem;
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ background-color: var(--j-bg-subtle);
205
+ border-radius: var(--j-radius-default, 0.375rem);
206
+ color: var(--j-text-muted);
207
+ flex-shrink: 0;
208
+ }
209
+
210
+ .upload-file-info {
211
+ flex: 1;
212
+ min-width: 0;
213
+ }
214
+
215
+ .upload-file-name {
216
+ font-size: 0.875rem;
217
+ font-weight: 500;
218
+ color: var(--j-text);
219
+ white-space: nowrap;
220
+ overflow: hidden;
221
+ text-overflow: ellipsis;
222
+ }
223
+
224
+ .upload-file-size {
225
+ font-size: 0.75rem;
226
+ color: var(--j-text-muted);
227
+ }
228
+
229
+ .upload-file-remove {
230
+ display: flex;
231
+ align-items: center;
232
+ justify-content: center;
233
+ width: 1.5rem;
234
+ height: 1.5rem;
235
+ padding: 0;
236
+ background: transparent;
237
+ border: none;
238
+ border-radius: 50%;
239
+ color: var(--j-text-muted);
240
+ cursor: pointer;
241
+ transition: all 150ms ease-in-out;
242
+ }
243
+
244
+ .upload-file-remove:hover {
245
+ background-color: var(--j-bg-muted);
246
+ color: var(--j-error);
247
+ }
248
+
249
+ .upload-file-remove::before {
250
+ content: "×";
251
+ font-size: 1.25rem;
252
+ line-height: 1;
253
+ }
254
+
255
+ /* File Item States */
256
+ .upload-file-item-uploading {
257
+ position: relative;
258
+ overflow: hidden;
259
+ }
260
+
261
+ .upload-file-item-uploading::after {
262
+ content: "";
263
+ position: absolute;
264
+ bottom: 0;
265
+ left: 0;
266
+ height: 3px;
267
+ background-color: var(--j-primary);
268
+ animation: upload-progress 2s ease-in-out infinite;
269
+ }
270
+
271
+ @keyframes upload-progress {
272
+ 0% { width: 0; }
273
+ 50% { width: 70%; }
274
+ 100% { width: 100%; }
275
+ }
276
+
277
+ .upload-file-item-success {
278
+ border-color: var(--j-success);
279
+ }
280
+
281
+ .upload-file-item-success .upload-file-icon {
282
+ background-color: color-mix(in srgb, var(--j-success) 15%, transparent);
283
+ color: var(--j-success);
284
+ }
285
+
286
+ .upload-file-item-error {
287
+ border-color: var(--j-error);
288
+ background-color: color-mix(in srgb, var(--j-error) 5%, transparent);
289
+ }
290
+
291
+ .upload-file-item-error .upload-file-icon {
292
+ background-color: color-mix(in srgb, var(--j-error) 15%, transparent);
293
+ color: var(--j-error);
294
+ }
295
+
296
+ /* Upload Progress */
297
+ .upload-progress {
298
+ width: 100%;
299
+ margin-top: 0.5rem;
300
+ }
301
+
302
+ .upload-progress-bar {
303
+ height: 0.25rem;
304
+ background-color: var(--j-bg-muted);
305
+ border-radius: var(--j-radius-full, 9999px);
306
+ overflow: hidden;
307
+ }
308
+
309
+ .upload-progress-fill {
310
+ height: 100%;
311
+ background-color: var(--j-primary);
312
+ border-radius: var(--j-radius-full, 9999px);
313
+ transition: width 200ms ease-in-out;
314
+ }
315
+
316
+ .upload-progress-text {
317
+ display: flex;
318
+ justify-content: space-between;
319
+ margin-top: 0.25rem;
320
+ font-size: 0.75rem;
321
+ color: var(--j-text-muted);
322
+ }
323
+
324
+ /* Image Preview */
325
+ .upload-preview {
326
+ display: grid;
327
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
328
+ gap: 0.75rem;
329
+ margin-top: 1rem;
330
+ }
331
+
332
+ .upload-preview-item {
333
+ position: relative;
334
+ aspect-ratio: 1;
335
+ border-radius: var(--j-radius-default, 0.375rem);
336
+ overflow: hidden;
337
+ border: 1px solid var(--j-border);
338
+ }
339
+
340
+ .upload-preview-item img {
341
+ width: 100%;
342
+ height: 100%;
343
+ object-fit: cover;
344
+ }
345
+
346
+ .upload-preview-overlay {
347
+ position: absolute;
348
+ inset: 0;
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: center;
352
+ background-color: rgba(0, 0, 0, 0.5);
353
+ opacity: 0;
354
+ transition: opacity 200ms ease-in-out;
355
+ }
356
+
357
+ .upload-preview-item:hover .upload-preview-overlay {
358
+ opacity: 1;
359
+ }
360
+
361
+ .upload-preview-remove {
362
+ display: flex;
363
+ align-items: center;
364
+ justify-content: center;
365
+ width: 2rem;
366
+ height: 2rem;
367
+ background-color: white;
368
+ border: none;
369
+ border-radius: 50%;
370
+ color: var(--j-error);
371
+ cursor: pointer;
372
+ transition: transform 150ms ease-in-out;
373
+ }
374
+
375
+ .upload-preview-remove:hover {
376
+ transform: scale(1.1);
377
+ }
378
+
379
+ /* Avatar Upload */
380
+ .upload-avatar {
381
+ position: relative;
382
+ display: inline-block;
383
+ }
384
+
385
+ .upload-avatar-preview {
386
+ width: 6rem;
387
+ height: 6rem;
388
+ border-radius: 50%;
389
+ object-fit: cover;
390
+ border: 3px solid var(--j-border);
391
+ }
392
+
393
+ .upload-avatar-button {
394
+ position: absolute;
395
+ bottom: 0;
396
+ right: 0;
397
+ display: flex;
398
+ align-items: center;
399
+ justify-content: center;
400
+ width: 2rem;
401
+ height: 2rem;
402
+ background-color: var(--j-primary);
403
+ border: 2px solid var(--j-bg);
404
+ border-radius: 50%;
405
+ color: white;
406
+ cursor: pointer;
407
+ transition: background-color 150ms ease-in-out;
408
+ }
409
+
410
+ .upload-avatar-button:hover {
411
+ background-color: color-mix(in srgb, var(--j-primary) 85%, black);
412
+ }
413
+
414
+ /* Dark Variant */
415
+ .upload-zone-dark {
416
+ background-color: var(--j-bg-dark, #1f2937);
417
+ border-color: var(--j-border-dark, #374151);
418
+ color: white;
419
+ }
420
+
421
+ .upload-zone-dark .upload-title {
422
+ color: white;
423
+ }
424
+
425
+ .upload-zone-dark .upload-description {
426
+ color: rgba(255, 255, 255, 0.6);
427
+ }
428
+
429
+ .upload-zone-dark:hover {
430
+ background-color: rgba(255, 255, 255, 0.05);
431
+ }
432
+
433
+ /* Glass Variant */
434
+ .upload-zone-glass {
435
+ background: rgba(255, 255, 255, 0.1);
436
+ backdrop-filter: blur(12px);
437
+ -webkit-backdrop-filter: blur(12px);
438
+ border-color: rgba(255, 255, 255, 0.2);
439
+ }
440
+
441
+ .upload-zone-glass:hover {
442
+ background: rgba(255, 255, 255, 0.15);
443
+ border-color: rgba(255, 255, 255, 0.3);
444
+ }
445
+
446
+ /* Button Style Upload */
447
+ .upload-button {
448
+ display: inline-flex;
449
+ align-items: center;
450
+ gap: 0.5rem;
451
+ padding: 0.5rem 1rem;
452
+ background-color: var(--j-primary);
453
+ color: white;
454
+ border: none;
455
+ border-radius: var(--j-radius-default, 0.375rem);
456
+ font-size: 0.875rem;
457
+ font-weight: 500;
458
+ cursor: pointer;
459
+ transition: background-color 150ms ease-in-out;
460
+ }
461
+
462
+ .upload-button:hover {
463
+ background-color: color-mix(in srgb, var(--j-primary) 85%, black);
464
+ }
465
+
466
+ .upload-button-icon {
467
+ width: 1rem;
468
+ height: 1rem;
469
+ }
470
+
471
+ /* Constraints Display */
472
+ .upload-constraints {
473
+ display: flex;
474
+ flex-wrap: wrap;
475
+ gap: 0.5rem;
476
+ margin-top: 0.5rem;
477
+ font-size: 0.75rem;
478
+ color: var(--j-text-muted);
479
+ }
480
+
481
+ .upload-constraint {
482
+ display: inline-flex;
483
+ align-items: center;
484
+ gap: 0.25rem;
485
+ padding: 0.125rem 0.5rem;
486
+ background-color: var(--j-bg-subtle);
487
+ border-radius: var(--j-radius-full, 9999px);
488
+ }
489
+ `;
490
+ }