web-mojo 2.1.46

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 (91) hide show
  1. package/LICENSE +198 -0
  2. package/README.md +510 -0
  3. package/dist/admin.cjs.js +2 -0
  4. package/dist/admin.cjs.js.map +1 -0
  5. package/dist/admin.css +621 -0
  6. package/dist/admin.es.js +7973 -0
  7. package/dist/admin.es.js.map +1 -0
  8. package/dist/auth.cjs.js +2 -0
  9. package/dist/auth.cjs.js.map +1 -0
  10. package/dist/auth.css +804 -0
  11. package/dist/auth.es.js +2168 -0
  12. package/dist/auth.es.js.map +1 -0
  13. package/dist/charts.cjs.js +2 -0
  14. package/dist/charts.cjs.js.map +1 -0
  15. package/dist/charts.css +1002 -0
  16. package/dist/charts.es.js +16 -0
  17. package/dist/charts.es.js.map +1 -0
  18. package/dist/chunks/ContextMenu-BrHqj0fn.js +80 -0
  19. package/dist/chunks/ContextMenu-BrHqj0fn.js.map +1 -0
  20. package/dist/chunks/ContextMenu-gEcpSz56.js +2 -0
  21. package/dist/chunks/ContextMenu-gEcpSz56.js.map +1 -0
  22. package/dist/chunks/DataView-DPryYpEW.js +2 -0
  23. package/dist/chunks/DataView-DPryYpEW.js.map +1 -0
  24. package/dist/chunks/DataView-DjZQrpba.js +843 -0
  25. package/dist/chunks/DataView-DjZQrpba.js.map +1 -0
  26. package/dist/chunks/Dialog-BsRx4eg3.js +2 -0
  27. package/dist/chunks/Dialog-BsRx4eg3.js.map +1 -0
  28. package/dist/chunks/Dialog-DSlctbon.js +1377 -0
  29. package/dist/chunks/Dialog-DSlctbon.js.map +1 -0
  30. package/dist/chunks/FilePreviewView-BmFHzK5K.js +5868 -0
  31. package/dist/chunks/FilePreviewView-BmFHzK5K.js.map +1 -0
  32. package/dist/chunks/FilePreviewView-DcdRl_ta.js +2 -0
  33. package/dist/chunks/FilePreviewView-DcdRl_ta.js.map +1 -0
  34. package/dist/chunks/FormView-CmBuwKGD.js +2 -0
  35. package/dist/chunks/FormView-CmBuwKGD.js.map +1 -0
  36. package/dist/chunks/FormView-DqUBMPJ9.js +5054 -0
  37. package/dist/chunks/FormView-DqUBMPJ9.js.map +1 -0
  38. package/dist/chunks/MetricsChart-CM4CI6eA.js +2095 -0
  39. package/dist/chunks/MetricsChart-CM4CI6eA.js.map +1 -0
  40. package/dist/chunks/MetricsChart-CPidSMaN.js +2 -0
  41. package/dist/chunks/MetricsChart-CPidSMaN.js.map +1 -0
  42. package/dist/chunks/PDFViewer-BNQlnS83.js +2 -0
  43. package/dist/chunks/PDFViewer-BNQlnS83.js.map +1 -0
  44. package/dist/chunks/PDFViewer-Dyo-Oeyd.js +946 -0
  45. package/dist/chunks/PDFViewer-Dyo-Oeyd.js.map +1 -0
  46. package/dist/chunks/Page-B524zSQs.js +351 -0
  47. package/dist/chunks/Page-B524zSQs.js.map +1 -0
  48. package/dist/chunks/Page-BFgj0pAA.js +2 -0
  49. package/dist/chunks/Page-BFgj0pAA.js.map +1 -0
  50. package/dist/chunks/TokenManager-BXNva8Jk.js +287 -0
  51. package/dist/chunks/TokenManager-BXNva8Jk.js.map +1 -0
  52. package/dist/chunks/TokenManager-Bzn4guFm.js +2 -0
  53. package/dist/chunks/TokenManager-Bzn4guFm.js.map +1 -0
  54. package/dist/chunks/TopNav-D3I3_25f.js +371 -0
  55. package/dist/chunks/TopNav-D3I3_25f.js.map +1 -0
  56. package/dist/chunks/TopNav-MDjL4kV0.js +2 -0
  57. package/dist/chunks/TopNav-MDjL4kV0.js.map +1 -0
  58. package/dist/chunks/User-BalfYTEF.js +3 -0
  59. package/dist/chunks/User-BalfYTEF.js.map +1 -0
  60. package/dist/chunks/User-DwIT-CTQ.js +1937 -0
  61. package/dist/chunks/User-DwIT-CTQ.js.map +1 -0
  62. package/dist/chunks/WebApp-B6mgbNn2.js +4767 -0
  63. package/dist/chunks/WebApp-B6mgbNn2.js.map +1 -0
  64. package/dist/chunks/WebApp-DqDowtkl.js +2 -0
  65. package/dist/chunks/WebApp-DqDowtkl.js.map +1 -0
  66. package/dist/chunks/WebSocketClient-D6i85jl2.js +2 -0
  67. package/dist/chunks/WebSocketClient-D6i85jl2.js.map +1 -0
  68. package/dist/chunks/WebSocketClient-Dvl3AYx1.js +297 -0
  69. package/dist/chunks/WebSocketClient-Dvl3AYx1.js.map +1 -0
  70. package/dist/core.css +1181 -0
  71. package/dist/css/web-mojo.css +17 -0
  72. package/dist/css-manifest.json +6 -0
  73. package/dist/docit.cjs.js +2 -0
  74. package/dist/docit.cjs.js.map +1 -0
  75. package/dist/docit.es.js +959 -0
  76. package/dist/docit.es.js.map +1 -0
  77. package/dist/index.cjs.js +2 -0
  78. package/dist/index.cjs.js.map +1 -0
  79. package/dist/index.es.js +2681 -0
  80. package/dist/index.es.js.map +1 -0
  81. package/dist/lightbox.cjs.js +2 -0
  82. package/dist/lightbox.cjs.js.map +1 -0
  83. package/dist/lightbox.css +606 -0
  84. package/dist/lightbox.es.js +3737 -0
  85. package/dist/lightbox.es.js.map +1 -0
  86. package/dist/loader.es.js +115 -0
  87. package/dist/loader.umd.js +85 -0
  88. package/dist/portal.css +2446 -0
  89. package/dist/table.css +639 -0
  90. package/dist/toast.css +181 -0
  91. package/package.json +179 -0
@@ -0,0 +1,1002 @@
1
+ /**
2
+ * MOJO Charts Components - Comprehensive CSS Styles
3
+ * Styles for BaseChart, SeriesChart, and PieChart components
4
+ * Built with Bootstrap 5 integration and theme support
5
+ */
6
+
7
+ /* ==========================================================================
8
+ CSS Custom Properties for Theming
9
+ ========================================================================== */
10
+
11
+ :root {
12
+ /* Light theme (default) */
13
+ --chart-bg: #ffffff;
14
+ --chart-content-bg: #ffffff;
15
+ --chart-border: #dee2e6;
16
+ --chart-text: #212529;
17
+ --chart-text-muted: #6c757d;
18
+ --chart-overlay-bg: rgba(255, 255, 255, 0.95);
19
+ --chart-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
20
+ --chart-hover-bg: rgba(0, 0, 0, 0.05);
21
+ --chart-focus-ring: rgba(13, 110, 253, 0.25);
22
+ --chart-grid-color: rgba(0, 0, 0, 0.1);
23
+ --chart-loading-bg: rgba(248, 249, 250, 0.95);
24
+ }
25
+
26
+ [data-theme="dark"] {
27
+ /* Dark theme */
28
+ --chart-bg: #212529;
29
+ --chart-content-bg: #2b3035;
30
+ --chart-border: #404449;
31
+ --chart-text: #ffffff;
32
+ --chart-text-muted: #adb5bd;
33
+ --chart-overlay-bg: rgba(33, 37, 41, 0.95);
34
+ --chart-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.3);
35
+ --chart-hover-bg: rgba(255, 255, 255, 0.1);
36
+ --chart-focus-ring: rgba(13, 110, 253, 0.4);
37
+ --chart-grid-color: rgba(255, 255, 255, 0.1);
38
+ --chart-loading-bg: rgba(43, 48, 53, 0.95);
39
+ }
40
+
41
+ /* ==========================================================================
42
+ Base Chart Component Styles
43
+ ========================================================================== */
44
+
45
+ .chart-component {
46
+ background: var(--chart-bg);
47
+ border: 1px solid var(--chart-border);
48
+ border-radius: 0.375rem;
49
+ box-shadow: var(--chart-shadow);
50
+ color: var(--chart-text);
51
+ padding: 1rem;
52
+ transition: all 0.15s ease-in-out;
53
+ min-height: 300px;
54
+ font-family: var(--bs-font-sans-serif, system-ui, sans-serif);
55
+ }
56
+
57
+ .chart-component:hover {
58
+ border-color: var(--bs-primary, #0d6efd);
59
+ box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
60
+ }
61
+
62
+ .chart-container {
63
+ width: 100%;
64
+ height: 100%;
65
+ display: flex;
66
+ flex-direction: column;
67
+ }
68
+
69
+ .chart-title-section {
70
+ flex: 0 0 auto;
71
+ }
72
+
73
+ .chart-title {
74
+ color: var(--chart-text);
75
+ margin-bottom: 0.25rem;
76
+ font-weight: 600;
77
+ }
78
+
79
+ .last-updated {
80
+ color: var(--chart-text-muted);
81
+ font-size: 0.75rem;
82
+ display: flex;
83
+ align-items: center;
84
+ }
85
+
86
+ .last-updated .timestamp {
87
+ font-weight: 500;
88
+ margin-left: 0.25rem;
89
+ }
90
+
91
+ /* ==========================================================================
92
+ Chart Controls and Toolbar
93
+ ========================================================================== */
94
+
95
+ .chart-controls {
96
+ flex: 0 0 auto;
97
+ }
98
+
99
+ .chart-controls .btn-toolbar {
100
+ gap: 0.5rem;
101
+ flex-wrap: wrap;
102
+ }
103
+
104
+ .chart-controls .btn-group {
105
+ box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
106
+ }
107
+
108
+ .chart-controls .btn {
109
+ position: relative;
110
+ border-color: var(--chart-border);
111
+ transition: all 0.15s ease-in-out;
112
+ }
113
+
114
+ .chart-controls .btn:hover {
115
+ transform: translateY(-1px);
116
+ box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.15);
117
+ }
118
+
119
+ .chart-controls .btn:focus {
120
+ box-shadow: 0 0 0 0.2rem var(--chart-focus-ring);
121
+ }
122
+
123
+ .chart-controls .btn:active {
124
+ transform: translateY(0);
125
+ }
126
+
127
+ /* Chart Type Switcher */
128
+ .chart-type-switcher .btn.active {
129
+ background-color: var(--bs-primary, #0d6efd);
130
+ border-color: var(--bs-primary, #0d6efd);
131
+ color: white;
132
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
133
+ }
134
+
135
+ /* Refresh Button Animation */
136
+ .refresh-btn .bi-arrow-clockwise.spin {
137
+ animation: spin 1s linear infinite;
138
+ }
139
+
140
+ @keyframes spin {
141
+ from {
142
+ transform: rotate(0deg);
143
+ }
144
+ to {
145
+ transform: rotate(360deg);
146
+ }
147
+ }
148
+
149
+ /* Theme Toggle */
150
+ .theme-toggle {
151
+ position: relative;
152
+ }
153
+
154
+ .theme-toggle:hover {
155
+ background: var(--chart-hover-bg);
156
+ }
157
+
158
+ /* Export Dropdown */
159
+ .chart-controls .dropdown-menu {
160
+ background: var(--chart-bg);
161
+ border: 1px solid var(--chart-border);
162
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175);
163
+ }
164
+
165
+ .chart-controls .dropdown-item {
166
+ color: var(--chart-text);
167
+ transition: background-color 0.15s ease-in-out;
168
+ }
169
+
170
+ .chart-controls .dropdown-item:hover,
171
+ .chart-controls .dropdown-item:focus {
172
+ background-color: var(--chart-hover-bg);
173
+ }
174
+
175
+ .chart-controls .dropdown-item i {
176
+ width: 1rem;
177
+ margin-right: 0.5rem;
178
+ }
179
+
180
+ /* ==========================================================================
181
+ Chart Content Area
182
+ ========================================================================== */
183
+
184
+ .chart-content {
185
+ flex: 1 1 auto;
186
+ position: relative;
187
+ background: var(--chart-content-bg);
188
+ border-radius: 0.25rem;
189
+ overflow: hidden;
190
+ min-height: 250px;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ }
195
+
196
+ .chart-canvas {
197
+ max-width: 100%;
198
+ max-height: 100%;
199
+ display: block;
200
+ background: transparent;
201
+ }
202
+
203
+ /* ==========================================================================
204
+ Chart Overlays (Loading, Error, No Data)
205
+ ========================================================================== */
206
+
207
+ .chart-overlay {
208
+ position: absolute;
209
+ top: 0;
210
+ left: 0;
211
+ right: 0;
212
+ bottom: 0;
213
+ background: var(--chart-overlay-bg);
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ z-index: 10;
218
+ backdrop-filter: blur(2px);
219
+ border-radius: 0.25rem;
220
+ }
221
+
222
+ /* Loading Overlay */
223
+ .chart-overlay .spinner-border {
224
+ width: 2rem;
225
+ height: 2rem;
226
+ color: var(--bs-primary, #0d6efd);
227
+ }
228
+
229
+ .chart-overlay .text-muted {
230
+ color: var(--chart-text-muted);
231
+ font-size: 0.875rem;
232
+ margin-top: 0.5rem;
233
+ }
234
+
235
+ /* Error Overlay */
236
+ .chart-overlay .alert-danger {
237
+ background: var(--bs-danger-bg-subtle, #f8d7da);
238
+ border-color: var(--bs-danger-border-subtle, #f1aeb5);
239
+ color: var(--bs-danger-text, #842029);
240
+ max-width: 400px;
241
+ margin: 1rem;
242
+ }
243
+
244
+ [data-theme="dark"] .chart-overlay .alert-danger {
245
+ background: rgba(248, 215, 218, 0.1);
246
+ border-color: rgba(241, 174, 181, 0.2);
247
+ color: #f8d7da;
248
+ }
249
+
250
+ /* No Data Overlay */
251
+ .chart-overlay .display-4 {
252
+ font-size: 3rem;
253
+ color: var(--chart-text-muted);
254
+ }
255
+
256
+ .chart-overlay .opacity-50 {
257
+ opacity: 0.5;
258
+ }
259
+
260
+ /* ==========================================================================
261
+ WebSocket Status Indicator
262
+ ========================================================================== */
263
+
264
+ .websocket-status {
265
+ font-size: 0.75rem;
266
+ padding: 0.25rem 0.5rem;
267
+ border-radius: 0.25rem;
268
+ backdrop-filter: blur(4px);
269
+ transition: all 0.2s ease;
270
+ }
271
+
272
+ .websocket-status.bg-success {
273
+ background-color: rgba(25, 135, 84, 0.9) !important;
274
+ animation: pulse-success 2s infinite;
275
+ }
276
+
277
+ .websocket-status.bg-danger {
278
+ background-color: rgba(220, 53, 69, 0.9) !important;
279
+ animation: pulse-danger 1s infinite;
280
+ }
281
+
282
+ .websocket-status.bg-secondary {
283
+ background-color: rgba(108, 117, 125, 0.9) !important;
284
+ }
285
+
286
+ @keyframes pulse-success {
287
+ 0%,
288
+ 100% {
289
+ opacity: 0.9;
290
+ }
291
+ 50% {
292
+ opacity: 1;
293
+ }
294
+ }
295
+
296
+ @keyframes pulse-danger {
297
+ 0%,
298
+ 100% {
299
+ opacity: 0.9;
300
+ }
301
+ 50% {
302
+ opacity: 0.6;
303
+ }
304
+ }
305
+
306
+ /* ==========================================================================
307
+ Chart Footer
308
+ ========================================================================== */
309
+
310
+ .chart-footer {
311
+ flex: 0 0 auto;
312
+ margin-top: 1rem;
313
+ padding-top: 0.75rem;
314
+ border-top: 1px solid var(--chart-border);
315
+ font-size: 0.75rem;
316
+ color: var(--chart-text-muted);
317
+ }
318
+
319
+ .chart-footer .row > div {
320
+ display: flex;
321
+ align-items: center;
322
+ }
323
+
324
+ .chart-footer i {
325
+ margin-right: 0.25rem;
326
+ opacity: 0.7;
327
+ }
328
+
329
+ .refresh-status {
330
+ font-weight: 500;
331
+ color: var(--bs-success, #198754);
332
+ }
333
+
334
+ /* ==========================================================================
335
+ Responsive Design
336
+ ========================================================================== */
337
+
338
+ /* Mobile devices (portrait phones, less than 576px) */
339
+ @media (max-width: 575.98px) {
340
+ .chart-component {
341
+ padding: 0.75rem;
342
+ margin-bottom: 1rem;
343
+ }
344
+
345
+ .chart-controls .btn-toolbar {
346
+ justify-content: center;
347
+ }
348
+
349
+ .chart-controls .btn-group {
350
+ margin-bottom: 0.5rem;
351
+ }
352
+
353
+ .chart-controls .btn-sm {
354
+ padding: 0.25rem 0.5rem;
355
+ font-size: 0.75rem;
356
+ }
357
+
358
+ .chart-title {
359
+ font-size: 1.1rem;
360
+ text-align: center;
361
+ }
362
+
363
+ .chart-footer .row {
364
+ text-align: center;
365
+ }
366
+
367
+ .chart-footer .col {
368
+ margin-bottom: 0.25rem;
369
+ }
370
+
371
+ /* Stack chart type switcher vertically on mobile */
372
+ .chart-type-switcher {
373
+ flex-direction: column;
374
+ }
375
+
376
+ .chart-type-switcher .btn {
377
+ margin-bottom: 0.25rem;
378
+ }
379
+ }
380
+
381
+ /* Tablets (landscape phones, 576px and up) */
382
+ @media (min-width: 576px) and (max-width: 767.98px) {
383
+ .chart-component {
384
+ padding: 0.875rem;
385
+ }
386
+
387
+ .chart-controls .btn-toolbar {
388
+ justify-content: space-between;
389
+ }
390
+ }
391
+
392
+ /* Small desktops (tablets, 768px and up) */
393
+ @media (min-width: 768px) {
394
+ .chart-component {
395
+ min-height: 400px;
396
+ }
397
+
398
+ .chart-content {
399
+ min-height: 320px;
400
+ }
401
+ }
402
+
403
+ /* Large desktops (992px and up) */
404
+ @media (min-width: 992px) {
405
+ .chart-component {
406
+ min-height: 450px;
407
+ }
408
+
409
+ .chart-content {
410
+ min-height: 360px;
411
+ }
412
+ }
413
+
414
+ /* Extra large desktops (1200px and up) */
415
+ @media (min-width: 1200px) {
416
+ .chart-component {
417
+ min-height: 500px;
418
+ }
419
+
420
+ .chart-content {
421
+ min-height: 400px;
422
+ }
423
+ }
424
+
425
+ /* ==========================================================================
426
+ Animation and Transitions
427
+ ========================================================================== */
428
+
429
+ /* Chart entrance animation */
430
+ .chart-component {
431
+ animation: chartFadeIn 0.5s ease-out;
432
+ }
433
+
434
+ @keyframes chartFadeIn {
435
+ from {
436
+ opacity: 0;
437
+ transform: translateY(20px);
438
+ }
439
+ to {
440
+ opacity: 1;
441
+ transform: translateY(0);
442
+ }
443
+ }
444
+
445
+ /* Overlay transitions */
446
+ .chart-overlay {
447
+ transition: opacity 0.3s ease-in-out;
448
+ }
449
+
450
+ .chart-overlay.d-none {
451
+ opacity: 0;
452
+ pointer-events: none;
453
+ }
454
+
455
+ /* Button hover effects */
456
+ .chart-controls .btn {
457
+ transition: all 0.15s ease-in-out;
458
+ }
459
+
460
+ /* Canvas fade in when loaded */
461
+ .chart-canvas {
462
+ opacity: 0;
463
+ animation: canvasFadeIn 0.3s ease-in-out 0.2s forwards;
464
+ }
465
+
466
+ @keyframes canvasFadeIn {
467
+ to {
468
+ opacity: 1;
469
+ }
470
+ }
471
+
472
+ /* ==========================================================================
473
+ Accessibility
474
+ ========================================================================== */
475
+
476
+ /* High contrast mode support */
477
+ @media (prefers-contrast: high) {
478
+ .chart-component {
479
+ border-width: 2px;
480
+ }
481
+
482
+ .chart-controls .btn {
483
+ border-width: 2px;
484
+ }
485
+
486
+ .chart-footer {
487
+ border-top-width: 2px;
488
+ }
489
+ }
490
+
491
+ /* Reduced motion support */
492
+ @media (prefers-reduced-motion: reduce) {
493
+ .chart-component,
494
+ .chart-canvas,
495
+ .chart-overlay,
496
+ .chart-controls .btn {
497
+ animation: none !important;
498
+ transition: none !important;
499
+ }
500
+
501
+ .refresh-btn .bi-arrow-clockwise.spin {
502
+ animation: none !important;
503
+ }
504
+ }
505
+
506
+ /* Focus indicators */
507
+ .chart-component:focus-within {
508
+ outline: 2px solid var(--bs-primary, #0d6efd);
509
+ outline-offset: 2px;
510
+ }
511
+
512
+ .chart-controls .btn:focus-visible {
513
+ outline: 2px solid var(--bs-primary, #0d6efd);
514
+ outline-offset: 2px;
515
+ z-index: 1;
516
+ }
517
+
518
+ /* Screen reader only content */
519
+ .sr-only {
520
+ position: absolute;
521
+ width: 1px;
522
+ height: 1px;
523
+ padding: 0;
524
+ margin: -1px;
525
+ overflow: hidden;
526
+ clip: rect(0, 0, 0, 0);
527
+ white-space: nowrap;
528
+ border: 0;
529
+ }
530
+
531
+ /* ==========================================================================
532
+ Specific Chart Type Styles
533
+ ========================================================================== */
534
+
535
+ /* Series Chart specific */
536
+ .chart-component[data-chart-type="line"] .chart-canvas,
537
+ .chart-component[data-chart-type="bar"] .chart-canvas {
538
+ cursor: crosshair;
539
+ }
540
+
541
+ .chart-component[data-chart-type="line"] .chart-canvas:hover,
542
+ .chart-component[data-chart-type="bar"] .chart-canvas:hover {
543
+ cursor: pointer;
544
+ }
545
+
546
+ /* Pie Chart specific */
547
+ .chart-component[data-chart-type="pie"] .chart-canvas {
548
+ cursor: pointer;
549
+ }
550
+
551
+ /* ==========================================================================
552
+ Print Styles
553
+ ========================================================================== */
554
+
555
+ @media print {
556
+ .chart-component {
557
+ border: 1px solid #000;
558
+ box-shadow: none;
559
+ background: white;
560
+ color: black;
561
+ page-break-inside: avoid;
562
+ }
563
+
564
+ .chart-controls,
565
+ .websocket-status {
566
+ display: none !important;
567
+ }
568
+
569
+ .chart-overlay {
570
+ display: none !important;
571
+ }
572
+
573
+ .chart-canvas {
574
+ max-width: 100% !important;
575
+ max-height: 100% !important;
576
+ }
577
+
578
+ .chart-footer {
579
+ border-top: 1px solid #000;
580
+ color: #666;
581
+ }
582
+ }
583
+
584
+ /* ==========================================================================
585
+ Utility Classes
586
+ ========================================================================== */
587
+
588
+ /* Chart sizing utilities */
589
+ .chart-sm {
590
+ min-height: 200px;
591
+ }
592
+
593
+ .chart-sm .chart-content {
594
+ min-height: 150px;
595
+ }
596
+
597
+ .chart-lg {
598
+ min-height: 600px;
599
+ }
600
+
601
+ .chart-lg .chart-content {
602
+ min-height: 500px;
603
+ }
604
+
605
+ .chart-xl {
606
+ min-height: 700px;
607
+ }
608
+
609
+ .chart-xl .chart-content {
610
+ min-height: 600px;
611
+ }
612
+
613
+ /* Chart aspect ratios */
614
+ .chart-square {
615
+ aspect-ratio: 1 / 1;
616
+ }
617
+
618
+ .chart-wide {
619
+ aspect-ratio: 16 / 9;
620
+ }
621
+
622
+ .chart-tall {
623
+ aspect-ratio: 3 / 4;
624
+ }
625
+
626
+ /* Loading state utilities */
627
+ .chart-loading {
628
+ pointer-events: none;
629
+ }
630
+
631
+ .chart-loading .chart-canvas {
632
+ opacity: 0.5;
633
+ filter: blur(1px);
634
+ }
635
+
636
+ /* Error state utilities */
637
+ .chart-error .chart-canvas {
638
+ opacity: 0.3;
639
+ filter: grayscale(100%);
640
+ }
641
+
642
+ /* Success states */
643
+ .chart-success {
644
+ border-color: var(--bs-success, #198754);
645
+ }
646
+
647
+ .chart-success .chart-title {
648
+ color: var(--bs-success, #198754);
649
+ }
650
+
651
+ /* Warning states */
652
+ .chart-warning {
653
+ border-color: var(--bs-warning, #ffc107);
654
+ }
655
+
656
+ .chart-warning .chart-title {
657
+ color: var(--bs-warning-text, #664d03);
658
+ }
659
+
660
+ /* ==========================================================================
661
+ MetricsChart Component Styles
662
+ ========================================================================== */
663
+
664
+ .mojo-metrics-chart {
665
+ display: flex;
666
+ flex-direction: column;
667
+ gap: 1rem;
668
+ }
669
+
670
+ .mojo-metrics-chart-container {
671
+ width: 100%;
672
+ height: 100%;
673
+ }
674
+
675
+ .mojo-metrics-chart .chart-wrapper {
676
+ flex: 1;
677
+ min-height: 300px;
678
+ }
679
+
680
+ /* MetricsControlsView Styles */
681
+ .mojo-metrics-controls {
682
+ background: var(--bs-light, #f8f9fa);
683
+ border: 1px solid var(--chart-border);
684
+ border-radius: 0.375rem;
685
+ padding: 1rem;
686
+ margin-bottom: 1rem;
687
+ }
688
+
689
+ [data-bs-theme="dark"] .mojo-metrics-controls {
690
+ background: var(--bs-dark, #212529);
691
+ border-color: var(--chart-border);
692
+ }
693
+
694
+ .mojo-metrics-controls .form-label {
695
+ font-size: 0.875rem;
696
+ font-weight: 600;
697
+ color: var(--bs-body-color);
698
+ margin-bottom: 0.25rem;
699
+ }
700
+
701
+ .mojo-metrics-controls .btn-group .btn {
702
+ font-size: 0.75rem;
703
+ padding: 0.375rem 0.75rem;
704
+ font-weight: 500;
705
+ }
706
+
707
+ .mojo-metrics-controls .quick-range-btn.active {
708
+ background-color: var(--bs-primary);
709
+ border-color: var(--bs-primary);
710
+ color: white;
711
+ font-weight: 600;
712
+ }
713
+
714
+ .mojo-metrics-controls .form-control,
715
+ .mojo-metrics-controls .form-select {
716
+ font-size: 0.875rem;
717
+ border: 1px solid var(--chart-border);
718
+ }
719
+
720
+ .mojo-metrics-controls .form-control:focus,
721
+ .mojo-metrics-controls .form-select:focus {
722
+ border-color: var(--bs-primary);
723
+ box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);
724
+ }
725
+
726
+ .mojo-metrics-controls .dropdown-menu {
727
+ background: var(--chart-bg);
728
+ border: 1px solid var(--chart-border);
729
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
730
+ }
731
+
732
+ .mojo-metrics-controls .form-check-input {
733
+ margin-top: 0.125rem;
734
+ }
735
+
736
+ .mojo-metrics-controls .form-check-label {
737
+ font-size: 0.875rem;
738
+ color: var(--bs-body-color);
739
+ }
740
+
741
+ /* Metrics Footer */
742
+ .metrics-footer {
743
+ border-top: 1px solid var(--chart-border);
744
+ padding-top: 0.5rem;
745
+ font-size: 0.75rem;
746
+ color: var(--chart-text-muted);
747
+ }
748
+
749
+ .metrics-footer .data-points {
750
+ font-weight: 600;
751
+ }
752
+
753
+ .metrics-footer .last-updated {
754
+ font-style: italic;
755
+ }
756
+
757
+ .metrics-footer .timestamp {
758
+ font-weight: 500;
759
+ }
760
+
761
+ /* Responsive adjustments for MetricsControls */
762
+ @media (max-width: 767.98px) {
763
+ .mojo-metrics-controls .row {
764
+ --bs-gutter-x: 0.75rem;
765
+ --bs-gutter-y: 1rem;
766
+ }
767
+
768
+ .mojo-metrics-controls .col-auto {
769
+ flex: 1 1 auto;
770
+ min-width: 0;
771
+ }
772
+
773
+ .mojo-metrics-controls .btn-group {
774
+ width: 100%;
775
+ justify-content: center;
776
+ }
777
+
778
+ .mojo-metrics-controls .form-control,
779
+ .mojo-metrics-controls .form-select {
780
+ width: 100%;
781
+ max-width: none !important;
782
+ }
783
+
784
+ .mojo-metrics-controls .input-group {
785
+ flex-wrap: wrap;
786
+ }
787
+
788
+ .mojo-metrics-controls .input-group .form-control {
789
+ min-width: 140px;
790
+ }
791
+ }
792
+
793
+ @media (max-width: 575.98px) {
794
+ .mojo-metrics-controls {
795
+ padding: 0.75rem;
796
+ }
797
+
798
+ .mojo-metrics-controls .row {
799
+ --bs-gutter-x: 0.5rem;
800
+ --bs-gutter-y: 0.75rem;
801
+ }
802
+
803
+ .mojo-metrics-controls .form-label {
804
+ margin-bottom: 0.125rem;
805
+ }
806
+
807
+ .mojo-metrics-controls .btn-group .btn {
808
+ padding: 0.25rem 0.5rem;
809
+ font-size: 0.7rem;
810
+ }
811
+ }
812
+
813
+ /* ==========================================================================
814
+ Integrated Toolbar Styles for SeriesChart
815
+ ========================================================================== */
816
+
817
+ .chart-header {
818
+ flex: 0 0 auto;
819
+ }
820
+
821
+ .chart-toolbar-integrated {
822
+ margin-top: 0.75rem;
823
+ padding-top: 0.75rem;
824
+ border-top: 1px solid var(--chart-border);
825
+ }
826
+
827
+ .mojo-toolbar-form {
828
+ background: transparent;
829
+ border: none;
830
+ padding: 0;
831
+ }
832
+
833
+ .mojo-toolbar-form .row {
834
+ --bs-gutter-x: 1rem;
835
+ --bs-gutter-y: 0.5rem;
836
+ }
837
+
838
+ .mojo-toolbar-form .form-label-sm {
839
+ font-size: 0.75rem;
840
+ font-weight: 600;
841
+ color: var(--chart-text-muted);
842
+ margin-bottom: 0.25rem;
843
+ display: block;
844
+ }
845
+
846
+ .mojo-toolbar-form .btn-group-sm .btn {
847
+ font-size: 0.75rem;
848
+ padding: 0.25rem 0.5rem;
849
+ font-weight: 500;
850
+ }
851
+
852
+ .mojo-toolbar-form .form-select,
853
+ .mojo-toolbar-form .form-control {
854
+ font-size: 0.875rem;
855
+ padding: 0.375rem 0.5rem;
856
+ border: 1px solid var(--chart-border);
857
+ }
858
+
859
+ .mojo-toolbar-form .form-select:focus,
860
+ .mojo-toolbar-form .form-control:focus {
861
+ border-color: var(--bs-primary);
862
+ box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);
863
+ }
864
+
865
+ .mojo-toolbar-form .dropdown-menu {
866
+ background: var(--chart-bg);
867
+ border: 1px solid var(--chart-border);
868
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
869
+ font-size: 0.875rem;
870
+ }
871
+
872
+ .mojo-toolbar-form .form-check-input {
873
+ margin-top: 0.125rem;
874
+ }
875
+
876
+ .mojo-toolbar-form .form-check-label {
877
+ font-size: 0.875rem;
878
+ color: var(--chart-text);
879
+ }
880
+
881
+ /* Compact button group styling */
882
+ .mojo-toolbar-form .btn-group .btn.active {
883
+ background-color: var(--bs-primary);
884
+ border-color: var(--bs-primary);
885
+ color: white;
886
+ font-weight: 600;
887
+ }
888
+
889
+ /* Responsive adjustments for toolbar */
890
+ @media (max-width: 767.98px) {
891
+ .chart-toolbar-integrated {
892
+ margin-top: 0.5rem;
893
+ padding-top: 0.5rem;
894
+ }
895
+
896
+ .mojo-toolbar-form .row {
897
+ --bs-gutter-x: 0.5rem;
898
+ --bs-gutter-y: 0.75rem;
899
+ }
900
+
901
+ .mojo-toolbar-form .col-auto {
902
+ flex: 1 1 auto;
903
+ min-width: 0;
904
+ }
905
+
906
+ .mojo-toolbar-form .btn-group {
907
+ width: 100%;
908
+ justify-content: center;
909
+ }
910
+
911
+ .mojo-toolbar-form .form-control,
912
+ .mojo-toolbar-form .form-select {
913
+ width: 100%;
914
+ max-width: none;
915
+ }
916
+ }
917
+
918
+ @media (max-width: 575.98px) {
919
+ .chart-toolbar-integrated {
920
+ margin-top: 0.25rem;
921
+ padding-top: 0.5rem;
922
+ }
923
+
924
+ .mojo-toolbar-form .form-label-sm {
925
+ margin-bottom: 0.125rem;
926
+ font-size: 0.7rem;
927
+ }
928
+
929
+ .mojo-toolbar-form .btn-group .btn {
930
+ padding: 0.25rem 0.375rem;
931
+ font-size: 0.7rem;
932
+ }
933
+ }
934
+
935
+ /* Dark theme adjustments */
936
+ [data-theme="dark"] .mojo-toolbar-form .dropdown-menu {
937
+ background: var(--chart-bg);
938
+ border-color: var(--chart-border);
939
+ }
940
+
941
+ [data-bs-theme="dark"] .mojo-toolbar-form .form-check-label {
942
+ color: var(--chart-text);
943
+ }
944
+
945
+ /* Metrics Toolbar Compact Mode */
946
+ .metrics-toolbar-compact {
947
+ background: var(--bs-light, #f8f9fa);
948
+ border-radius: 0.375rem;
949
+ padding: 0.75rem;
950
+ border: 1px solid var(--chart-border);
951
+ }
952
+
953
+ [data-bs-theme="dark"] .metrics-toolbar-compact {
954
+ background: var(--bs-dark, #212529);
955
+ }
956
+
957
+ .metrics-toolbar-compact .row {
958
+ --bs-gutter-x: 0.75rem;
959
+ --bs-gutter-y: 0.5rem;
960
+ }
961
+
962
+ .metrics-toolbar-compact .form-label-sm {
963
+ font-size: 0.7rem;
964
+ font-weight: 600;
965
+ color: var(--chart-text-muted);
966
+ margin-bottom: 0.125rem;
967
+ }
968
+
969
+ .metrics-toolbar-compact .btn-group .btn {
970
+ font-size: 0.7rem;
971
+ padding: 0.25rem 0.375rem;
972
+ font-weight: 500;
973
+ }
974
+
975
+ .metrics-toolbar-compact .form-select,
976
+ .metrics-toolbar-compact .form-control {
977
+ font-size: 0.8rem;
978
+ padding: 0.25rem 0.375rem;
979
+ min-height: auto;
980
+ }
981
+
982
+ .metrics-toolbar-compact .dropdown-toggle {
983
+ font-size: 0.75rem;
984
+ padding: 0.25rem 0.5rem;
985
+ }
986
+
987
+ /* Extra compact for mobile */
988
+ @media (max-width: 575.98px) {
989
+ .metrics-toolbar-compact {
990
+ padding: 0.5rem;
991
+ }
992
+
993
+ .metrics-toolbar-compact .row {
994
+ --bs-gutter-x: 0.5rem;
995
+ --bs-gutter-y: 0.25rem;
996
+ }
997
+
998
+ .metrics-toolbar-compact .col-auto {
999
+ flex: 1 1 auto;
1000
+ min-width: 0;
1001
+ }
1002
+ }