@necrolab/dashboard 0.4.48 → 0.4.50

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 (42) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/.prettierrc +12 -1
  3. package/exit +209 -0
  4. package/index.html +1 -1
  5. package/package.json +1 -1
  6. package/public/manifest.json +8 -3
  7. package/src/assets/css/_input.scss +104 -111
  8. package/src/assets/css/_utilities.scss +441 -0
  9. package/src/assets/css/main.scss +228 -154
  10. package/src/components/Auth/LoginForm.vue +49 -6
  11. package/src/components/Editors/Account/Account.vue +156 -146
  12. package/src/components/Editors/Account/AccountCreator.vue +1 -1
  13. package/src/components/Editors/Account/AccountView.vue +13 -13
  14. package/src/components/Editors/Account/CreateAccount.vue +25 -16
  15. package/src/components/Editors/Profile/CreateProfile.vue +1 -1
  16. package/src/components/Editors/Profile/Profile.vue +1 -1
  17. package/src/components/Editors/Profile/ProfileCountryChooser.vue +83 -19
  18. package/src/components/Editors/Profile/ProfileView.vue +11 -11
  19. package/src/components/Tasks/CreateTaskAXS.vue +3 -3
  20. package/src/components/Tasks/CreateTaskTM.vue +7 -35
  21. package/src/components/Tasks/QuickSettings.vue +112 -9
  22. package/src/components/Tasks/Stats.vue +29 -26
  23. package/src/components/Tasks/Task.vue +499 -365
  24. package/src/components/Tasks/TaskView.vue +187 -127
  25. package/src/components/icons/Sandclock.vue +2 -2
  26. package/src/components/icons/Stadium.vue +1 -1
  27. package/src/components/ui/Modal.vue +37 -35
  28. package/src/components/ui/controls/CountryChooser.vue +200 -62
  29. package/src/components/ui/controls/atomic/Dropdown.vue +177 -91
  30. package/src/components/ui/controls/atomic/MultiDropdown.vue +247 -168
  31. package/src/composables/useClickOutside.js +21 -0
  32. package/src/composables/useDropdownPosition.js +174 -0
  33. package/src/stores/sampleData.js +4 -2
  34. package/src/stores/ui.js +8 -6
  35. package/src/views/Accounts.vue +12 -19
  36. package/src/views/Console.vue +34 -47
  37. package/src/views/Editor.vue +1194 -730
  38. package/src/views/Login.vue +65 -119
  39. package/src/views/Profiles.vue +2 -2
  40. package/src/views/Tasks.vue +170 -137
  41. package/static/offline.html +192 -50
  42. package/tailwind.config.js +47 -21
@@ -0,0 +1,441 @@
1
+ /* ==========================================================================
2
+ Z-INDEX MANAGEMENT
3
+ ========================================================================== */
4
+
5
+ .z-dropdown {
6
+ z-index: 100;
7
+ }
8
+
9
+ .z-dropdown-high {
10
+ z-index: 200;
11
+ }
12
+
13
+ .z-modal {
14
+ z-index: 1000;
15
+ }
16
+
17
+ .z-tooltip {
18
+ z-index: 2000;
19
+ }
20
+
21
+ .z-overlay {
22
+ z-index: 3000;
23
+ }
24
+
25
+ .z-max {
26
+ z-index: 9999;
27
+ }
28
+
29
+ /* ==========================================================================
30
+ COMMON POSITIONING UTILITIES
31
+ ========================================================================== */
32
+
33
+ .relative-positioned {
34
+ position: relative !important;
35
+ }
36
+
37
+ .dropdown-container {
38
+ position: relative;
39
+ }
40
+
41
+ /* ==========================================================================
42
+ EDITOR UTILITIES
43
+ ========================================================================== */
44
+
45
+ .editor-base {
46
+ font-family: "JetBrains Mono", "Fira Code", "Menlo", "Monaco", "Courier New", monospace;
47
+ font-size: 14px;
48
+ line-height: 1.6;
49
+ tab-size: 4;
50
+ background-color: transparent;
51
+ border: none;
52
+ outline: none;
53
+ resize: none;
54
+ }
55
+
56
+ .editor-scrollable {
57
+ overflow: auto !important;
58
+ -webkit-overflow-scrolling: touch !important;
59
+ touch-action: auto !important;
60
+ overscroll-behavior: auto !important;
61
+ }
62
+
63
+ /* ==========================================================================
64
+ TABLE UTILITIES
65
+ ========================================================================== */
66
+
67
+ .table-row-even {
68
+ background-color: #1a1b1e;
69
+ }
70
+
71
+ .table-row-odd {
72
+ background-color: #242529;
73
+ }
74
+
75
+ .table-component {
76
+ @apply w-full rounded-lg border border-dark-600;
77
+ overflow: visible !important;
78
+ background-color: #2e2f34;
79
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
80
+ }
81
+
82
+ /* ==========================================================================
83
+ DROPDOWN UTILITIES
84
+ ========================================================================== */
85
+
86
+ .dropdown-base {
87
+ @apply bg-dark-500 border-2 border-dark-550 rounded-lg;
88
+ margin-left: 0 !important;
89
+ border-width: 2px !important;
90
+ }
91
+
92
+ .dropdown-no-margin {
93
+ margin-left: 0 !important;
94
+ }
95
+
96
+ /* Dropdown menu z-index inheritance */
97
+ .z-dropdown-high .dropdown-menu,
98
+ .z-dropdown-high .option-list,
99
+ .z-dropdown-high [class*="dropdown"] {
100
+ z-index: 200 !important;
101
+ }
102
+
103
+ .z-dropdown .dropdown-menu,
104
+ .z-dropdown .option-list,
105
+ .z-dropdown [class*="dropdown"] {
106
+ z-index: 100 !important;
107
+ }
108
+
109
+ /* ==========================================================================
110
+ REFRESH BUTTON UTILITIES
111
+ ========================================================================== */
112
+
113
+ .refresh-button {
114
+ &:hover {
115
+ .refresh-icon {
116
+ transform: rotate(180deg);
117
+ }
118
+ }
119
+ }
120
+
121
+ .refresh-icon {
122
+ transition: transform 0.5s ease;
123
+ }
124
+
125
+ /* ==========================================================================
126
+ MOBILE RESPONSIVE UTILITIES
127
+ ========================================================================== */
128
+
129
+ .mobile-header-controls {
130
+ @apply flex lg:hidden ml-auto items-center gap-x-2;
131
+ }
132
+
133
+ .desktop-controls-hide {
134
+ @apply hidden lg:block;
135
+ }
136
+
137
+ /* ==========================================================================
138
+ SPACING UTILITIES
139
+ ========================================================================== */
140
+
141
+ .section-divider {
142
+ @apply border border-dark-650 my-8;
143
+ }
144
+
145
+ .controls-wrapper {
146
+ @apply lg:mb-3;
147
+ }
148
+
149
+ .stats-component {
150
+ /* Add any stats-specific styling here */
151
+ }
152
+
153
+ .utilities-section {
154
+ /* Add any utilities-specific styling here */
155
+ }
156
+
157
+ /* ==========================================================================
158
+ RESPONSIVE LAYOUT UTILITIES - CONSOLIDATED
159
+ ========================================================================== */
160
+
161
+ /* Mobile-first responsive containers */
162
+ .container-responsive {
163
+ @apply w-full mx-auto px-4;
164
+
165
+ @screen sm {
166
+ @apply px-6;
167
+ }
168
+
169
+ @screen lg {
170
+ @apply px-8;
171
+ }
172
+ }
173
+
174
+ /* Responsive grid systems */
175
+ .grid-responsive-1-2 {
176
+ @apply grid grid-cols-1;
177
+
178
+ @screen md {
179
+ @apply grid-cols-2;
180
+ }
181
+ }
182
+
183
+ .grid-responsive-1-2-3 {
184
+ @apply grid grid-cols-1;
185
+
186
+ @screen sm {
187
+ @apply grid-cols-2;
188
+ }
189
+
190
+ @screen lg {
191
+ @apply grid-cols-3;
192
+ }
193
+ }
194
+
195
+ .grid-responsive-2-4 {
196
+ @apply grid grid-cols-2;
197
+
198
+ @screen md {
199
+ @apply grid-cols-4;
200
+ }
201
+ }
202
+
203
+ /* Responsive flex utilities */
204
+ .flex-responsive-col-row {
205
+ @apply flex flex-col;
206
+
207
+ @screen lg {
208
+ @apply flex-row;
209
+ }
210
+ }
211
+
212
+ .flex-responsive-wrap {
213
+ @apply flex flex-col gap-4;
214
+
215
+ @screen md {
216
+ @apply flex-row justify-between items-center;
217
+ }
218
+ }
219
+
220
+ /* Responsive spacing */
221
+ .gap-responsive {
222
+ @apply gap-2;
223
+
224
+ @screen sm {
225
+ @apply gap-3;
226
+ }
227
+
228
+ @screen lg {
229
+ @apply gap-4;
230
+ }
231
+ }
232
+
233
+ .padding-responsive {
234
+ @apply p-2;
235
+
236
+ @screen sm {
237
+ @apply p-4;
238
+ }
239
+
240
+ @screen lg {
241
+ @apply p-6;
242
+ }
243
+ }
244
+
245
+ /* Responsive text sizes */
246
+ .text-responsive-sm {
247
+ @apply text-xs;
248
+
249
+ @screen sm {
250
+ @apply text-sm;
251
+ }
252
+ }
253
+
254
+ .text-responsive-base {
255
+ @apply text-sm;
256
+
257
+ @screen sm {
258
+ @apply text-base;
259
+ }
260
+ }
261
+
262
+ .text-responsive-lg {
263
+ @apply text-base;
264
+
265
+ @screen sm {
266
+ @apply text-lg;
267
+ }
268
+ }
269
+
270
+ /* ==========================================================================
271
+ DEVICE-SPECIFIC UTILITIES
272
+ ========================================================================== */
273
+
274
+ /* Mobile portrait utilities */
275
+ @screen mobile-portrait {
276
+ .mobile-portrait-hidden {
277
+ display: none !important;
278
+ }
279
+
280
+ .mobile-portrait-full-width {
281
+ width: 100% !important;
282
+ }
283
+
284
+ .mobile-portrait-stack {
285
+ flex-direction: column !important;
286
+ gap: 0.75rem !important;
287
+ }
288
+
289
+ .mobile-portrait-compact {
290
+ padding: 0.25rem !important;
291
+ gap: 0.25rem !important;
292
+ }
293
+
294
+ .editor-controls-row,
295
+ .proxy-controls-row {
296
+ gap: 0.75rem !important;
297
+ flex-wrap: wrap;
298
+
299
+ .dropdown-container {
300
+ width: 100% !important;
301
+ max-width: 16rem;
302
+ }
303
+
304
+ > div:last-child {
305
+ margin-right: auto;
306
+ margin-top: 0.5rem;
307
+ }
308
+ }
309
+
310
+ .task-switches h4 {
311
+ font-size: 12px !important;
312
+ }
313
+ }
314
+
315
+ /* Desktop-specific utilities */
316
+ @screen lg {
317
+ .desktop-only {
318
+ display: block !important;
319
+ }
320
+
321
+ .desktop-hidden {
322
+ display: none !important;
323
+ }
324
+ }
325
+
326
+ /* Height-based responsive utilities */
327
+ @screen h-sm {
328
+ .short-screen-compact {
329
+ padding-top: 0.5rem !important;
330
+ padding-bottom: 0.5rem !important;
331
+ }
332
+
333
+ .short-screen-hidden {
334
+ display: none !important;
335
+ }
336
+ }
337
+
338
+ /* Touch device optimizations */
339
+ @screen touch {
340
+ .touch-larger {
341
+ min-height: 44px !important;
342
+ min-width: 44px !important;
343
+ }
344
+
345
+ .touch-spacing {
346
+ margin: 0.25rem !important;
347
+ }
348
+ }
349
+
350
+ /* ==========================================================================
351
+ CONSOLE UTILITIES
352
+ ========================================================================== */
353
+
354
+ .console-base {
355
+ @apply bg-dark-400 border border-dark-550 border-2 rounded relative;
356
+
357
+ textarea {
358
+ background: transparent;
359
+ resize: none;
360
+ @apply w-full focus:outline-none text-white;
361
+ }
362
+ }
363
+
364
+ .console-dropdown {
365
+ font-size: 0.875rem !important;
366
+ font-weight: 500 !important;
367
+ }
368
+
369
+ /* ==========================================================================
370
+ TASK UTILITIES
371
+ ========================================================================== */
372
+
373
+ .task-switches {
374
+ h4 {
375
+ color: #e1e1e4;
376
+ @apply text-xs text-center flex items-center gap-x-2 mx-auto;
377
+ }
378
+
379
+ .switch-wrapper {
380
+ @apply gap-y-2;
381
+ }
382
+ }
383
+
384
+ /* ==========================================================================
385
+ INPUT UTILITIES
386
+ ========================================================================== */
387
+
388
+ .input-container {
389
+ position: relative;
390
+ }
391
+
392
+ .input-wrapper {
393
+ @apply z-20;
394
+
395
+ label {
396
+ @apply text-xs text-light-300 block;
397
+ }
398
+ }
399
+
400
+ .label-override {
401
+ display: flex;
402
+ align-items: center;
403
+ font-size: 12px;
404
+ margin-bottom: 8px;
405
+ color: #a0a0a6;
406
+
407
+ svg {
408
+ margin-left: 8px;
409
+ width: 16px;
410
+ height: 16px;
411
+ }
412
+ }
413
+
414
+ /* ==========================================================================
415
+ CONTEXT MENU UTILITIES
416
+ ========================================================================== */
417
+
418
+ .context-menu {
419
+ position: fixed;
420
+ z-index: 9999;
421
+ background: var(--bg-dark-400);
422
+ border: 1px solid var(--border-dark-650);
423
+ border-radius: 8px;
424
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
425
+ }
426
+
427
+ /* ==========================================================================
428
+ ICON UTILITIES
429
+ ========================================================================== */
430
+
431
+ .icon-muted {
432
+ color: #a0a0a6 !important;
433
+ fill: #a0a0a6 !important;
434
+ }
435
+
436
+ .icon-muted svg,
437
+ .icon-muted svg path,
438
+ .icon-muted svg * {
439
+ color: #a0a0a6 !important;
440
+ fill: #a0a0a6 !important;
441
+ }