@nice2dev/ui-erp 1.1.7 → 1.1.10

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.
package/dist/style.css DELETED
@@ -1,1511 +0,0 @@
1
- /**
2
- * ERP Components Styles
3
- * @package @nice2dev/ui-erp
4
- */
5
-
6
- /* =============================================================================
7
- COMMON ERP STYLES
8
- ============================================================================= */
9
-
10
- :root {
11
- --erp-primary: var(--nice-primary, #6366f1);
12
- --erp-primary-dark: var(--nice-primary-dark, #4f46e5);
13
- --erp-primary-light: var(--nice-primary-light, #818cf8);
14
- --erp-success: var(--nice-success, #22c55e);
15
- --erp-warning: var(--nice-warning, #f59e0b);
16
- --erp-error: var(--nice-danger, #ef4444);
17
- --erp-info: var(--nice-info, #3b82f6);
18
- --erp-bg: var(--nice-bg, #0f172a);
19
- --erp-surface: var(--nice-bg-secondary, #1e293b);
20
- --erp-surface-alt: var(--nice-bg-tertiary, #334155);
21
- --erp-border: var(--nice-border, #475569);
22
- --erp-text: var(--nice-text, #f1f5f9);
23
- --erp-text-muted: var(--nice-text-muted, #94a3b8);
24
- --erp-radius: 8px;
25
- --erp-radius-sm: 4px;
26
- --erp-shadow: 0 4px 6px -1px var(--nice-overlay-30, rgba(0, 0, 0, 0.3));
27
- --erp-transition: 150ms ease;
28
- }
29
-
30
- /* =============================================================================
31
- GANTT CHART
32
- ============================================================================= */
33
-
34
- .nice-gantt-chart {
35
- display: flex;
36
- flex-direction: column;
37
- height: 100%;
38
- min-height: 500px;
39
- background: var(--erp-bg);
40
- color: var(--erp-text);
41
- font-family: system-ui, -apple-system, sans-serif;
42
- }
43
-
44
- .gantt__toolbar {
45
- display: flex;
46
- justify-content: space-between;
47
- align-items: center;
48
- padding: var(--nice-space-3, 12px) var(--nice-space-5, 20px);
49
- background: var(--erp-surface);
50
- border-bottom: 1px solid var(--erp-border);
51
- }
52
-
53
- .gantt__toolbar h2 {
54
- margin: 0;
55
- font-size: 1.125rem;
56
- font-weight: 600;
57
- }
58
-
59
- .time-unit-selector,
60
- .view-selector {
61
- display: flex;
62
- gap: var(--nice-space-1, 4px);
63
- }
64
-
65
- .unit-button,
66
- .view-button {
67
- padding: var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);
68
- border: 1px solid var(--erp-border);
69
- background: transparent;
70
- color: var(--erp-text);
71
- border-radius: var(--erp-radius-sm);
72
- cursor: pointer;
73
- transition: all var(--erp-transition);
74
- }
75
-
76
- .unit-button:hover,
77
- .view-button:hover {
78
- background: var(--erp-surface-alt);
79
- }
80
-
81
- .unit-button--active,
82
- .view-button--active {
83
- background: var(--erp-primary);
84
- border-color: var(--erp-primary);
85
- color: white;
86
- }
87
-
88
- .add-task-button,
89
- .add-button {
90
- padding: var(--nice-space-2, 8px) var(--nice-space-4, 16px);
91
- border: none;
92
- background: var(--erp-primary);
93
- color: white;
94
- border-radius: var(--erp-radius);
95
- font-size: 0.875rem;
96
- font-weight: 500;
97
- cursor: pointer;
98
- transition: all var(--erp-transition);
99
- }
100
-
101
- .add-task-button:hover,
102
- .add-button:hover {
103
- background: var(--erp-primary-dark);
104
- }
105
-
106
- .gantt__container {
107
- display: flex;
108
- flex: 1;
109
- overflow: hidden;
110
- }
111
-
112
- /* Task List */
113
- .gantt__task-list {
114
- width: 350px;
115
- flex-shrink: 0;
116
- display: flex;
117
- flex-direction: column;
118
- border-right: 1px solid var(--erp-border);
119
- background: var(--erp-surface);
120
- }
121
-
122
- .task-list__header {
123
- display: flex;
124
- align-items: center;
125
- padding: var(--nice-space-3, 12px);
126
- background: var(--erp-surface-alt);
127
- border-bottom: 1px solid var(--erp-border);
128
- font-size: 0.75rem;
129
- font-weight: 600;
130
- color: var(--erp-text-muted);
131
- }
132
-
133
- .col-name { flex: 1; }
134
- .col-dates { width: 100px; text-align: center; }
135
- .col-progress { width: 60px; text-align: right; }
136
-
137
- .task-list__body {
138
- flex: 1;
139
- overflow-y: auto;
140
- }
141
-
142
- .task-row {
143
- display: flex;
144
- align-items: center;
145
- gap: var(--nice-space-2, 8px);
146
- padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px);
147
- border-bottom: 1px solid var(--erp-border);
148
- cursor: pointer;
149
- transition: background var(--erp-transition);
150
- }
151
-
152
- .task-row:hover {
153
- background: var(--erp-surface-alt);
154
- }
155
-
156
- .task-row--selected {
157
- background: var(--nice-accent-tint-10, rgba(99, 102, 241, 0.1));
158
- }
159
-
160
- .collapse-button {
161
- width: 20px;
162
- height: 20px;
163
- border: none;
164
- background: transparent;
165
- color: var(--erp-text-muted);
166
- cursor: pointer;
167
- font-size: 0.75rem;
168
- }
169
-
170
- .task-icon {
171
- width: 10px;
172
- height: 10px;
173
- border-radius: var(--nice-radius-full, 50%);
174
- flex-shrink: 0;
175
- }
176
-
177
- .milestone-icon {
178
- color: var(--erp-warning);
179
- font-size: 0.75rem;
180
- }
181
-
182
- .task-name {
183
- flex: 1;
184
- font-size: 0.875rem;
185
- white-space: nowrap;
186
- overflow: hidden;
187
- text-overflow: ellipsis;
188
- }
189
-
190
- .task-dates {
191
- width: 100px;
192
- font-size: 0.75rem;
193
- color: var(--erp-text-muted);
194
- text-align: center;
195
- }
196
-
197
- .task-progress {
198
- width: 60px;
199
- font-size: 0.75rem;
200
- color: var(--erp-text-muted);
201
- text-align: right;
202
- }
203
-
204
- /* Timeline */
205
- .gantt__timeline {
206
- flex: 1;
207
- display: flex;
208
- flex-direction: column;
209
- overflow: auto;
210
- }
211
-
212
- .timeline__header {
213
- display: flex;
214
- position: sticky;
215
- top: 0;
216
- z-index: 10;
217
- background: var(--erp-surface-alt);
218
- border-bottom: 1px solid var(--erp-border);
219
- }
220
-
221
- .time-column {
222
- flex-shrink: 0;
223
- padding: var(--nice-space-3, 12px) var(--nice-space-1, 4px);
224
- text-align: center;
225
- font-size: 0.75rem;
226
- color: var(--erp-text-muted);
227
- border-right: 1px solid var(--erp-border);
228
- }
229
-
230
- .timeline__body {
231
- position: relative;
232
- flex: 1;
233
- }
234
-
235
- .grid-lines {
236
- position: absolute;
237
- top: 0;
238
- left: 0;
239
- right: 0;
240
- bottom: 0;
241
- pointer-events: none;
242
- }
243
-
244
- .grid-line {
245
- position: absolute;
246
- top: 0;
247
- bottom: 0;
248
- width: 1px;
249
- background: var(--erp-border);
250
- opacity: 0.3;
251
- }
252
-
253
- .today-marker {
254
- position: absolute;
255
- top: 0;
256
- bottom: 0;
257
- width: 2px;
258
- background: var(--erp-error);
259
- z-index: 5;
260
- }
261
-
262
- .today-label {
263
- position: absolute;
264
- top: -24px;
265
- left: 50%;
266
- transform: translateX(-50%);
267
- padding: var(--nice-space-0-5, 2px) var(--nice-space-1-5, 6px);
268
- background: var(--erp-error);
269
- color: white;
270
- font-size: 0.625rem;
271
- border-radius: var(--nice-radius-sm, 2px);
272
- white-space: nowrap;
273
- }
274
-
275
- .task-bar-row {
276
- position: absolute;
277
- left: 0;
278
- right: 0;
279
- }
280
-
281
- .task-bar {
282
- position: absolute;
283
- height: 24px;
284
- top: 50%;
285
- transform: translateY(-50%);
286
- border-radius: var(--erp-radius-sm);
287
- cursor: grab;
288
- transition: box-shadow var(--erp-transition);
289
- overflow: hidden;
290
- }
291
-
292
- .task-bar:hover {
293
- box-shadow: 0 0 0 2px var(--nice-overlay-light-30, rgba(255, 255, 255, 0.3));
294
- }
295
-
296
- .task-bar--dragging {
297
- cursor: grabbing;
298
- opacity: 0.8;
299
- }
300
-
301
- .task-bar--milestone {
302
- display: flex;
303
- align-items: center;
304
- justify-content: center;
305
- background: transparent !important;
306
- }
307
-
308
- .milestone-diamond {
309
- width: 16px;
310
- height: 16px;
311
- transform: rotate(45deg);
312
- border-radius: var(--nice-radius-sm, 2px);
313
- }
314
-
315
- .progress-fill {
316
- position: absolute;
317
- top: 0;
318
- left: 0;
319
- height: 100%;
320
- background: var(--nice-overlay-30, rgba(0, 0, 0, 0.3));
321
- pointer-events: none;
322
- }
323
-
324
- .resize-handle {
325
- position: absolute;
326
- top: 0;
327
- bottom: 0;
328
- width: 8px;
329
- cursor: ew-resize;
330
- }
331
-
332
- .resize-handle--start { left: 0; }
333
- .resize-handle--end { right: 0; }
334
-
335
- .task-bar-label {
336
- position: absolute;
337
- left: 8px;
338
- top: 50%;
339
- transform: translateY(-50%);
340
- font-size: 0.75rem;
341
- color: white;
342
- white-space: nowrap;
343
- text-shadow: 0 1px 2px var(--nice-overlay-50, rgba(0, 0, 0, 0.5));
344
- }
345
-
346
- .task-tooltip {
347
- position: absolute;
348
- bottom: 100%;
349
- left: 50%;
350
- transform: translateX(-50%);
351
- padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px);
352
- background: var(--erp-surface);
353
- border: 1px solid var(--erp-border);
354
- border-radius: var(--erp-radius);
355
- box-shadow: var(--erp-shadow);
356
- z-index: 100;
357
- white-space: nowrap;
358
- pointer-events: none;
359
- }
360
-
361
- .tooltip-dates,
362
- .tooltip-progress,
363
- .tooltip-assignees {
364
- font-size: 0.75rem;
365
- color: var(--erp-text-muted);
366
- margin-top: var(--nice-space-1, 4px);
367
- }
368
-
369
- .dependencies-layer {
370
- position: absolute;
371
- top: 0;
372
- left: 0;
373
- width: 100%;
374
- height: 100%;
375
- pointer-events: none;
376
- }
377
-
378
- /* =============================================================================
379
- RESOURCE ALLOCATION
380
- ============================================================================= */
381
-
382
- .nice-resource-allocation {
383
- display: flex;
384
- flex-direction: column;
385
- height: 100%;
386
- min-height: 500px;
387
- background: var(--erp-bg);
388
- color: var(--erp-text);
389
- font-family: system-ui, -apple-system, sans-serif;
390
- }
391
-
392
- .allocation__toolbar {
393
- display: flex;
394
- justify-content: space-between;
395
- align-items: center;
396
- padding: var(--nice-space-3, 12px) var(--nice-space-5, 20px);
397
- background: var(--erp-surface);
398
- border-bottom: 1px solid var(--erp-border);
399
- }
400
-
401
- .allocation__toolbar h2 {
402
- margin: 0;
403
- font-size: 1.125rem;
404
- font-weight: 600;
405
- }
406
-
407
- .date-range {
408
- margin-left: var(--nice-space-4, 16px);
409
- font-size: 0.875rem;
410
- color: var(--erp-text-muted);
411
- }
412
-
413
- .conflicts-badge {
414
- display: flex;
415
- align-items: center;
416
- gap: var(--nice-space-1-5, 6px);
417
- padding: var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);
418
- background: var(--nice-danger-tint-10, rgba(239, 68, 68, 0.1));
419
- border: 1px solid var(--erp-error);
420
- border-radius: var(--erp-radius);
421
- color: var(--erp-error);
422
- font-size: 0.875rem;
423
- }
424
-
425
- .allocation__legend {
426
- display: flex;
427
- gap: var(--nice-space-5, 20px);
428
- padding: var(--nice-space-2, 8px) var(--nice-space-5, 20px);
429
- background: var(--erp-surface-alt);
430
- border-bottom: 1px solid var(--erp-border);
431
- font-size: 0.75rem;
432
- color: var(--erp-text-muted);
433
- }
434
-
435
- .legend-item {
436
- display: flex;
437
- align-items: center;
438
- gap: var(--nice-space-1-5, 6px);
439
- }
440
-
441
- .legend-color {
442
- width: 16px;
443
- height: 16px;
444
- border-radius: var(--nice-radius-sm, 2px);
445
- }
446
-
447
- .allocation__grid {
448
- flex: 1;
449
- display: flex;
450
- flex-direction: column;
451
- overflow: auto;
452
- }
453
-
454
- .grid__header {
455
- display: flex;
456
- position: sticky;
457
- top: 0;
458
- z-index: 10;
459
- background: var(--erp-surface-alt);
460
- border-bottom: 1px solid var(--erp-border);
461
- }
462
-
463
- .resource-header {
464
- width: 280px;
465
- flex-shrink: 0;
466
- padding: var(--nice-space-3, 12px) var(--nice-space-4, 16px);
467
- font-size: 0.75rem;
468
- font-weight: 600;
469
- color: var(--erp-text-muted);
470
- text-transform: uppercase;
471
- border-right: 1px solid var(--erp-border);
472
- }
473
-
474
- .time-headers {
475
- display: flex;
476
- flex: 1;
477
- }
478
-
479
- .time-header {
480
- min-width: 80px;
481
- padding: var(--nice-space-3, 12px) var(--nice-space-2, 8px);
482
- text-align: center;
483
- font-size: 0.75rem;
484
- color: var(--erp-text-muted);
485
- border-right: 1px solid var(--erp-border);
486
- }
487
-
488
- .grid__body {
489
- flex: 1;
490
- }
491
-
492
- .resource-row {
493
- display: flex;
494
- flex-wrap: wrap;
495
- border-bottom: 1px solid var(--erp-border);
496
- }
497
-
498
- .resource-cell {
499
- width: 280px;
500
- flex-shrink: 0;
501
- display: flex;
502
- align-items: center;
503
- gap: var(--nice-space-2, 8px);
504
- padding: var(--nice-space-3, 12px) var(--nice-space-4, 16px);
505
- background: var(--erp-surface);
506
- border-right: 1px solid var(--erp-border);
507
- cursor: pointer;
508
- }
509
-
510
- .resource-cell:hover {
511
- background: var(--erp-surface-alt);
512
- }
513
-
514
- .expand-button {
515
- width: 20px;
516
- height: 20px;
517
- border: none;
518
- background: transparent;
519
- color: var(--erp-text-muted);
520
- cursor: pointer;
521
- }
522
-
523
- .resource-icon {
524
- font-size: 1.25rem;
525
- }
526
-
527
- .resource-info {
528
- flex: 1;
529
- display: flex;
530
- flex-direction: column;
531
- min-width: 0;
532
- }
533
-
534
- .resource-name {
535
- font-size: 0.875rem;
536
- font-weight: 500;
537
- white-space: nowrap;
538
- overflow: hidden;
539
- text-overflow: ellipsis;
540
- }
541
-
542
- .resource-dept {
543
- font-size: 0.75rem;
544
- color: var(--erp-text-muted);
545
- }
546
-
547
- .resource-capacity {
548
- font-size: 0.75rem;
549
- color: var(--erp-text-muted);
550
- }
551
-
552
- .time-cells {
553
- display: flex;
554
- flex: 1;
555
- }
556
-
557
- .time-cell {
558
- min-width: 80px;
559
- padding: var(--nice-space-2, 8px);
560
- border-right: 1px solid var(--erp-border);
561
- cursor: pointer;
562
- transition: all var(--erp-transition);
563
- position: relative;
564
- display: flex;
565
- flex-direction: column;
566
- align-items: center;
567
- justify-content: center;
568
- gap: var(--nice-space-1, 4px);
569
- }
570
-
571
- .time-cell:hover {
572
- background-color: var(--nice-accent-tint-10, rgba(99, 102, 241, 0.1)) !important;
573
- }
574
-
575
- .allocation-indicators {
576
- display: flex;
577
- gap: var(--nice-space-0-5, 2px);
578
- }
579
-
580
- .allocation-dot {
581
- width: 8px;
582
- height: 8px;
583
- border-radius: var(--nice-radius-full, 50%);
584
- background: var(--erp-primary);
585
- cursor: pointer;
586
- }
587
-
588
- .allocation-dot.tentative {
589
- background: var(--erp-warning);
590
- }
591
-
592
- .allocation-dot.confirmed {
593
- background: var(--erp-success);
594
- }
595
-
596
- .utilization-label {
597
- font-size: 0.625rem;
598
- color: var(--erp-text-muted);
599
- }
600
-
601
- .more-indicator {
602
- font-size: 0.625rem;
603
- color: var(--erp-text-muted);
604
- }
605
-
606
- .expanded-allocations {
607
- width: 100%;
608
- padding: var(--nice-space-2, 8px) var(--nice-space-2, 8px) var(--nice-space-2, 8px) 288px;
609
- position: relative;
610
- height: 40px;
611
- background: var(--erp-surface);
612
- }
613
-
614
- .allocation-bar {
615
- position: absolute;
616
- height: 24px;
617
- top: 8px;
618
- border-radius: var(--erp-radius-sm);
619
- background: var(--erp-primary);
620
- display: flex;
621
- align-items: center;
622
- padding: 0 var(--nice-space-2, 8px);
623
- cursor: pointer;
624
- transition: all var(--erp-transition);
625
- }
626
-
627
- .allocation-bar.tentative {
628
- background: var(--erp-warning);
629
- }
630
-
631
- .allocation-bar.confirmed {
632
- background: var(--erp-success);
633
- }
634
-
635
- .allocation-bar.selected {
636
- box-shadow: 0 0 0 2px white;
637
- }
638
-
639
- .allocation-label {
640
- font-size: 0.75rem;
641
- color: white;
642
- white-space: nowrap;
643
- }
644
-
645
- .delete-allocation {
646
- margin-left: auto;
647
- padding: 0 var(--nice-space-1, 4px);
648
- border: none;
649
- background: transparent;
650
- color: var(--nice-overlay-light-70, rgba(255, 255, 255, 0.7));
651
- cursor: pointer;
652
- }
653
-
654
- .delete-allocation:hover {
655
- color: white;
656
- }
657
-
658
- /* =============================================================================
659
- INVENTORY MANAGER
660
- ============================================================================= */
661
-
662
- .nice-inventory-manager {
663
- display: flex;
664
- flex-direction: column;
665
- height: 100%;
666
- min-height: 500px;
667
- background: var(--erp-bg);
668
- color: var(--erp-text);
669
- font-family: system-ui, -apple-system, sans-serif;
670
- }
671
-
672
- .inventory__toolbar {
673
- display: flex;
674
- justify-content: space-between;
675
- align-items: center;
676
- gap: var(--nice-space-4, 16px);
677
- padding: var(--nice-space-3, 12px) var(--nice-space-5, 20px);
678
- background: var(--erp-surface);
679
- border-bottom: 1px solid var(--erp-border);
680
- flex-wrap: wrap;
681
- }
682
-
683
- .toolbar__left {
684
- display: flex;
685
- align-items: center;
686
- gap: var(--nice-space-3, 12px);
687
- flex-wrap: wrap;
688
- }
689
-
690
- .toolbar__right {
691
- display: flex;
692
- align-items: center;
693
- gap: var(--nice-space-3, 12px);
694
- }
695
-
696
- .search-box {
697
- position: relative;
698
- }
699
-
700
- .search-box input {
701
- width: 240px;
702
- padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px) var(--nice-space-2, 8px) 36px;
703
- border: 1px solid var(--erp-border);
704
- border-radius: var(--erp-radius);
705
- background: var(--erp-surface-alt);
706
- color: var(--erp-text);
707
- font-size: 0.875rem;
708
- }
709
-
710
- .search-box input:focus {
711
- outline: none;
712
- border-color: var(--erp-primary);
713
- }
714
-
715
- .search-icon {
716
- position: absolute;
717
- left: 10px;
718
- top: 50%;
719
- transform: translateY(-50%);
720
- }
721
-
722
- .toolbar__left select {
723
- padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px);
724
- border: 1px solid var(--erp-border);
725
- border-radius: var(--erp-radius);
726
- background: var(--erp-surface-alt);
727
- color: var(--erp-text);
728
- font-size: 0.875rem;
729
- }
730
-
731
- .filter-checkbox {
732
- display: flex;
733
- align-items: center;
734
- gap: var(--nice-space-1-5, 6px);
735
- font-size: 0.875rem;
736
- color: var(--erp-text-muted);
737
- cursor: pointer;
738
- }
739
-
740
- .inventory__tabs {
741
- display: flex;
742
- gap: 0;
743
- background: var(--erp-surface);
744
- border-bottom: 1px solid var(--erp-border);
745
- padding: 0 var(--nice-space-5, 20px);
746
- }
747
-
748
- .tab {
749
- padding: var(--nice-space-3, 12px) var(--nice-space-5, 20px);
750
- border: none;
751
- background: transparent;
752
- color: var(--erp-text-muted);
753
- font-size: 0.875rem;
754
- cursor: pointer;
755
- position: relative;
756
- transition: all var(--erp-transition);
757
- }
758
-
759
- .tab:hover {
760
- color: var(--erp-text);
761
- }
762
-
763
- .tab--active {
764
- color: var(--erp-primary);
765
- }
766
-
767
- .tab--active::after {
768
- content: '';
769
- position: absolute;
770
- bottom: 0;
771
- left: 0;
772
- right: 0;
773
- height: 2px;
774
- background: var(--erp-primary);
775
- }
776
-
777
- .alert-badge {
778
- display: inline-flex;
779
- align-items: center;
780
- justify-content: center;
781
- min-width: 18px;
782
- height: 18px;
783
- margin-left: var(--nice-space-1-5, 6px);
784
- padding: 0 var(--nice-space-1-5, 6px);
785
- background: var(--erp-error);
786
- color: white;
787
- font-size: 0.625rem;
788
- font-weight: 600;
789
- border-radius: var(--nice-radius-full, 99px);
790
- }
791
-
792
- .inventory__content {
793
- flex: 1;
794
- padding: var(--nice-space-5, 20px);
795
- overflow: auto;
796
- }
797
-
798
- /* Grid View */
799
- .items-grid {
800
- display: grid;
801
- grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
802
- gap: var(--nice-space-4, 16px);
803
- }
804
-
805
- .item-card {
806
- background: var(--erp-surface);
807
- border-radius: var(--erp-radius);
808
- overflow: hidden;
809
- cursor: pointer;
810
- transition: all var(--erp-transition);
811
- position: relative;
812
- }
813
-
814
- .item-card:hover {
815
- transform: translateY(-2px);
816
- box-shadow: var(--erp-shadow);
817
- }
818
-
819
- .item-card--selected {
820
- ring: 2px solid var(--erp-primary);
821
- }
822
-
823
- .item-checkbox {
824
- position: absolute;
825
- top: 12px;
826
- left: 12px;
827
- z-index: 10;
828
- }
829
-
830
- .item-image {
831
- height: 120px;
832
- display: flex;
833
- align-items: center;
834
- justify-content: center;
835
- background: var(--erp-surface-alt);
836
- }
837
-
838
- .item-image img {
839
- width: 100%;
840
- height: 100%;
841
- object-fit: cover;
842
- }
843
-
844
- .placeholder-image {
845
- font-size: 2rem;
846
- }
847
-
848
- .item-info {
849
- padding: var(--nice-space-3, 12px);
850
- }
851
-
852
- .item-sku {
853
- font-size: 0.75rem;
854
- color: var(--erp-text-muted);
855
- }
856
-
857
- .item-name {
858
- margin: var(--nice-space-1, 4px) 0;
859
- font-size: 0.875rem;
860
- font-weight: 500;
861
- }
862
-
863
- .item-category {
864
- font-size: 0.75rem;
865
- color: var(--erp-text-muted);
866
- }
867
-
868
- .item-stock {
869
- display: flex;
870
- align-items: center;
871
- gap: var(--nice-space-2, 8px);
872
- padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px);
873
- border-top: 1px solid var(--erp-border);
874
- }
875
-
876
- .status-badge {
877
- padding: var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);
878
- border-radius: var(--erp-radius-sm);
879
- font-size: 0.625rem;
880
- font-weight: 500;
881
- color: white;
882
- text-transform: capitalize;
883
- }
884
-
885
- .quantity {
886
- font-size: 0.875rem;
887
- font-weight: 500;
888
- }
889
-
890
- .reorder-alert {
891
- font-size: 0.75rem;
892
- color: var(--erp-warning);
893
- }
894
-
895
- .item-value {
896
- padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px);
897
- border-top: 1px solid var(--erp-border);
898
- font-size: 0.875rem;
899
- font-weight: 600;
900
- color: var(--erp-primary-light);
901
- }
902
-
903
- /* List View */
904
- .items-table {
905
- background: var(--erp-surface);
906
- border-radius: var(--erp-radius);
907
- overflow: hidden;
908
- }
909
-
910
- .items-table table {
911
- width: 100%;
912
- border-collapse: collapse;
913
- }
914
-
915
- .items-table th {
916
- padding: var(--nice-space-3, 12px);
917
- text-align: left;
918
- font-size: 0.75rem;
919
- font-weight: 600;
920
- color: var(--erp-text-muted);
921
- text-transform: uppercase;
922
- background: var(--erp-surface-alt);
923
- cursor: pointer;
924
- }
925
-
926
- .items-table th:hover {
927
- color: var(--erp-text);
928
- }
929
-
930
- .items-table td {
931
- padding: var(--nice-space-3, 12px);
932
- font-size: 0.875rem;
933
- border-bottom: 1px solid var(--erp-border);
934
- }
935
-
936
- .items-table tr:hover {
937
- background: var(--erp-surface-alt);
938
- }
939
-
940
- .row--selected {
941
- background: var(--nice-accent-tint-10, rgba(99, 102, 241, 0.1));
942
- }
943
-
944
- .sku-cell {
945
- font-family: monospace;
946
- color: var(--erp-text-muted);
947
- }
948
-
949
- .low-stock {
950
- color: var(--erp-warning);
951
- }
952
-
953
- .actions-cell {
954
- display: flex;
955
- gap: var(--nice-space-1, 4px);
956
- }
957
-
958
- .action-btn {
959
- padding: var(--nice-space-1, 4px) var(--nice-space-2, 8px);
960
- border: none;
961
- background: transparent;
962
- cursor: pointer;
963
- border-radius: var(--erp-radius-sm);
964
- transition: background var(--erp-transition);
965
- }
966
-
967
- .action-btn:hover {
968
- background: var(--erp-surface-alt);
969
- }
970
-
971
- .action-btn--danger:hover {
972
- background: var(--nice-danger-tint-20, rgba(239, 68, 68, 0.2));
973
- }
974
-
975
- /* Kanban View */
976
- .items-kanban {
977
- display: flex;
978
- gap: var(--nice-space-4, 16px);
979
- overflow-x: auto;
980
- padding-bottom: var(--nice-space-4, 16px);
981
- }
982
-
983
- .kanban-column {
984
- min-width: 260px;
985
- max-width: 300px;
986
- flex-shrink: 0;
987
- background: var(--erp-surface);
988
- border-radius: var(--erp-radius);
989
- overflow: hidden;
990
- }
991
-
992
- .column-header {
993
- display: flex;
994
- align-items: center;
995
- gap: var(--nice-space-2, 8px);
996
- padding: var(--nice-space-3, 12px);
997
- border-bottom: 2px solid;
998
- }
999
-
1000
- .status-dot {
1001
- width: 10px;
1002
- height: 10px;
1003
- border-radius: var(--nice-radius-full, 50%);
1004
- }
1005
-
1006
- .column-title {
1007
- flex: 1;
1008
- font-size: 0.875rem;
1009
- font-weight: 600;
1010
- text-transform: capitalize;
1011
- }
1012
-
1013
- .column-count {
1014
- padding: var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);
1015
- background: var(--erp-surface-alt);
1016
- border-radius: var(--nice-radius-full, 99px);
1017
- font-size: 0.75rem;
1018
- color: var(--erp-text-muted);
1019
- }
1020
-
1021
- .column-items {
1022
- padding: var(--nice-space-2, 8px);
1023
- max-height: 500px;
1024
- overflow-y: auto;
1025
- }
1026
-
1027
- .kanban-card {
1028
- padding: var(--nice-space-3, 12px);
1029
- background: var(--erp-surface-alt);
1030
- border-radius: var(--erp-radius-sm);
1031
- margin-bottom: var(--nice-space-2, 8px);
1032
- cursor: pointer;
1033
- transition: all var(--erp-transition);
1034
- }
1035
-
1036
- .kanban-card:hover {
1037
- transform: translateY(-1px);
1038
- box-shadow: var(--erp-shadow);
1039
- }
1040
-
1041
- .card-sku {
1042
- font-size: 0.625rem;
1043
- color: var(--erp-text-muted);
1044
- font-family: monospace;
1045
- }
1046
-
1047
- .card-name {
1048
- display: block;
1049
- margin: var(--nice-space-1, 4px) 0;
1050
- font-size: 0.875rem;
1051
- font-weight: 500;
1052
- }
1053
-
1054
- .card-qty {
1055
- font-size: 0.75rem;
1056
- color: var(--erp-text-muted);
1057
- }
1058
-
1059
- /* Transactions Tab */
1060
- .transactions-tab {
1061
- display: flex;
1062
- flex-direction: column;
1063
- gap: var(--nice-space-4, 16px);
1064
- }
1065
-
1066
- .add-transaction-button {
1067
- align-self: flex-start;
1068
- padding: var(--nice-space-2, 8px) var(--nice-space-4, 16px);
1069
- border: none;
1070
- background: var(--erp-primary);
1071
- color: white;
1072
- border-radius: var(--erp-radius);
1073
- cursor: pointer;
1074
- }
1075
-
1076
- .transactions-list {
1077
- background: var(--erp-surface);
1078
- border-radius: var(--erp-radius);
1079
- overflow: hidden;
1080
- }
1081
-
1082
- .transaction-item {
1083
- display: flex;
1084
- align-items: center;
1085
- gap: var(--nice-space-3, 12px);
1086
- padding: var(--nice-space-3, 12px) var(--nice-space-4, 16px);
1087
- border-bottom: 1px solid var(--erp-border);
1088
- }
1089
-
1090
- .tx-icon {
1091
- font-size: 1.25rem;
1092
- }
1093
-
1094
- .tx-info {
1095
- flex: 1;
1096
- display: flex;
1097
- flex-direction: column;
1098
- }
1099
-
1100
- .tx-type {
1101
- font-size: 0.75rem;
1102
- color: var(--erp-text-muted);
1103
- text-transform: capitalize;
1104
- }
1105
-
1106
- .tx-item {
1107
- font-size: 0.875rem;
1108
- font-weight: 500;
1109
- }
1110
-
1111
- .tx-qty {
1112
- font-size: 0.875rem;
1113
- font-weight: 600;
1114
- }
1115
-
1116
- .tx-qty.positive {
1117
- color: var(--erp-success);
1118
- }
1119
-
1120
- .tx-qty.negative {
1121
- color: var(--erp-error);
1122
- }
1123
-
1124
- .tx-date {
1125
- font-size: 0.75rem;
1126
- color: var(--erp-text-muted);
1127
- }
1128
-
1129
- .tx-ref {
1130
- font-size: 0.75rem;
1131
- color: var(--erp-text-muted);
1132
- }
1133
-
1134
- /* Reorder Tab */
1135
- .reorder-tab {
1136
- display: flex;
1137
- flex-direction: column;
1138
- }
1139
-
1140
- .reorder-list {
1141
- display: flex;
1142
- flex-direction: column;
1143
- gap: var(--nice-space-2, 8px);
1144
- }
1145
-
1146
- .reorder-item {
1147
- display: flex;
1148
- align-items: center;
1149
- gap: var(--nice-space-4, 16px);
1150
- padding: var(--nice-space-4, 16px);
1151
- background: var(--erp-surface);
1152
- border-radius: var(--erp-radius);
1153
- border-left: 4px solid var(--erp-warning);
1154
- }
1155
-
1156
- .reorder-info {
1157
- flex: 1;
1158
- }
1159
-
1160
- .reorder-sku {
1161
- font-size: 0.75rem;
1162
- color: var(--erp-text-muted);
1163
- font-family: monospace;
1164
- }
1165
-
1166
- .reorder-name {
1167
- display: block;
1168
- font-size: 0.875rem;
1169
- font-weight: 500;
1170
- }
1171
-
1172
- .reorder-stock {
1173
- display: flex;
1174
- gap: var(--nice-space-4, 16px);
1175
- font-size: 0.75rem;
1176
- color: var(--erp-text-muted);
1177
- }
1178
-
1179
- .supplier-name {
1180
- font-size: 0.875rem;
1181
- color: var(--erp-text-muted);
1182
- }
1183
-
1184
- .create-po-button {
1185
- padding: var(--nice-space-2, 8px) var(--nice-space-4, 16px);
1186
- border: 1px solid var(--erp-primary);
1187
- background: transparent;
1188
- color: var(--erp-primary);
1189
- border-radius: var(--erp-radius);
1190
- font-size: 0.875rem;
1191
- cursor: pointer;
1192
- transition: all var(--erp-transition);
1193
- }
1194
-
1195
- .create-po-button:hover {
1196
- background: var(--erp-primary);
1197
- color: white;
1198
- }
1199
-
1200
- /* Pagination */
1201
- .pagination {
1202
- display: flex;
1203
- align-items: center;
1204
- justify-content: center;
1205
- gap: var(--nice-space-4, 16px);
1206
- margin-top: var(--nice-space-6, 24px);
1207
- }
1208
-
1209
- .pagination button {
1210
- padding: var(--nice-space-2, 8px) var(--nice-space-4, 16px);
1211
- border: 1px solid var(--erp-border);
1212
- background: var(--erp-surface);
1213
- color: var(--erp-text);
1214
- border-radius: var(--erp-radius);
1215
- cursor: pointer;
1216
- }
1217
-
1218
- .pagination button:disabled {
1219
- opacity: 0.5;
1220
- cursor: not-allowed;
1221
- }
1222
-
1223
- .pagination span {
1224
- font-size: 0.875rem;
1225
- color: var(--erp-text-muted);
1226
- }
1227
-
1228
- /* Empty State */
1229
- .empty-state {
1230
- display: flex;
1231
- flex-direction: column;
1232
- align-items: center;
1233
- justify-content: center;
1234
- padding: var(--nice-space-15, 60px);
1235
- text-align: center;
1236
- color: var(--erp-text-muted);
1237
- }
1238
-
1239
- .empty-icon {
1240
- font-size: 3rem;
1241
- margin-bottom: var(--nice-space-4, 16px);
1242
- }
1243
-
1244
- /* =============================================================================
1245
- MODALS
1246
- ============================================================================= */
1247
-
1248
- .modal-overlay {
1249
- position: fixed;
1250
- inset: 0;
1251
- background: var(--nice-overlay-70, rgba(0, 0, 0, 0.7));
1252
- display: flex;
1253
- align-items: center;
1254
- justify-content: center;
1255
- z-index: 1000;
1256
- }
1257
-
1258
- .item-modal,
1259
- .transaction-modal,
1260
- .allocation-modal {
1261
- width: 90%;
1262
- max-width: 500px;
1263
- max-height: 90vh;
1264
- background: var(--erp-surface);
1265
- border-radius: var(--erp-radius);
1266
- padding: var(--nice-space-6, 24px);
1267
- overflow-y: auto;
1268
- }
1269
-
1270
- .item-modal h3,
1271
- .transaction-modal h3,
1272
- .allocation-modal h3 {
1273
- margin: 0 0 var(--nice-space-5, 20px);
1274
- font-size: 1.125rem;
1275
- font-weight: 600;
1276
- }
1277
-
1278
- .modal-form {
1279
- display: flex;
1280
- flex-direction: column;
1281
- gap: var(--nice-space-4, 16px);
1282
- }
1283
-
1284
- .modal-form label {
1285
- display: flex;
1286
- flex-direction: column;
1287
- gap: var(--nice-space-1-5, 6px);
1288
- font-size: 0.875rem;
1289
- color: var(--erp-text-muted);
1290
- }
1291
-
1292
- .modal-form input,
1293
- .modal-form select,
1294
- .modal-form textarea {
1295
- padding: var(--nice-space-2-5, 10px) var(--nice-space-3, 12px);
1296
- border: 1px solid var(--erp-border);
1297
- border-radius: var(--erp-radius-sm);
1298
- background: var(--erp-surface-alt);
1299
- color: var(--erp-text);
1300
- font-size: 0.875rem;
1301
- }
1302
-
1303
- .modal-form input:focus,
1304
- .modal-form select:focus,
1305
- .modal-form textarea:focus {
1306
- outline: none;
1307
- border-color: var(--erp-primary);
1308
- }
1309
-
1310
- .modal-form textarea {
1311
- min-height: 80px;
1312
- resize: vertical;
1313
- }
1314
-
1315
- .form-row {
1316
- display: grid;
1317
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1318
- gap: var(--nice-space-4, 16px);
1319
- }
1320
-
1321
- .modal-actions {
1322
- display: flex;
1323
- justify-content: flex-end;
1324
- gap: var(--nice-space-3, 12px);
1325
- margin-top: var(--nice-space-6, 24px);
1326
- }
1327
-
1328
- .cancel-button {
1329
- padding: var(--nice-space-2-5, 10px) var(--nice-space-5, 20px);
1330
- border: 1px solid var(--erp-border);
1331
- background: transparent;
1332
- color: var(--erp-text);
1333
- border-radius: var(--erp-radius);
1334
- cursor: pointer;
1335
- }
1336
-
1337
- .save-button,
1338
- .create-button {
1339
- padding: var(--nice-space-2-5, 10px) var(--nice-space-5, 20px);
1340
- border: none;
1341
- background: var(--erp-primary);
1342
- color: white;
1343
- border-radius: var(--erp-radius);
1344
- cursor: pointer;
1345
- }
1346
-
1347
- .save-button:hover,
1348
- .create-button:hover {
1349
- background: var(--erp-primary-dark);
1350
- }
1351
-
1352
- /* =============================================================================
1353
- RESPONSIVE
1354
- ============================================================================= */
1355
-
1356
- @media (max-width: 1024px) {
1357
- .gantt__task-list {
1358
- width: 280px;
1359
- }
1360
-
1361
- .resource-cell {
1362
- width: 220px;
1363
- }
1364
-
1365
- .expanded-allocations {
1366
- padding-left: 228px;
1367
- }
1368
- }
1369
-
1370
- @media (max-width: 768px) {
1371
- .gantt__container {
1372
- flex-direction: column;
1373
- }
1374
-
1375
- .gantt__task-list {
1376
- width: 100%;
1377
- max-height: 200px;
1378
- border-right: none;
1379
- border-bottom: 1px solid var(--erp-border);
1380
- }
1381
-
1382
- .resource-row {
1383
- flex-direction: column;
1384
- }
1385
-
1386
- .resource-cell {
1387
- width: 100%;
1388
- }
1389
-
1390
- .time-cells {
1391
- width: 100%;
1392
- overflow-x: auto;
1393
- }
1394
-
1395
- .items-grid {
1396
- grid-template-columns: 1fr;
1397
- }
1398
-
1399
- .toolbar__left,
1400
- .toolbar__right {
1401
- width: 100%;
1402
- justify-content: center;
1403
- }
1404
- }
1405
-
1406
- /* =============================================================================
1407
- WAREHOUSE VIEW (NiceWarehouseView)
1408
- ============================================================================= */
1409
- .nice-warehouse-view {
1410
- display: flex;
1411
- flex-direction: column;
1412
- gap: var(--nice-space-4, 16px);
1413
- padding: var(--nice-space-4, 16px);
1414
- background: var(--erp-bg);
1415
- color: var(--erp-text);
1416
- border-radius: var(--erp-radius);
1417
- border: 1px solid var(--erp-border);
1418
- }
1419
-
1420
- .nice-warehouse-view__header {
1421
- display: flex;
1422
- align-items: center;
1423
- justify-content: space-between;
1424
- flex-wrap: wrap;
1425
- gap: var(--nice-space-3, 12px);
1426
- }
1427
-
1428
- .nice-warehouse-view__header h3 {
1429
- margin: 0;
1430
- font-size: 1.125rem;
1431
- font-weight: 600;
1432
- }
1433
-
1434
- .nice-warehouse-view__legend {
1435
- display: inline-flex;
1436
- align-items: center;
1437
- gap: var(--nice-space-2, 8px);
1438
- font-size: 0.85rem;
1439
- color: var(--erp-text-muted);
1440
- }
1441
-
1442
- .nice-warehouse-view__legend > span {
1443
- display: inline-block;
1444
- width: 14px;
1445
- height: 14px;
1446
- border-radius: var(--erp-radius-sm);
1447
- border: 1px solid var(--erp-border);
1448
- margin-left: var(--nice-space-2, 8px);
1449
- margin-right: var(--nice-space-1, 4px);
1450
- }
1451
-
1452
- .nice-warehouse-view__legend > span:first-of-type { margin-left: 0; }
1453
-
1454
- .nice-warehouse-view__grid {
1455
- display: flex;
1456
- flex-direction: column;
1457
- gap: var(--nice-space-1, 4px);
1458
- }
1459
-
1460
- .nice-warehouse-view__row {
1461
- display: flex;
1462
- gap: var(--nice-space-1, 4px);
1463
- }
1464
-
1465
- .nice-warehouse-view__aisle {
1466
- width: var(--nice-space-3, 12px);
1467
- align-self: stretch;
1468
- border-left: 1px dashed var(--erp-border);
1469
- margin: 0 var(--nice-space-1, 4px);
1470
- }
1471
-
1472
- .nice-warehouse-view__cell {
1473
- position: relative;
1474
- border: 1px solid var(--erp-border);
1475
- border-radius: var(--erp-radius-sm);
1476
- cursor: pointer;
1477
- display: flex;
1478
- align-items: center;
1479
- justify-content: center;
1480
- font-size: 0.7rem;
1481
- color: rgba(0, 0, 0, 0.7);
1482
- transition: transform var(--erp-transition);
1483
- }
1484
-
1485
- .nice-warehouse-view__cell:hover {
1486
- transform: scale(1.08);
1487
- z-index: 1;
1488
- }
1489
-
1490
- .nice-warehouse-view__cell:focus-visible {
1491
- outline: 2px solid var(--erp-primary);
1492
- outline-offset: 1px;
1493
- }
1494
-
1495
- .nice-warehouse-view__bin {
1496
- pointer-events: none;
1497
- }
1498
-
1499
- .nice-warehouse-view__details {
1500
- margin-top: var(--nice-space-2, 8px);
1501
- padding: var(--nice-space-3, 12px);
1502
- background: var(--erp-surface);
1503
- border: 1px solid var(--erp-border);
1504
- border-radius: var(--erp-radius);
1505
- font-size: 0.85rem;
1506
- }
1507
-
1508
- .nice-warehouse-view__details ul {
1509
- margin: var(--nice-space-2, 8px) 0 0;
1510
- padding-left: var(--nice-space-4, 16px);
1511
- }