plusui-native-core 0.1.105 → 0.1.106

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 (48) hide show
  1. package/Core/.claude/settings.local.json +7 -0
  2. package/Core/CMakeLists.txt +1 -1
  3. package/Core/Features/API/app-api.ts +28 -28
  4. package/Core/Features/API/browser-api.ts +38 -38
  5. package/Core/Features/API/clipboard-api.ts +21 -21
  6. package/Core/Features/API/display-api.ts +33 -33
  7. package/Core/Features/API/keyboard-api.ts +33 -33
  8. package/Core/Features/API/menu-api.ts +39 -39
  9. package/Core/Features/API/router-api.ts +23 -23
  10. package/Core/Features/API/tray-api.ts +22 -22
  11. package/Core/Features/API/webgpu-api.ts +55 -55
  12. package/Core/Features/App/app.cpp +128 -102
  13. package/Core/Features/Browser/browser.cpp +227 -227
  14. package/Core/Features/Browser/browser.ts +161 -161
  15. package/Core/Features/Clipboard/clipboard.cpp +235 -235
  16. package/Core/Features/Display/display.cpp +212 -212
  17. package/Core/Features/FileDrop/filedrop.cpp +448 -324
  18. package/Core/Features/FileDrop/filedrop.css +421 -421
  19. package/Core/Features/FileDrop/filedrop.ts +0 -7
  20. package/Core/Features/Keyboard/keyboard_linux.cpp +4 -0
  21. package/Core/Features/Router/router.cpp +62 -62
  22. package/Core/Features/Router/router.ts +113 -113
  23. package/Core/Features/Tray/tray.cpp +328 -324
  24. package/Core/Features/WebGPU/webgpu.cpp +948 -948
  25. package/Core/Features/Window/webview.cpp +1009 -1009
  26. package/Core/Features/Window/webview.ts +516 -516
  27. package/Core/Features/Window/window.cpp +2240 -1986
  28. package/Core/include/plusui/api.hpp +237 -237
  29. package/Core/include/plusui/app.hpp +33 -33
  30. package/Core/include/plusui/browser.hpp +67 -67
  31. package/Core/include/plusui/clipboard.hpp +41 -41
  32. package/Core/include/plusui/connect.hpp +340 -340
  33. package/Core/include/plusui/connection.hpp +3 -3
  34. package/Core/include/plusui/display.hpp +90 -90
  35. package/Core/include/plusui/filedrop.hpp +92 -77
  36. package/Core/include/plusui/keyboard.hpp +112 -112
  37. package/Core/include/plusui/menu.hpp +153 -153
  38. package/Core/include/plusui/plusui +18 -18
  39. package/Core/include/plusui/router.hpp +42 -42
  40. package/Core/include/plusui/tray.hpp +94 -94
  41. package/Core/include/plusui/webgpu.hpp +434 -434
  42. package/Core/include/plusui/window.hpp +180 -177
  43. package/Core/scripts/generate-umbrella-header.mjs +77 -77
  44. package/Core/vendor/WebView2EnvironmentOptions.h +406 -406
  45. package/Core/vendor/webview.h +487 -487
  46. package/Core/vendor/webview2.h +52079 -52079
  47. package/README.md +19 -19
  48. package/package.json +1 -1
@@ -1,421 +1,421 @@
1
- /**
2
- * FileDrop Styles - Drop zone styling for drag & drop functionality
3
- *
4
- * Usage:
5
- * <div class="filedrop-zone">
6
- * Drop files here
7
- * </div>
8
- *
9
- * States automatically applied via JavaScript:
10
- * - .filedrop-active: When drag enters the zone
11
- * - .filedrop-disabled: When file drop is disabled
12
- */
13
-
14
- /* ============================================================================
15
- * BASE DROP ZONE STYLES
16
- * ============================================================================ */
17
-
18
- .filedrop-zone {
19
- position: relative;
20
- display: flex;
21
- flex-direction: column;
22
- align-items: center;
23
- justify-content: center;
24
- min-height: 200px;
25
- padding: 2rem;
26
- border: 2px dashed #cbd5e1;
27
- border-radius: 0.75rem;
28
- background-color: #f8fafc;
29
- transition: all 0.2s ease-in-out;
30
- cursor: pointer;
31
- user-select: none;
32
- }
33
-
34
- .filedrop-zone:hover {
35
- border-color: #94a3b8;
36
- background-color: #f1f5f9;
37
- }
38
-
39
- /* ============================================================================
40
- * ACTIVE STATE (Drag Over)
41
- * ============================================================================ */
42
-
43
- .filedrop-zone.filedrop-active {
44
- border-color: #3b82f6;
45
- background-color: #eff6ff;
46
- border-width: 3px;
47
- transform: scale(1.02);
48
- box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);
49
- }
50
-
51
- .filedrop-zone.filedrop-active::before {
52
- content: '';
53
- position: absolute;
54
- inset: 0;
55
- border-radius: 0.5rem;
56
- background: linear-gradient(135deg, rgba(59, 130, 246, 0.05), rgba(147, 51, 234, 0.05));
57
- pointer-events: none;
58
- }
59
-
60
- /* ============================================================================
61
- * DISABLED STATE
62
- * ============================================================================ */
63
-
64
- .filedrop-zone.filedrop-disabled {
65
- opacity: 0.5;
66
- cursor: not-allowed;
67
- border-color: #e2e8f0;
68
- background-color: #f8fafc;
69
- }
70
-
71
- .filedrop-zone.filedrop-disabled:hover {
72
- border-color: #e2e8f0;
73
- background-color: #f8fafc;
74
- transform: none;
75
- }
76
-
77
- /* ============================================================================
78
- * DROP ZONE CONTENT
79
- * ============================================================================ */
80
-
81
- .filedrop-content {
82
- display: flex;
83
- flex-direction: column;
84
- align-items: center;
85
- gap: 1rem;
86
- text-align: center;
87
- pointer-events: none;
88
- }
89
-
90
- .filedrop-icon {
91
- width: 3rem;
92
- height: 3rem;
93
- color: #94a3b8;
94
- transition: all 0.2s ease-in-out;
95
- }
96
-
97
- .filedrop-zone.filedrop-active .filedrop-icon {
98
- color: #3b82f6;
99
- transform: scale(1.2);
100
- }
101
-
102
- .filedrop-zone.filedrop-disabled .filedrop-icon {
103
- color: #cbd5e1;
104
- }
105
-
106
- .filedrop-text {
107
- font-size: 1rem;
108
- font-weight: 500;
109
- color: #475569;
110
- transition: color 0.2s ease-in-out;
111
- }
112
-
113
- .filedrop-zone.filedrop-active .filedrop-text {
114
- color: #3b82f6;
115
- font-weight: 600;
116
- }
117
-
118
- .filedrop-zone.filedrop-disabled .filedrop-text {
119
- color: #cbd5e1;
120
- }
121
-
122
- .filedrop-hint {
123
- font-size: 0.875rem;
124
- color: #94a3b8;
125
- transition: color 0.2s ease-in-out;
126
- }
127
-
128
- .filedrop-zone.filedrop-active .filedrop-hint {
129
- color: #60a5fa;
130
- }
131
-
132
- .filedrop-zone.filedrop-disabled .filedrop-hint {
133
- color: #cbd5e1;
134
- }
135
-
136
- /* ============================================================================
137
- * COMPACT VARIANT
138
- * ============================================================================ */
139
-
140
- .filedrop-zone.filedrop-compact {
141
- min-height: 120px;
142
- padding: 1.5rem;
143
- }
144
-
145
- .filedrop-zone.filedrop-compact .filedrop-icon {
146
- width: 2rem;
147
- height: 2rem;
148
- }
149
-
150
- .filedrop-zone.filedrop-compact .filedrop-text {
151
- font-size: 0.875rem;
152
- }
153
-
154
- .filedrop-zone.filedrop-compact .filedrop-hint {
155
- font-size: 0.75rem;
156
- }
157
-
158
- /* ============================================================================
159
- * INLINE VARIANT (Full Width)
160
- * ============================================================================ */
161
-
162
- .filedrop-zone.filedrop-inline {
163
- min-height: 80px;
164
- padding: 1rem;
165
- flex-direction: row;
166
- justify-content: flex-start;
167
- gap: 1rem;
168
- }
169
-
170
- .filedrop-zone.filedrop-inline .filedrop-content {
171
- flex-direction: row;
172
- align-items: center;
173
- text-align: left;
174
- gap: 0.75rem;
175
- }
176
-
177
- .filedrop-zone.filedrop-inline .filedrop-icon {
178
- width: 2rem;
179
- height: 2rem;
180
- }
181
-
182
- /* ============================================================================
183
- * FILE LIST DISPLAY
184
- * ============================================================================ */
185
-
186
- .filedrop-files {
187
- margin-top: 1rem;
188
- width: 100%;
189
- }
190
-
191
- .filedrop-file-item {
192
- display: flex;
193
- align-items: center;
194
- gap: 0.75rem;
195
- padding: 0.75rem;
196
- background-color: white;
197
- border: 1px solid #e2e8f0;
198
- border-radius: 0.5rem;
199
- margin-bottom: 0.5rem;
200
- transition: all 0.2s ease-in-out;
201
- }
202
-
203
- .filedrop-file-item:hover {
204
- border-color: #cbd5e1;
205
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
206
- }
207
-
208
- .filedrop-file-icon {
209
- width: 2rem;
210
- height: 2rem;
211
- flex-shrink: 0;
212
- display: flex;
213
- align-items: center;
214
- justify-content: center;
215
- background-color: #f1f5f9;
216
- border-radius: 0.375rem;
217
- color: #64748b;
218
- }
219
-
220
- .filedrop-file-info {
221
- flex: 1;
222
- min-width: 0;
223
- }
224
-
225
- .filedrop-file-name {
226
- font-size: 0.875rem;
227
- font-weight: 500;
228
- color: #334155;
229
- white-space: nowrap;
230
- overflow: hidden;
231
- text-overflow: ellipsis;
232
- }
233
-
234
- .filedrop-file-meta {
235
- font-size: 0.75rem;
236
- color: #94a3b8;
237
- margin-top: 0.125rem;
238
- }
239
-
240
- .filedrop-file-remove {
241
- flex-shrink: 0;
242
- width: 1.5rem;
243
- height: 1.5rem;
244
- display: flex;
245
- align-items: center;
246
- justify-content: center;
247
- border-radius: 0.25rem;
248
- color: #94a3b8;
249
- cursor: pointer;
250
- transition: all 0.2s ease-in-out;
251
- pointer-events: auto;
252
- }
253
-
254
- .filedrop-file-remove:hover {
255
- background-color: #fee2e2;
256
- color: #ef4444;
257
- }
258
-
259
- /* ============================================================================
260
- * DARK MODE SUPPORT
261
- * ============================================================================ */
262
-
263
- @media (prefers-color-scheme: dark) {
264
- .filedrop-zone {
265
- border-color: #475569;
266
- background-color: #1e293b;
267
- }
268
-
269
- .filedrop-zone:hover {
270
- border-color: #64748b;
271
- background-color: #334155;
272
- }
273
-
274
- .filedrop-zone.filedrop-active {
275
- border-color: #60a5fa;
276
- background-color: #1e3a8a;
277
- box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.1);
278
- }
279
-
280
- .filedrop-zone.filedrop-active::before {
281
- background: linear-gradient(135deg, rgba(96, 165, 250, 0.1), rgba(168, 85, 247, 0.1));
282
- }
283
-
284
- .filedrop-zone.filedrop-disabled {
285
- border-color: #334155;
286
- background-color: #1e293b;
287
- }
288
-
289
- .filedrop-icon {
290
- color: #64748b;
291
- }
292
-
293
- .filedrop-zone.filedrop-active .filedrop-icon {
294
- color: #60a5fa;
295
- }
296
-
297
- .filedrop-zone.filedrop-disabled .filedrop-icon {
298
- color: #475569;
299
- }
300
-
301
- .filedrop-text {
302
- color: #cbd5e1;
303
- }
304
-
305
- .filedrop-zone.filedrop-active .filedrop-text {
306
- color: #93c5fd;
307
- }
308
-
309
- .filedrop-zone.filedrop-disabled .filedrop-text {
310
- color: #64748b;
311
- }
312
-
313
- .filedrop-hint {
314
- color: #64748b;
315
- }
316
-
317
- .filedrop-zone.filedrop-active .filedrop-hint {
318
- color: #93c5fd;
319
- }
320
-
321
- .filedrop-file-item {
322
- background-color: #334155;
323
- border-color: #475569;
324
- }
325
-
326
- .filedrop-file-item:hover {
327
- border-color: #64748b;
328
- }
329
-
330
- .filedrop-file-icon {
331
- background-color: #1e293b;
332
- color: #94a3b8;
333
- }
334
-
335
- .filedrop-file-name {
336
- color: #e2e8f0;
337
- }
338
-
339
- .filedrop-file-meta {
340
- color: #64748b;
341
- }
342
-
343
- .filedrop-file-remove:hover {
344
- background-color: #7f1d1d;
345
- color: #fca5a5;
346
- }
347
- }
348
-
349
- /* ============================================================================
350
- * ANIMATION UTILITIES
351
- * ============================================================================ */
352
-
353
- @keyframes filedrop-pulse {
354
- 0%, 100% {
355
- opacity: 1;
356
- }
357
- 50% {
358
- opacity: 0.7;
359
- }
360
- }
361
-
362
- .filedrop-zone.filedrop-processing {
363
- animation: filedrop-pulse 1.5s ease-in-out infinite;
364
- pointer-events: none;
365
- }
366
-
367
- @keyframes filedrop-shake {
368
- 0%, 100% {
369
- transform: translateX(0);
370
- }
371
- 25% {
372
- transform: translateX(-4px);
373
- }
374
- 75% {
375
- transform: translateX(4px);
376
- }
377
- }
378
-
379
- .filedrop-zone.filedrop-error {
380
- border-color: #ef4444;
381
- background-color: #fee2e2;
382
- animation: filedrop-shake 0.3s ease-in-out;
383
- }
384
-
385
- @media (prefers-color-scheme: dark) {
386
- .filedrop-zone.filedrop-error {
387
- border-color: #f87171;
388
- background-color: #7f1d1d;
389
- }
390
- }
391
-
392
- /* ============================================================================
393
- * CUSTOM VARIANTS
394
- * ============================================================================ */
395
-
396
- /* Minimal variant - subtle styling */
397
- .filedrop-zone.filedrop-minimal {
398
- border-style: solid;
399
- border-width: 1px;
400
- background-color: transparent;
401
- }
402
-
403
- .filedrop-zone.filedrop-minimal:hover {
404
- background-color: rgba(0, 0, 0, 0.02);
405
- }
406
-
407
- @media (prefers-color-scheme: dark) {
408
- .filedrop-zone.filedrop-minimal:hover {
409
- background-color: rgba(255, 255, 255, 0.02);
410
- }
411
- }
412
-
413
- /* Bold variant - prominent styling */
414
- .filedrop-zone.filedrop-bold {
415
- border-width: 3px;
416
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
417
- }
418
-
419
- .filedrop-zone.filedrop-bold.filedrop-active {
420
- box-shadow: 0 8px 16px rgba(59, 130, 246, 0.2);
421
- }
1
+ /**
2
+ * FileDrop Styles - Drop zone styling for drag & drop functionality
3
+ *
4
+ * Usage:
5
+ * <div class="filedrop-zone">
6
+ * Drop files here
7
+ * </div>
8
+ *
9
+ * States automatically applied via JavaScript:
10
+ * - .filedrop-active: When drag enters the zone
11
+ * - .filedrop-disabled: When file drop is disabled
12
+ */
13
+
14
+ /* ============================================================================
15
+ * BASE DROP ZONE STYLES
16
+ * ============================================================================ */
17
+
18
+ .filedrop-zone {
19
+ position: relative;
20
+ display: flex;
21
+ flex-direction: column;
22
+ align-items: center;
23
+ justify-content: center;
24
+ min-height: 200px;
25
+ padding: 2rem;
26
+ border: 2px dashed #cbd5e1;
27
+ border-radius: 0.75rem;
28
+ background-color: #f8fafc;
29
+ transition: all 0.2s ease-in-out;
30
+ cursor: pointer;
31
+ user-select: none;
32
+ }
33
+
34
+ .filedrop-zone:hover {
35
+ border-color: #94a3b8;
36
+ background-color: #f1f5f9;
37
+ }
38
+
39
+ /* ============================================================================
40
+ * ACTIVE STATE (Drag Over)
41
+ * ============================================================================ */
42
+
43
+ .filedrop-zone.filedrop-active {
44
+ border-color: #3b82f6;
45
+ background-color: #eff6ff;
46
+ border-width: 3px;
47
+ transform: scale(1.02);
48
+ box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);
49
+ }
50
+
51
+ .filedrop-zone.filedrop-active::before {
52
+ content: '';
53
+ position: absolute;
54
+ inset: 0;
55
+ border-radius: 0.5rem;
56
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.05), rgba(147, 51, 234, 0.05));
57
+ pointer-events: none;
58
+ }
59
+
60
+ /* ============================================================================
61
+ * DISABLED STATE
62
+ * ============================================================================ */
63
+
64
+ .filedrop-zone.filedrop-disabled {
65
+ opacity: 0.5;
66
+ cursor: not-allowed;
67
+ border-color: #e2e8f0;
68
+ background-color: #f8fafc;
69
+ }
70
+
71
+ .filedrop-zone.filedrop-disabled:hover {
72
+ border-color: #e2e8f0;
73
+ background-color: #f8fafc;
74
+ transform: none;
75
+ }
76
+
77
+ /* ============================================================================
78
+ * DROP ZONE CONTENT
79
+ * ============================================================================ */
80
+
81
+ .filedrop-content {
82
+ display: flex;
83
+ flex-direction: column;
84
+ align-items: center;
85
+ gap: 1rem;
86
+ text-align: center;
87
+ pointer-events: none;
88
+ }
89
+
90
+ .filedrop-icon {
91
+ width: 3rem;
92
+ height: 3rem;
93
+ color: #94a3b8;
94
+ transition: all 0.2s ease-in-out;
95
+ }
96
+
97
+ .filedrop-zone.filedrop-active .filedrop-icon {
98
+ color: #3b82f6;
99
+ transform: scale(1.2);
100
+ }
101
+
102
+ .filedrop-zone.filedrop-disabled .filedrop-icon {
103
+ color: #cbd5e1;
104
+ }
105
+
106
+ .filedrop-text {
107
+ font-size: 1rem;
108
+ font-weight: 500;
109
+ color: #475569;
110
+ transition: color 0.2s ease-in-out;
111
+ }
112
+
113
+ .filedrop-zone.filedrop-active .filedrop-text {
114
+ color: #3b82f6;
115
+ font-weight: 600;
116
+ }
117
+
118
+ .filedrop-zone.filedrop-disabled .filedrop-text {
119
+ color: #cbd5e1;
120
+ }
121
+
122
+ .filedrop-hint {
123
+ font-size: 0.875rem;
124
+ color: #94a3b8;
125
+ transition: color 0.2s ease-in-out;
126
+ }
127
+
128
+ .filedrop-zone.filedrop-active .filedrop-hint {
129
+ color: #60a5fa;
130
+ }
131
+
132
+ .filedrop-zone.filedrop-disabled .filedrop-hint {
133
+ color: #cbd5e1;
134
+ }
135
+
136
+ /* ============================================================================
137
+ * COMPACT VARIANT
138
+ * ============================================================================ */
139
+
140
+ .filedrop-zone.filedrop-compact {
141
+ min-height: 120px;
142
+ padding: 1.5rem;
143
+ }
144
+
145
+ .filedrop-zone.filedrop-compact .filedrop-icon {
146
+ width: 2rem;
147
+ height: 2rem;
148
+ }
149
+
150
+ .filedrop-zone.filedrop-compact .filedrop-text {
151
+ font-size: 0.875rem;
152
+ }
153
+
154
+ .filedrop-zone.filedrop-compact .filedrop-hint {
155
+ font-size: 0.75rem;
156
+ }
157
+
158
+ /* ============================================================================
159
+ * INLINE VARIANT (Full Width)
160
+ * ============================================================================ */
161
+
162
+ .filedrop-zone.filedrop-inline {
163
+ min-height: 80px;
164
+ padding: 1rem;
165
+ flex-direction: row;
166
+ justify-content: flex-start;
167
+ gap: 1rem;
168
+ }
169
+
170
+ .filedrop-zone.filedrop-inline .filedrop-content {
171
+ flex-direction: row;
172
+ align-items: center;
173
+ text-align: left;
174
+ gap: 0.75rem;
175
+ }
176
+
177
+ .filedrop-zone.filedrop-inline .filedrop-icon {
178
+ width: 2rem;
179
+ height: 2rem;
180
+ }
181
+
182
+ /* ============================================================================
183
+ * FILE LIST DISPLAY
184
+ * ============================================================================ */
185
+
186
+ .filedrop-files {
187
+ margin-top: 1rem;
188
+ width: 100%;
189
+ }
190
+
191
+ .filedrop-file-item {
192
+ display: flex;
193
+ align-items: center;
194
+ gap: 0.75rem;
195
+ padding: 0.75rem;
196
+ background-color: white;
197
+ border: 1px solid #e2e8f0;
198
+ border-radius: 0.5rem;
199
+ margin-bottom: 0.5rem;
200
+ transition: all 0.2s ease-in-out;
201
+ }
202
+
203
+ .filedrop-file-item:hover {
204
+ border-color: #cbd5e1;
205
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
206
+ }
207
+
208
+ .filedrop-file-icon {
209
+ width: 2rem;
210
+ height: 2rem;
211
+ flex-shrink: 0;
212
+ display: flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ background-color: #f1f5f9;
216
+ border-radius: 0.375rem;
217
+ color: #64748b;
218
+ }
219
+
220
+ .filedrop-file-info {
221
+ flex: 1;
222
+ min-width: 0;
223
+ }
224
+
225
+ .filedrop-file-name {
226
+ font-size: 0.875rem;
227
+ font-weight: 500;
228
+ color: #334155;
229
+ white-space: nowrap;
230
+ overflow: hidden;
231
+ text-overflow: ellipsis;
232
+ }
233
+
234
+ .filedrop-file-meta {
235
+ font-size: 0.75rem;
236
+ color: #94a3b8;
237
+ margin-top: 0.125rem;
238
+ }
239
+
240
+ .filedrop-file-remove {
241
+ flex-shrink: 0;
242
+ width: 1.5rem;
243
+ height: 1.5rem;
244
+ display: flex;
245
+ align-items: center;
246
+ justify-content: center;
247
+ border-radius: 0.25rem;
248
+ color: #94a3b8;
249
+ cursor: pointer;
250
+ transition: all 0.2s ease-in-out;
251
+ pointer-events: auto;
252
+ }
253
+
254
+ .filedrop-file-remove:hover {
255
+ background-color: #fee2e2;
256
+ color: #ef4444;
257
+ }
258
+
259
+ /* ============================================================================
260
+ * DARK MODE SUPPORT
261
+ * ============================================================================ */
262
+
263
+ @media (prefers-color-scheme: dark) {
264
+ .filedrop-zone {
265
+ border-color: #475569;
266
+ background-color: #1e293b;
267
+ }
268
+
269
+ .filedrop-zone:hover {
270
+ border-color: #64748b;
271
+ background-color: #334155;
272
+ }
273
+
274
+ .filedrop-zone.filedrop-active {
275
+ border-color: #60a5fa;
276
+ background-color: #1e3a8a;
277
+ box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.1);
278
+ }
279
+
280
+ .filedrop-zone.filedrop-active::before {
281
+ background: linear-gradient(135deg, rgba(96, 165, 250, 0.1), rgba(168, 85, 247, 0.1));
282
+ }
283
+
284
+ .filedrop-zone.filedrop-disabled {
285
+ border-color: #334155;
286
+ background-color: #1e293b;
287
+ }
288
+
289
+ .filedrop-icon {
290
+ color: #64748b;
291
+ }
292
+
293
+ .filedrop-zone.filedrop-active .filedrop-icon {
294
+ color: #60a5fa;
295
+ }
296
+
297
+ .filedrop-zone.filedrop-disabled .filedrop-icon {
298
+ color: #475569;
299
+ }
300
+
301
+ .filedrop-text {
302
+ color: #cbd5e1;
303
+ }
304
+
305
+ .filedrop-zone.filedrop-active .filedrop-text {
306
+ color: #93c5fd;
307
+ }
308
+
309
+ .filedrop-zone.filedrop-disabled .filedrop-text {
310
+ color: #64748b;
311
+ }
312
+
313
+ .filedrop-hint {
314
+ color: #64748b;
315
+ }
316
+
317
+ .filedrop-zone.filedrop-active .filedrop-hint {
318
+ color: #93c5fd;
319
+ }
320
+
321
+ .filedrop-file-item {
322
+ background-color: #334155;
323
+ border-color: #475569;
324
+ }
325
+
326
+ .filedrop-file-item:hover {
327
+ border-color: #64748b;
328
+ }
329
+
330
+ .filedrop-file-icon {
331
+ background-color: #1e293b;
332
+ color: #94a3b8;
333
+ }
334
+
335
+ .filedrop-file-name {
336
+ color: #e2e8f0;
337
+ }
338
+
339
+ .filedrop-file-meta {
340
+ color: #64748b;
341
+ }
342
+
343
+ .filedrop-file-remove:hover {
344
+ background-color: #7f1d1d;
345
+ color: #fca5a5;
346
+ }
347
+ }
348
+
349
+ /* ============================================================================
350
+ * ANIMATION UTILITIES
351
+ * ============================================================================ */
352
+
353
+ @keyframes filedrop-pulse {
354
+ 0%, 100% {
355
+ opacity: 1;
356
+ }
357
+ 50% {
358
+ opacity: 0.7;
359
+ }
360
+ }
361
+
362
+ .filedrop-zone.filedrop-processing {
363
+ animation: filedrop-pulse 1.5s ease-in-out infinite;
364
+ pointer-events: none;
365
+ }
366
+
367
+ @keyframes filedrop-shake {
368
+ 0%, 100% {
369
+ transform: translateX(0);
370
+ }
371
+ 25% {
372
+ transform: translateX(-4px);
373
+ }
374
+ 75% {
375
+ transform: translateX(4px);
376
+ }
377
+ }
378
+
379
+ .filedrop-zone.filedrop-error {
380
+ border-color: #ef4444;
381
+ background-color: #fee2e2;
382
+ animation: filedrop-shake 0.3s ease-in-out;
383
+ }
384
+
385
+ @media (prefers-color-scheme: dark) {
386
+ .filedrop-zone.filedrop-error {
387
+ border-color: #f87171;
388
+ background-color: #7f1d1d;
389
+ }
390
+ }
391
+
392
+ /* ============================================================================
393
+ * CUSTOM VARIANTS
394
+ * ============================================================================ */
395
+
396
+ /* Minimal variant - subtle styling */
397
+ .filedrop-zone.filedrop-minimal {
398
+ border-style: solid;
399
+ border-width: 1px;
400
+ background-color: transparent;
401
+ }
402
+
403
+ .filedrop-zone.filedrop-minimal:hover {
404
+ background-color: rgba(0, 0, 0, 0.02);
405
+ }
406
+
407
+ @media (prefers-color-scheme: dark) {
408
+ .filedrop-zone.filedrop-minimal:hover {
409
+ background-color: rgba(255, 255, 255, 0.02);
410
+ }
411
+ }
412
+
413
+ /* Bold variant - prominent styling */
414
+ .filedrop-zone.filedrop-bold {
415
+ border-width: 3px;
416
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
417
+ }
418
+
419
+ .filedrop-zone.filedrop-bold.filedrop-active {
420
+ box-shadow: 0 8px 16px rgba(59, 130, 246, 0.2);
421
+ }