@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.1.6 → 0.1.7

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 (82) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.esm.js +18 -1
  4. package/dist/index.js +18 -1
  5. package/dist/setupTests.d.ts +124 -0
  6. package/dist/setupTests.esm.js +122 -0
  7. package/dist/setupTests.js +122 -0
  8. package/dist/styles.css +1 -1
  9. package/package.json +1 -1
  10. package/src/index.css +1046 -0
  11. package/src/index.ts +18 -0
  12. package/src/plugins/theme-css-generator.ts +354 -0
  13. package/src/setupTests.ts +124 -0
  14. package/src/stories/README.md +39 -0
  15. package/src/stories/components/ThemeDebugger.tsx +143 -0
  16. package/src/stories/index.ts +29 -0
  17. package/src/stories/storybook-theme-imports.css +51 -0
  18. package/src/styles/base/fonts.css +30 -0
  19. package/src/styles/base/generated-theme-variables.css +573 -0
  20. package/src/styles/base/index.css +7 -0
  21. package/src/styles/base/reset.css +48 -0
  22. package/src/styles/base/theme.css +1068 -0
  23. package/src/styles/base/typography.css +68 -0
  24. package/src/styles/base/variables.css +5 -0
  25. package/src/styles/components/CLAUDE.md +62 -0
  26. package/src/styles/components/base/badge.css +428 -0
  27. package/src/styles/components/base/button.css +774 -0
  28. package/src/styles/components/base/card.css +601 -0
  29. package/src/styles/components/base/checkbox.css +442 -0
  30. package/src/styles/components/base/index.css +9 -0
  31. package/src/styles/components/base/input.css +887 -0
  32. package/src/styles/components/base/label.css +296 -0
  33. package/src/styles/components/data-display/chart.css +353 -0
  34. package/src/styles/components/data-display/data-grid.css +619 -0
  35. package/src/styles/components/data-display/index.css +9 -0
  36. package/src/styles/components/data-display/list.css +560 -0
  37. package/src/styles/components/data-display/table.css +498 -0
  38. package/src/styles/components/data-display/timeline.css +764 -0
  39. package/src/styles/components/data-display/tree.css +881 -0
  40. package/src/styles/components/feedback/alert.css +358 -0
  41. package/src/styles/components/feedback/index.css +7 -0
  42. package/src/styles/components/feedback/progress.css +435 -0
  43. package/src/styles/components/feedback/skeleton.css +337 -0
  44. package/src/styles/components/feedback/toast.css +564 -0
  45. package/src/styles/components/index.css +17 -0
  46. package/src/styles/components/navigation/breadcrumb.css +465 -0
  47. package/src/styles/components/navigation/index.css +9 -0
  48. package/src/styles/components/navigation/menu.css +572 -0
  49. package/src/styles/components/navigation/pagination.css +635 -0
  50. package/src/styles/components/navigation/sidebar.css +807 -0
  51. package/src/styles/components/navigation/stepper.css +519 -0
  52. package/src/styles/components/navigation/tabs.css +404 -0
  53. package/src/styles/components/overlay/backdrop.css +243 -0
  54. package/src/styles/components/overlay/index.css +8 -0
  55. package/src/styles/components/overlay/modal.css +482 -0
  56. package/src/styles/components/overlay/popover.css +607 -0
  57. package/src/styles/components/overlay/portal.css +213 -0
  58. package/src/styles/components/overlay/tooltip.css +488 -0
  59. package/src/styles/generated-theme-variables.css +573 -0
  60. package/src/styles/index.css +5 -0
  61. package/src/styles/layers/index.css +54 -0
  62. package/src/styles/layers/overrides.css +108 -0
  63. package/src/styles/layers/validation.css +159 -0
  64. package/src/styles/layers/validation.js +310 -0
  65. package/src/styles/themes/default.css +450 -0
  66. package/src/styles/themes/enterprise.css +370 -0
  67. package/src/styles/themes/harvey.css +436 -0
  68. package/src/styles/themes/index.css +4 -0
  69. package/src/styles/themes/stan-design.css +572 -0
  70. package/src/styles/utilities/advanced-transition-system.css +467 -0
  71. package/src/styles/utilities/battery-conscious-animations.css +289 -0
  72. package/src/styles/utilities/enterprise-mobile-experience.css +817 -0
  73. package/src/styles/utilities/hardware-acceleration.css +121 -0
  74. package/src/styles/utilities/index.css +20 -0
  75. package/src/styles/utilities/mobile-skeleton-loading.css +596 -0
  76. package/src/styles/utilities/semantic-input-system.css +451 -0
  77. package/src/styles/utilities/touch-friendly-interface.css +247 -0
  78. package/src/styles/utilities/touch-optimization.css +165 -0
  79. package/src/test-utils/index.ts +7 -0
  80. package/src/test-utils/theme-testing.tsx +219 -0
  81. package/src/testing/test-automation.ts +627 -0
  82. package/src/testing/test-utils.tsx +367 -0
@@ -0,0 +1,881 @@
1
+ /* Tree Component Styles */
2
+ /* Semantic CSS architecture following BEM methodology */
3
+
4
+ /* ============================================================================ */
5
+ /* TREE CONTAINER */
6
+ /* ============================================================================ */
7
+
8
+ .tree {
9
+ --tree-bg: var(--cs-colors-surface-background);
10
+ --tree-border: var(--cs-colors-surface-border);
11
+ --tree-radius: var(--cs-border-radius-md);
12
+ --tree-shadow: var(--cs-shadows-sm);
13
+ --tree-spacing: var(--cs-spacing-scale-4);
14
+ --tree-node-hover: var(--cs-colors-interactive-hover);
15
+ --tree-node-selected: var(--cs-colors-primary-50);
16
+ --tree-line-color: var(--cs-colors-surface-divider);
17
+ --tree-indent: var(--cs-spacing-scale-6);
18
+ }
19
+
20
+ .tree__container {
21
+ position: relative;
22
+ background-color: var(--tree-bg);
23
+ border: var(--cs-border-width-normal) solid var(--tree-border);
24
+ border-radius: var(--tree-radius);
25
+ box-shadow: var(--tree-shadow);
26
+ overflow: hidden;
27
+ }
28
+
29
+ /* Tree container sizes */
30
+ .tree__container--sm {
31
+ font-size: var(--cs-fonts-primary-sizes-sm);
32
+ --tree-indent: var(--cs-spacing-scale-4);
33
+ }
34
+
35
+ .tree__container--md {
36
+ font-size: var(--cs-fonts-primary-sizes-base);
37
+ --tree-indent: var(--cs-spacing-scale-6);
38
+ }
39
+
40
+ .tree__container--lg {
41
+ font-size: var(--cs-fonts-primary-sizes-lg);
42
+ --tree-indent: var(--cs-spacing-scale-8);
43
+ }
44
+
45
+ /* Tree variants */
46
+ .tree__container--bordered {
47
+ border-width: var(--cs-border-width-thick);
48
+ border-color: var(--cs-colors-primary-500);
49
+ }
50
+
51
+ .tree__container--striped .tree__node:nth-child(even) {
52
+ background-color: var(--cs-colors-surface-surface);
53
+ }
54
+
55
+ /* ============================================================================ */
56
+ /* TREE HEADER */
57
+ /* ============================================================================ */
58
+
59
+ .tree__header {
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: space-between;
63
+ padding: var(--tree-spacing);
64
+ border-bottom: var(--cs-border-width-normal) solid var(--cs-colors-surface-divider);
65
+ background-color: var(--cs-colors-surface-surface);
66
+ }
67
+
68
+ /* Search and Filter Bar */
69
+ .tree__search-filter {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: var(--cs-spacing-scale-3);
73
+ margin-bottom: var(--cs-spacing-scale-4);
74
+ padding: var(--cs-spacing-scale-3);
75
+ background-color: var(--cs-colors-surface-surface);
76
+ border-radius: var(--cs-border-radius-md);
77
+ border: var(--cs-border-width-normal) solid var(--cs-colors-surface-border);
78
+ }
79
+
80
+ .tree__search {
81
+ flex: 1;
82
+ position: relative;
83
+ }
84
+
85
+ .tree__search-icon {
86
+ position: absolute;
87
+ left: var(--cs-spacing-scale-3);
88
+ top: 50%;
89
+ transform: translateY(-50%);
90
+ color: var(--cs-colors-text-muted);
91
+ }
92
+
93
+ .tree__filter-button {
94
+ display: flex;
95
+ align-items: center;
96
+ gap: var(--cs-spacing-scale-2);
97
+ padding: var(--cs-spacing-scale-2) var(--cs-spacing-scale-3);
98
+ border-radius: var(--cs-border-radius-md);
99
+ border: var(--cs-border-width-normal) solid var(--cs-colors-surface-border);
100
+ background-color: var(--cs-colors-surface-background);
101
+ color: var(--cs-colors-text-secondary);
102
+ cursor: pointer;
103
+ transition: var(--cs-transitions-colors);
104
+ font-size: var(--cs-fonts-primary-sizes-sm);
105
+ }
106
+
107
+ .tree__filter-button:hover {
108
+ background-color: var(--cs-colors-interactive-hover);
109
+ }
110
+
111
+ .tree__title {
112
+ font-size: var(--cs-fonts-primary-sizes-lg);
113
+ font-weight: var(--cs-fonts-primary-weights-semibold);
114
+ color: var(--cs-colors-text-primary);
115
+ margin: 0;
116
+ }
117
+
118
+ .tree__actions {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: var(--cs-spacing-scale-2);
122
+ }
123
+
124
+ .tree__search {
125
+ position: relative;
126
+ max-width: var(--cs-spacing-scale-64);
127
+ }
128
+
129
+ .tree__search-input {
130
+ width: 100%;
131
+ padding: var(--cs-spacing-scale-2) var(--cs-spacing-scale-10) var(--cs-spacing-scale-2) var(--cs-spacing-scale-3);
132
+ border: var(--cs-border-width-normal) solid var(--tree-border);
133
+ border-radius: var(--cs-border-radius-md);
134
+ font-size: var(--cs-fonts-primary-sizes-sm);
135
+ background-color: var(--tree-bg);
136
+ transition: var(--cs-transitions-colors);
137
+ }
138
+
139
+ .tree__search-input:focus {
140
+ outline: none;
141
+ border-color: var(--cs-colors-primary-500);
142
+ box-shadow: var(--cs-shadows-focus);
143
+ }
144
+
145
+ .tree__search-icon {
146
+ position: absolute;
147
+ right: var(--cs-spacing-scale-3);
148
+ top: 50%;
149
+ transform: translateY(-50%);
150
+ width: var(--cs-spacing-scale-4);
151
+ height: var(--cs-spacing-scale-4);
152
+ color: var(--cs-colors-text-muted);
153
+ pointer-events: none;
154
+ }
155
+
156
+ .tree__filters {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: var(--cs-spacing-scale-2);
160
+ margin-top: var(--cs-spacing-scale-3);
161
+ padding-top: var(--cs-spacing-scale-3);
162
+ border-top: var(--cs-border-width-normal) solid var(--cs-colors-surface-divider);
163
+ }
164
+
165
+ .tree__controls {
166
+ display: flex;
167
+ align-items: center;
168
+ gap: var(--cs-spacing-scale-2);
169
+ }
170
+
171
+ .tree__control-button {
172
+ display: inline-flex;
173
+ align-items: center;
174
+ gap: var(--cs-spacing-scale-1);
175
+ padding: var(--cs-spacing-scale-1) var(--cs-spacing-scale-2);
176
+ border: var(--cs-border-width-normal) solid var(--tree-border);
177
+ background-color: var(--tree-bg);
178
+ border-radius: var(--cs-border-radius-sm);
179
+ font-size: var(--cs-fonts-primary-sizes-sm);
180
+ cursor: pointer;
181
+ transition: var(--cs-transitions-colors);
182
+ color: var(--cs-colors-text-secondary);
183
+ }
184
+
185
+ .tree__control-button:hover {
186
+ background-color: var(--tree-node-hover);
187
+ color: var(--cs-colors-text-primary);
188
+ }
189
+
190
+ /* ============================================================================ */
191
+ /* TREE WRAPPER */
192
+ /* ============================================================================ */
193
+
194
+ .tree__wrapper {
195
+ position: relative;
196
+ max-height: var(--cs-spacing-scale-96);
197
+ overflow-y: auto;
198
+ padding: var(--cs-spacing-scale-2);
199
+ }
200
+
201
+ .tree__list {
202
+ position: relative;
203
+ list-style: none;
204
+ margin: 0;
205
+ padding: 0;
206
+ }
207
+
208
+ /* ============================================================================ */
209
+ /* TREE NODES */
210
+ /* ============================================================================ */
211
+
212
+ .tree__node {
213
+ position: relative;
214
+ display: block;
215
+ }
216
+
217
+ .tree__node-content {
218
+ display: flex;
219
+ align-items: center;
220
+ padding: var(--cs-spacing-scale-2) var(--cs-spacing-scale-3);
221
+ margin: var(--cs-spacing-scale-1) 0;
222
+ border-radius: var(--cs-border-radius-sm);
223
+ transition: var(--cs-transitions-colors);
224
+ cursor: pointer;
225
+ user-select: none;
226
+ }
227
+
228
+ .tree__node-content:hover {
229
+ background-color: var(--tree-node-hover);
230
+ }
231
+
232
+ .tree__node-content--selected {
233
+ background-color: var(--tree-node-selected);
234
+ color: var(--cs-colors-primary-700);
235
+ }
236
+
237
+ .tree__node-content--disabled {
238
+ opacity: 0.5;
239
+ cursor: not-allowed;
240
+ pointer-events: none;
241
+ }
242
+
243
+ .tree__node-content--dragging {
244
+ opacity: 0.5;
245
+ transform: rotate(5deg);
246
+ }
247
+
248
+ .tree__node-content--drop-target {
249
+ background-color: var(--cs-colors-primary-100);
250
+ border: var(--cs-border-width-thick) dashed var(--cs-colors-primary-500);
251
+ }
252
+
253
+ /* ============================================================================ */
254
+ /* TREE NODE INDENTATION */
255
+ /* ============================================================================ */
256
+
257
+ .tree__node--level-0 {
258
+ margin-left: 0;
259
+ }
260
+
261
+ .tree__node--level-1 {
262
+ margin-left: var(--tree-indent);
263
+ }
264
+
265
+ .tree__node--level-2 {
266
+ margin-left: calc(var(--tree-indent) * 2);
267
+ }
268
+
269
+ .tree__node--level-3 {
270
+ margin-left: calc(var(--tree-indent) * 3);
271
+ }
272
+
273
+ .tree__node--level-4 {
274
+ margin-left: calc(var(--tree-indent) * 4);
275
+ }
276
+
277
+ .tree__node--level-5 {
278
+ margin-left: calc(var(--tree-indent) * 5);
279
+ }
280
+
281
+ .tree__node--level-6 {
282
+ margin-left: calc(var(--tree-indent) * 6);
283
+ }
284
+
285
+ .tree__node--level-7 {
286
+ margin-left: calc(var(--tree-indent) * 7);
287
+ }
288
+
289
+ .tree__node--level-8 {
290
+ margin-left: calc(var(--tree-indent) * 8);
291
+ }
292
+
293
+ .tree__node--level-9 {
294
+ margin-left: calc(var(--tree-indent) * 9);
295
+ }
296
+
297
+ .tree__node--level-10 {
298
+ margin-left: calc(var(--tree-indent) * 10);
299
+ }
300
+
301
+ /* ============================================================================ */
302
+ /* TREE LINES */
303
+ /* ============================================================================ */
304
+
305
+ .tree__container--show-lines .tree__node::before {
306
+ content: '';
307
+ position: absolute;
308
+ left: calc(var(--tree-indent) / 2 - 1px);
309
+ top: 0;
310
+ bottom: 0;
311
+ width: var(--cs-border-width-normal);
312
+ background-color: var(--tree-line-color);
313
+ z-index: 1;
314
+ }
315
+
316
+ .tree__container--show-lines .tree__node::after {
317
+ content: '';
318
+ position: absolute;
319
+ left: calc(var(--tree-indent) / 2 - 1px);
320
+ top: var(--cs-spacing-scale-4);
321
+ width: calc(var(--tree-indent) / 2);
322
+ height: var(--cs-border-width-normal);
323
+ background-color: var(--tree-line-color);
324
+ z-index: 1;
325
+ }
326
+
327
+ .tree__container--show-lines .tree__node:last-child::before {
328
+ height: var(--cs-spacing-scale-4);
329
+ }
330
+
331
+ .tree__container--show-lines .tree__node--level-0::before,
332
+ .tree__container--show-lines .tree__node--level-0::after {
333
+ display: none;
334
+ }
335
+
336
+ /* ============================================================================ */
337
+ /* TREE NODE EXPAND/COLLAPSE */
338
+ /* ============================================================================ */
339
+
340
+ .tree__node-toggle {
341
+ margin-right: var(--cs-spacing-scale-2);
342
+ flex-shrink: 0;
343
+ }
344
+
345
+ .tree__node-toggle--sm {
346
+ margin-right: var(--cs-spacing-scale-1);
347
+ }
348
+
349
+ .tree__node-toggle--lg {
350
+ margin-right: var(--cs-spacing-scale-3);
351
+ }
352
+
353
+ .tree__node-spacer {
354
+ flex-shrink: 0;
355
+ }
356
+
357
+ .tree__node-spacer--sm {
358
+ width: var(--cs-spacing-scale-5);
359
+ }
360
+
361
+ .tree__node-spacer--md {
362
+ width: var(--cs-spacing-scale-6);
363
+ }
364
+
365
+ .tree__node-spacer--lg {
366
+ width: var(--cs-spacing-scale-8);
367
+ }
368
+
369
+ .tree__expand-button {
370
+ display: inline-flex;
371
+ align-items: center;
372
+ justify-content: center;
373
+ width: var(--cs-spacing-scale-6);
374
+ height: var(--cs-spacing-scale-6);
375
+ border: none;
376
+ background: none;
377
+ cursor: pointer;
378
+ border-radius: var(--cs-border-radius-sm);
379
+ transition: var(--cs-transitions-colors);
380
+ flex-shrink: 0;
381
+ }
382
+
383
+ .tree__expand-button:hover {
384
+ background-color: var(--tree-node-hover);
385
+ }
386
+
387
+ .tree__expand-button:focus {
388
+ outline: var(--cs-border-width-thick) solid var(--cs-colors-interactive-focus);
389
+ outline-offset: 2px;
390
+ }
391
+
392
+ .tree__expand-button--disabled {
393
+ visibility: hidden;
394
+ }
395
+
396
+ .tree__expand-icon {
397
+ width: var(--cs-spacing-scale-4);
398
+ height: var(--cs-spacing-scale-4);
399
+ color: var(--cs-colors-text-secondary);
400
+ transition: var(--cs-transitions-transform);
401
+ }
402
+
403
+ .tree__expand-icon--expanded {
404
+ transform: rotate(90deg);
405
+ }
406
+
407
+ .tree__icon {
408
+ width: var(--cs-spacing-scale-4);
409
+ height: var(--cs-spacing-scale-4);
410
+ flex-shrink: 0;
411
+ }
412
+
413
+ .tree__icon--sm {
414
+ width: var(--cs-spacing-scale-3);
415
+ height: var(--cs-spacing-scale-3);
416
+ }
417
+
418
+ .tree__icon--lg {
419
+ width: var(--cs-spacing-scale-5);
420
+ height: var(--cs-spacing-scale-5);
421
+ }
422
+
423
+ /* Size variants for expand button */
424
+ .tree__container--sm .tree__expand-button {
425
+ width: var(--cs-spacing-scale-5);
426
+ height: var(--cs-spacing-scale-5);
427
+ }
428
+
429
+ .tree__container--sm .tree__expand-icon {
430
+ width: var(--cs-spacing-scale-3);
431
+ height: var(--cs-spacing-scale-3);
432
+ }
433
+
434
+ .tree__container--lg .tree__expand-button {
435
+ width: var(--cs-spacing-scale-8);
436
+ height: var(--cs-spacing-scale-8);
437
+ }
438
+
439
+ .tree__container--lg .tree__expand-icon {
440
+ width: var(--cs-spacing-scale-5);
441
+ height: var(--cs-spacing-scale-5);
442
+ }
443
+
444
+ /* ============================================================================ */
445
+ /* TREE NODE SELECTION */
446
+ /* ============================================================================ */
447
+
448
+ .tree__checkbox {
449
+ margin-right: var(--cs-spacing-scale-2);
450
+ flex-shrink: 0;
451
+ }
452
+
453
+ .tree__checkbox--sm {
454
+ margin-right: var(--cs-spacing-scale-1);
455
+ }
456
+
457
+ .tree__checkbox--lg {
458
+ margin-right: var(--cs-spacing-scale-3);
459
+ }
460
+
461
+ .tree__checkbox-input {
462
+ width: var(--cs-spacing-scale-4);
463
+ height: var(--cs-spacing-scale-4);
464
+ border: var(--cs-border-width-thick) solid var(--cs-colors-surface-border);
465
+ border-radius: var(--cs-border-radius-sm);
466
+ background-color: transparent;
467
+ cursor: pointer;
468
+ display: flex;
469
+ align-items: center;
470
+ justify-content: center;
471
+ transition: var(--cs-transitions-colors);
472
+ }
473
+
474
+ .tree__checkbox-input--checked {
475
+ border-color: var(--cs-colors-primary-500);
476
+ background-color: var(--cs-colors-primary-500);
477
+ }
478
+
479
+ .tree__checkbox-input--indeterminate {
480
+ border-color: var(--cs-colors-primary-500);
481
+ background-color: var(--cs-colors-primary-500);
482
+ }
483
+
484
+ .tree__checkbox-icon {
485
+ width: var(--cs-spacing-scale-3);
486
+ height: var(--cs-spacing-scale-3);
487
+ color: white;
488
+ }
489
+
490
+ /* ============================================================================ */
491
+ /* TREE NODE ICON */
492
+ /* ============================================================================ */
493
+
494
+ .tree__node-icon {
495
+ width: var(--cs-spacing-scale-5);
496
+ height: var(--cs-spacing-scale-5);
497
+ margin-right: var(--cs-spacing-scale-2);
498
+ color: var(--cs-colors-text-secondary);
499
+ flex-shrink: 0;
500
+ }
501
+
502
+ .tree__node-icon--folder {
503
+ color: var(--cs-colors-semantic-warning);
504
+ }
505
+
506
+ .tree__node-icon--file {
507
+ color: var(--cs-colors-text-muted);
508
+ }
509
+
510
+ /* Size variants for node icon */
511
+ .tree__container--sm .tree__node-icon {
512
+ width: var(--cs-spacing-scale-4);
513
+ height: var(--cs-spacing-scale-4);
514
+ }
515
+
516
+ .tree__container--lg .tree__node-icon {
517
+ width: var(--cs-spacing-scale-6);
518
+ height: var(--cs-spacing-scale-6);
519
+ }
520
+
521
+ /* ============================================================================ */
522
+ /* TREE NODE CONTENT */
523
+ /* ============================================================================ */
524
+
525
+ .tree__node-content {
526
+ flex: 1;
527
+ min-width: 0;
528
+ }
529
+
530
+ .tree__node-content--sm {
531
+ font-size: var(--cs-fonts-primary-sizes-sm);
532
+ }
533
+
534
+ .tree__node-content--md {
535
+ font-size: var(--cs-fonts-primary-sizes-base);
536
+ }
537
+
538
+ .tree__node-content--lg {
539
+ font-size: var(--cs-fonts-primary-sizes-lg);
540
+ }
541
+
542
+ .tree__node-main {
543
+ display: flex;
544
+ align-items: center;
545
+ justify-content: space-between;
546
+ }
547
+
548
+ .tree__node-text {
549
+ min-width: 0;
550
+ flex: 1;
551
+ }
552
+
553
+ .tree__node-label {
554
+ font-weight: var(--cs-fonts-primary-weights-medium);
555
+ color: var(--cs-colors-text-primary);
556
+ overflow: hidden;
557
+ text-overflow: ellipsis;
558
+ white-space: nowrap;
559
+ }
560
+
561
+ .tree__node-label--selected {
562
+ color: var(--cs-colors-primary-500);
563
+ }
564
+
565
+ .tree__node-description {
566
+ font-size: var(--cs-fonts-primary-sizes-xs);
567
+ color: var(--cs-colors-text-muted);
568
+ margin-top: var(--cs-spacing-scale-1);
569
+ overflow: hidden;
570
+ text-overflow: ellipsis;
571
+ white-space: nowrap;
572
+ }
573
+
574
+ /* ============================================================================ */
575
+ /* TREE NODE METADATA */
576
+ /* ============================================================================ */
577
+
578
+ .tree__node-metadata {
579
+ display: flex;
580
+ align-items: center;
581
+ gap: var(--cs-spacing-scale-2);
582
+ margin-left: var(--cs-spacing-scale-2);
583
+ flex-shrink: 0;
584
+ }
585
+
586
+ .tree__node-badge {
587
+ display: inline-flex;
588
+ align-items: center;
589
+ padding: var(--cs-spacing-scale-1) var(--cs-spacing-scale-2);
590
+ border-radius: var(--cs-border-radius-full);
591
+ font-size: var(--cs-fonts-primary-sizes-xs);
592
+ font-weight: var(--cs-fonts-primary-weights-medium);
593
+ }
594
+
595
+ .tree__node-badge--count {
596
+ background-color: var(--cs-colors-surface-surface);
597
+ color: var(--cs-colors-text-secondary);
598
+ }
599
+
600
+ .tree__node-badge--status {
601
+ text-transform: uppercase;
602
+ letter-spacing: 0.025em;
603
+ }
604
+
605
+ .tree__node-badge--active {
606
+ background-color: var(--cs-colors-semantic-success-100);
607
+ color: var(--cs-colors-semantic-success-800);
608
+ }
609
+
610
+ .tree__node-badge--warning {
611
+ background-color: var(--cs-colors-semantic-warning-100);
612
+ color: var(--cs-colors-semantic-warning-800);
613
+ }
614
+
615
+ .tree__node-badge--error {
616
+ background-color: var(--cs-colors-semantic-error-100);
617
+ color: var(--cs-colors-semantic-error-800);
618
+ }
619
+
620
+ .tree__node-badge--inactive {
621
+ background-color: var(--cs-colors-gray-100);
622
+ color: var(--cs-colors-gray-800);
623
+ }
624
+
625
+ .tree__node-count {
626
+ display: inline-flex;
627
+ align-items: center;
628
+ justify-content: center;
629
+ min-width: var(--cs-spacing-scale-5);
630
+ height: var(--cs-spacing-scale-5);
631
+ padding: 0 var(--cs-spacing-scale-1);
632
+ background-color: var(--cs-colors-gray-200);
633
+ color: var(--cs-colors-gray-700);
634
+ border-radius: var(--cs-border-radius-full);
635
+ font-size: var(--cs-fonts-primary-sizes-xs);
636
+ font-weight: var(--cs-fonts-primary-weights-medium);
637
+ }
638
+
639
+ .tree__node-status {
640
+ display: inline-flex;
641
+ align-items: center;
642
+ padding: var(--cs-spacing-scale-1) var(--cs-spacing-scale-2);
643
+ border-radius: var(--cs-border-radius-full);
644
+ font-size: var(--cs-fonts-primary-sizes-xs);
645
+ font-weight: var(--cs-fonts-primary-weights-medium);
646
+ text-transform: uppercase;
647
+ letter-spacing: 0.025em;
648
+ }
649
+
650
+ .tree__node-status--active {
651
+ background-color: var(--cs-colors-semantic-success-100);
652
+ color: var(--cs-colors-semantic-success-800);
653
+ }
654
+
655
+ .tree__node-status--inactive {
656
+ background-color: var(--cs-colors-gray-100);
657
+ color: var(--cs-colors-gray-800);
658
+ }
659
+
660
+ .tree__node-status--warning {
661
+ background-color: var(--cs-colors-semantic-warning-100);
662
+ color: var(--cs-colors-semantic-warning-800);
663
+ }
664
+
665
+ .tree__node-status--error {
666
+ background-color: var(--cs-colors-semantic-error-100);
667
+ color: var(--cs-colors-semantic-error-800);
668
+ }
669
+
670
+ /* ============================================================================ */
671
+ /* TREE NODE CHILDREN */
672
+ /* ============================================================================ */
673
+
674
+ .tree__children {
675
+ list-style: none;
676
+ margin: 0;
677
+ padding: 0;
678
+ overflow: hidden;
679
+ transition: var(--cs-transitions-all);
680
+ }
681
+
682
+ .tree__children--collapsed {
683
+ max-height: 0;
684
+ opacity: 0;
685
+ }
686
+
687
+ .tree__children--expanded {
688
+ max-height: none;
689
+ opacity: 1;
690
+ }
691
+
692
+ /* ============================================================================ */
693
+ /* TREE STATES */
694
+ /* ============================================================================ */
695
+
696
+ .tree__loading {
697
+ display: flex;
698
+ align-items: center;
699
+ justify-content: center;
700
+ padding: var(--cs-spacing-scale-16) var(--tree-spacing);
701
+ color: var(--cs-colors-text-secondary);
702
+ }
703
+
704
+ .tree__loading-spinner {
705
+ width: var(--cs-spacing-scale-8);
706
+ height: var(--cs-spacing-scale-8);
707
+ border: var(--cs-border-width-thick) solid var(--cs-colors-surface-divider);
708
+ border-top: var(--cs-border-width-thick) solid var(--cs-colors-primary-500);
709
+ border-radius: var(--cs-border-radius-full);
710
+ animation: tree-loading-spin 1s linear infinite;
711
+ margin-right: var(--cs-spacing-scale-3);
712
+ }
713
+
714
+ @keyframes tree-loading-spin {
715
+ 0% { transform: rotate(0deg); }
716
+ 100% { transform: rotate(360deg); }
717
+ }
718
+
719
+ .tree__error {
720
+ display: flex;
721
+ align-items: center;
722
+ justify-content: center;
723
+ padding: var(--cs-spacing-scale-16) var(--tree-spacing);
724
+ color: var(--cs-colors-semantic-error);
725
+ text-align: center;
726
+ }
727
+
728
+ .tree__empty {
729
+ display: flex;
730
+ flex-direction: column;
731
+ align-items: center;
732
+ justify-content: center;
733
+ padding: var(--cs-spacing-scale-16) var(--tree-spacing);
734
+ color: var(--cs-colors-text-muted);
735
+ text-align: center;
736
+ }
737
+
738
+ .tree__empty-icon {
739
+ width: var(--cs-spacing-scale-16);
740
+ height: var(--cs-spacing-scale-16);
741
+ margin-bottom: var(--cs-spacing-scale-4);
742
+ opacity: 0.5;
743
+ }
744
+
745
+ /* ============================================================================ */
746
+ /* RESPONSIVE DESIGN */
747
+ /* ============================================================================ */
748
+
749
+ @media (max-width: 768px) {
750
+ .tree__header {
751
+ flex-direction: column;
752
+ align-items: stretch;
753
+ gap: var(--cs-spacing-scale-3);
754
+ }
755
+
756
+ .tree__search {
757
+ max-width: none;
758
+ }
759
+
760
+ .tree__container--sm,
761
+ .tree__container--md,
762
+ .tree__container--lg {
763
+ --tree-indent: var(--cs-spacing-scale-4);
764
+ }
765
+
766
+ .tree__node-metadata {
767
+ flex-direction: column;
768
+ align-items: flex-start;
769
+ gap: var(--cs-spacing-scale-1);
770
+ }
771
+ }
772
+
773
+ @media (max-width: 640px) {
774
+ .tree__node-content {
775
+ padding: var(--cs-spacing-scale-2);
776
+ }
777
+
778
+ .tree__node-description {
779
+ display: none;
780
+ }
781
+
782
+ .tree__node-count {
783
+ min-width: var(--cs-spacing-scale-4);
784
+ height: var(--cs-spacing-scale-4);
785
+ }
786
+ }
787
+
788
+ /* ============================================================================ */
789
+ /* ACCESSIBILITY */
790
+ /* ============================================================================ */
791
+
792
+ .tree__container:focus-within {
793
+ outline: var(--cs-border-width-thick) solid var(--cs-colors-interactive-focus);
794
+ outline-offset: 2px;
795
+ }
796
+
797
+ .tree__node-content:focus {
798
+ outline: var(--cs-border-width-thick) solid var(--cs-colors-interactive-focus);
799
+ outline-offset: -2px;
800
+ }
801
+
802
+ /* High contrast mode support */
803
+ @media (prefers-contrast: high) {
804
+ .tree__container {
805
+ border-width: var(--cs-border-width-thick);
806
+ }
807
+
808
+ .tree__node-content {
809
+ border: var(--cs-border-width-normal) solid transparent;
810
+ }
811
+
812
+ .tree__node-content--selected {
813
+ border-color: currentColor;
814
+ }
815
+ }
816
+
817
+ /* Reduced motion support */
818
+ @media (prefers-reduced-motion: reduce) {
819
+ .tree__node-content,
820
+ .tree__expand-button,
821
+ .tree__expand-icon,
822
+ .tree__children {
823
+ transition: none;
824
+ }
825
+
826
+ .tree__loading-spinner {
827
+ animation: none;
828
+ }
829
+ }
830
+
831
+ /* ============================================================================ */
832
+ /* DRAG AND DROP */
833
+ /* ============================================================================ */
834
+
835
+ .tree__drop-indicator {
836
+ position: absolute;
837
+ left: 0;
838
+ right: 0;
839
+ height: var(--cs-border-width-thick);
840
+ background-color: var(--cs-colors-primary-500);
841
+ border-radius: var(--cs-border-radius-full);
842
+ z-index: 100;
843
+ }
844
+
845
+ .tree__drop-indicator--top {
846
+ top: -1px;
847
+ }
848
+
849
+ .tree__drop-indicator--bottom {
850
+ bottom: -1px;
851
+ }
852
+
853
+ /* ============================================================================ */
854
+ /* PRINT STYLES */
855
+ /* ============================================================================ */
856
+
857
+ @media print {
858
+ .tree__container {
859
+ box-shadow: none;
860
+ border: var(--cs-border-width-normal) solid #000;
861
+ }
862
+
863
+ .tree__actions,
864
+ .tree__controls {
865
+ display: none;
866
+ }
867
+
868
+ .tree__loading,
869
+ .tree__error {
870
+ display: none;
871
+ }
872
+
873
+ .tree__node-content:hover {
874
+ background-color: transparent;
875
+ }
876
+
877
+ .tree__children--collapsed {
878
+ max-height: none;
879
+ opacity: 1;
880
+ }
881
+ }