@tcn/ui 0.14.0 → 0.16.0

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 (116) hide show
  1. package/dist/column.css +1 -1
  2. package/dist/inputs/multiselect/multiselect_inline_values.js +9 -7
  3. package/dist/inputs/multiselect/multiselect_inline_values.js.map +1 -1
  4. package/dist/inputs/multiselect/multiselect_values.js +4 -2
  5. package/dist/inputs/multiselect/multiselect_values.js.map +1 -1
  6. package/dist/layouts/containers/columns/column.d.ts +6 -0
  7. package/dist/layouts/containers/columns/column.d.ts.map +1 -0
  8. package/dist/layouts/containers/columns/column.js +20 -0
  9. package/dist/layouts/containers/columns/column.js.map +1 -0
  10. package/dist/layouts/containers/columns/columns.d.ts +6 -0
  11. package/dist/layouts/containers/columns/columns.d.ts.map +1 -0
  12. package/dist/layouts/containers/columns/columns.js +11 -0
  13. package/dist/layouts/containers/columns/columns.js.map +1 -0
  14. package/dist/layouts/index.d.ts +3 -5
  15. package/dist/layouts/index.d.ts.map +1 -1
  16. package/dist/layouts/index.js +27 -27
  17. package/dist/layouts/section/detail.d.ts +4 -0
  18. package/dist/layouts/section/detail.d.ts.map +1 -0
  19. package/dist/layouts/section/detail.js +11 -0
  20. package/dist/layouts/section/detail.js.map +1 -0
  21. package/dist/layouts/section/heading.js +1 -1
  22. package/dist/layouts/section/index.d.ts +4 -0
  23. package/dist/layouts/section/index.d.ts.map +1 -0
  24. package/dist/layouts/section/index.js +9 -0
  25. package/dist/layouts/section/index.js.map +1 -0
  26. package/dist/layouts/section/section.js +1 -1
  27. package/dist/section.css +1 -1
  28. package/dist/section.module-BXlxYmJK.js +5 -0
  29. package/dist/section.module-BXlxYmJK.js.map +1 -0
  30. package/dist/surfaces/pop_confirm/pop_confirm.js +4 -4
  31. package/dist/term.css +1 -0
  32. package/dist/themes/build_stylesheet.d.ts +2 -0
  33. package/dist/themes/build_stylesheet.d.ts.map +1 -0
  34. package/dist/themes/build_stylesheet.js +9 -0
  35. package/dist/themes/build_stylesheet.js.map +1 -0
  36. package/dist/themes/theme_variables.d.ts +7 -0
  37. package/dist/themes/theme_variables.d.ts.map +1 -1
  38. package/dist/themes/theme_variables.js +16 -9
  39. package/dist/themes/theme_variables.js.map +1 -1
  40. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  41. package/dist/themes/themes/ergo/ergo_theme.d.ts.map +1 -1
  42. package/dist/themes/themes/ergo/ergo_theme.js +281 -161
  43. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  44. package/dist/themes/themes/ergo/tokens/system_tokens.css +1 -0
  45. package/dist/themes/themes/ergo/tokens/theme_tokens.css +1 -0
  46. package/dist/tokens/index.d.ts +1 -0
  47. package/dist/tokens/index.d.ts.map +1 -1
  48. package/dist/tokens/index.js +4 -2
  49. package/dist/tokens/index.js.map +1 -1
  50. package/dist/tokens/key/key.d.ts +8 -1
  51. package/dist/tokens/key/key.d.ts.map +1 -1
  52. package/dist/tokens/key/key.js +20 -3
  53. package/dist/tokens/key/key.js.map +1 -1
  54. package/dist/tokens/term/term.d.ts +4 -0
  55. package/dist/tokens/term/term.d.ts.map +1 -0
  56. package/dist/tokens/term/term.js +20 -0
  57. package/dist/tokens/term/term.js.map +1 -0
  58. package/dist/tokens/value/value.d.ts +8 -1
  59. package/dist/tokens/value/value.d.ts.map +1 -1
  60. package/dist/tokens/value/value.js +23 -5
  61. package/dist/tokens/value/value.js.map +1 -1
  62. package/dist/utils/types/variations.d.ts +1 -0
  63. package/dist/utils/types/variations.d.ts.map +1 -1
  64. package/dist/value.css +1 -0
  65. package/dist/value.module-DFaCouFD.js +5 -0
  66. package/dist/value.module-DFaCouFD.js.map +1 -0
  67. package/package.json +1 -1
  68. package/src/layouts/__stories__/columns.stories.tsx +46 -0
  69. package/src/layouts/__stories__/rail.stories.tsx +4 -4
  70. package/src/layouts/__stories__/utils.tsx +4 -4
  71. package/src/layouts/containers/columns/column.module.css +14 -0
  72. package/src/layouts/containers/columns/column.tsx +22 -0
  73. package/src/layouts/containers/columns/columns.tsx +16 -0
  74. package/src/layouts/index.ts +3 -5
  75. package/src/layouts/section/__stories__/section.stories.tsx +79 -50
  76. package/src/layouts/section/detail.tsx +14 -0
  77. package/src/layouts/section/index.ts +3 -0
  78. package/src/layouts/section/section.module.css +0 -36
  79. package/src/surfaces/page/page.stories.tsx +32 -28
  80. package/src/surfaces/panel/__stories__/panel.stories.tsx +147 -40
  81. package/src/themes/build_stylesheet.ts +5 -0
  82. package/src/themes/theme_variables.ts +9 -0
  83. package/src/themes/themes/ergo/ergo_theme.css +175 -222
  84. package/src/themes/themes/ergo/ergo_theme.ts +4 -2
  85. package/src/themes/themes/ergo/tokens/system_tokens.css +68 -0
  86. package/src/themes/themes/ergo/tokens/theme_tokens.css +99 -0
  87. package/src/tokens/index.ts +1 -0
  88. package/src/tokens/key/key.tsx +23 -2
  89. package/src/tokens/term/term.module.css +14 -0
  90. package/src/tokens/term/term.stories.tsx +84 -0
  91. package/src/tokens/term/term.tsx +20 -0
  92. package/src/tokens/value/value.module.css +5 -0
  93. package/src/tokens/value/value.tsx +24 -2
  94. package/src/utils/types/variations.ts +1 -0
  95. package/dist/layouts/column/column.d.ts +0 -10
  96. package/dist/layouts/column/column.d.ts.map +0 -1
  97. package/dist/layouts/column/column.js +0 -52
  98. package/dist/layouts/column/column.js.map +0 -1
  99. package/dist/layouts/containers/side/side.d.ts +0 -6
  100. package/dist/layouts/containers/side/side.d.ts.map +0 -1
  101. package/dist/layouts/containers/side/side.js +0 -22
  102. package/dist/layouts/containers/side/side.js.map +0 -1
  103. package/dist/layouts/row/row.d.ts +0 -4
  104. package/dist/layouts/row/row.d.ts.map +0 -1
  105. package/dist/layouts/row/row.js +0 -11
  106. package/dist/layouts/row/row.js.map +0 -1
  107. package/dist/row.css +0 -1
  108. package/dist/section.module-0wyGkhDg.js +0 -5
  109. package/dist/section.module-0wyGkhDg.js.map +0 -1
  110. package/dist/side.css +0 -1
  111. package/src/layouts/column/column.module.css +0 -35
  112. package/src/layouts/column/column.tsx +0 -57
  113. package/src/layouts/containers/side/side.module.css +0 -7
  114. package/src/layouts/containers/side/side.tsx +0 -25
  115. package/src/layouts/row/row.module.css +0 -5
  116. package/src/layouts/row/row.tsx +0 -15
@@ -1,143 +1,10 @@
1
1
  @layer tcn-theme {
2
2
  /* ===== CSS VARIABLES ===== */
3
- :root {
4
- /* ========== Ergo Brand Palette ========== */
5
- --ergo-primary: #ce6b2b;
6
- --ergo-secondary: #669eb4;
7
- --ergo-secondary-light: #ecf4fb;
8
- --ergo-secondary-dark: #497485;
9
- --ergo-tertiary: #dfd7cd;
10
- --ergo-tertiary-light: #f9f4ed;
11
- --ergo-tertiary-dark: #7e6c5d;
12
- --ergo-white: #ffffff;
13
-
14
- --ergo-accent-blue: #395578;
15
- --ergo-accent-blue-light: #f3f4f6;
16
- --ergo-accent-green: #97bba3;
17
- --ergo-accent-green-light: #eef8ef;
18
- --ergo-accent-green-dark: #4f785c;
19
- --ergo-accent-yellow: #dbc97e;
20
- --ergo-accent-yellow-light: #fef9e7;
21
-
22
- --ergo-grey: #aaaaaa;
23
- --ergo-grey-light: #d3d3d3;
24
- --ergo-grey-dark: #808080;
25
-
26
- --ergo-status-red: #ff6565;
27
- --ergo-status-red-dark: #c24848;
28
-
29
- --ergo-status-yellow: #ffd439;
30
- --ergo-status-yellow-dark: #dbb735;
31
-
32
- --ergo-status-blue: var(--ergo-secondary);
33
- --ergo-status-blue-dark: var(--ergo-secondary-dark);
34
-
35
- --ergo-status-green: #3fbc6a;
36
- --ergo-status-green-dark: #2d904f;
37
-
38
- /* ========== Ergo Component Tokens ========== */
39
- --font-size-input: 12px;
40
-
41
- --ergo-ink-primary: var(--ergo-accent-blue);
42
- --ergo-ink-inverse: var(--ergo-white);
43
-
44
- /* ========== Blackcat System Tokens ========== */
45
- --scalar: 1;
46
- --accent-color: var(--ergo-primary);
47
-
48
- /* Typography */
49
- --font-color: var(--ergo-ink-primary);
50
- --font-family: "Lato", sans-serif;
51
- --font-size: 12px;
52
-
53
- /* Spacing */
54
- --gap-xs: 2px;
55
- --gap-small: 4px;
56
- --gap-medium: 8px;
57
- --gap-large: 16px;
58
-
59
- --padding-small: 4px;
60
- --padding-medium: 8px;
61
- --padding-large: 16px;
62
-
63
- /* Sizing */
64
- --bar-xs: 16px;
65
- --bar-sm: 24px;
66
- --bar-md: 32px;
67
- --bar-lg: 40px;
68
- --bar-xl: 48px;
69
-
70
- --action-sm: 20px;
71
- --action-md: 24px;
72
- --action-lg: 32px;
73
-
74
- /* Status Colors */
75
- --status-color-disabled: var(--ergo-grey-light);
76
- --status-color-info: var(--ergo-status-blue);
77
- --status-color-warning: var(--ergo-status-yellow);
78
- --status-color-positive: var(--ergo-status-green);
79
- --status-color-error: var(--ergo-status-red);
80
-
81
- --async-color-initial: var(--ergo-grey);
82
- --async-color-pending: var(--ergo-status-blue);
83
- --async-color-success: var(--ergo-status-green);
84
- --async-color-failed: var(--ergo-status-red);
85
-
86
- --action-severity-dangerous: var(--ergo-status-red);
87
- --action-severity-cautious: var(--ergo-status-yellow);
88
- --action-severity-neutral: var(--ergo-primary);
89
- --action-severity-suggested: var(--ergo-status-blue);
90
- --action-severity-encouraged: var(--ergo-status-green);
91
-
92
- /* Shape */
93
- --shape-radius-small: 2px;
94
- --shape-radius-medium: 4px;
95
- --shape-radius-large: 8px;
96
- --shape-triangle-medium: 12px;
97
-
98
- /* Palette */
99
- --primary-color-faint: #c0c0c0;
100
- --primary-color: #008cff;
101
- --primary-color-strong: #008cff;
102
-
103
- --secondary-color-faint: #c0c0c0;
104
- --secondary-color: #008cff;
105
- --secondary-color-strong: #008cff;
106
-
107
- --tertiary-color-faint: #c0c0c0;
108
- --tertiary-color: #008cff;
109
- --tertiary-color-strong: #008cff;
110
-
111
- --quaternary-color-faint: #c0c0c0;
112
- --quaternary-color: #008cff;
113
- --quaternary-color-strong: #008cff;
114
-
115
- --background-color-primary: #ffffff;
116
- --background-color-secondary: #fafafa;
117
- --background-color-tertiary: #f1f1f1;
118
- --background-color-quaternary: #ffffff;
119
-
120
- --foreground-color-primary: #aaa;
121
- --foreground-color-secondary: #222222;
122
- --foreground-color-tertiary: #222222;
123
- --foreground-color-quaternary: #222222;
124
-
125
- --material-disabled: var(--ergo-grey-light);
126
- --on-material-disabled: var(--ergo-ink-inverse);
127
- --ink-disabled: var(--ergo-grey-light);
128
-
129
- --material-line: var(--ergo-grey);
130
-
131
- /* Default Material */
132
- --action: var(--ergo-primary);
133
- --on-action: var(--ergo-white);
134
- --material: var(--ergo-white);
135
- --on-material: var(--ergo-accent-blue);
136
- }
137
3
 
138
4
  .tcn-theme-root {
139
5
  font-family: var(--font-family);
140
6
  color: var(--font-color);
7
+ /* TODO: move to system */
141
8
  --action: var(--ergo-primary);
142
9
  --on-action: var(--ergo-white);
143
10
  --material: var(--ergo-white);
@@ -208,7 +75,7 @@
208
75
  --btn-pad: calc(var(--btn-pad-base) + var(--btn-pad-delta) * var(--btn-step));
209
76
  --btn-size: calc(var(--btn-size-base) + var(--btn-size-delta) * var(--btn-step));
210
77
 
211
- border-radius: var(--shape-radius-medium);
78
+ border-radius: var(--ergo-shape-radius-medium);
212
79
  min-height: var(--btn-size);
213
80
  padding: var(--padding-small) var(--btn-pad);
214
81
 
@@ -444,12 +311,12 @@
444
311
  border-radius: 0;
445
312
  }
446
313
  .tcn-button-group-button:first-child {
447
- border-start-start-radius: var(--shape-radius-medium);
448
- border-end-start-radius: var(--shape-radius-medium);
314
+ border-start-start-radius: var(--ergo-shape-radius-medium);
315
+ border-end-start-radius: var(--ergo-shape-radius-medium);
449
316
  }
450
317
  .tcn-button-group-button:last-child {
451
- border-start-end-radius: var(--shape-radius-medium);
452
- border-end-end-radius: var(--shape-radius-medium);
318
+ border-start-end-radius: var(--ergo-shape-radius-medium);
319
+ border-end-end-radius: var(--ergo-shape-radius-medium);
453
320
  }
454
321
  .tcn-button-group-button[data-hierarchy="tertiary"] {
455
322
  border: 0;
@@ -489,26 +356,26 @@
489
356
  }
490
357
 
491
358
  .tcn-select-group-option[data-hierarchy="secondary"][data-is-disabled="true"] {
492
- color: var(--material-disabled);
493
- border: 1px solid var(--material-disabled);
359
+ color: var(--ergo-material-disabled-outline);
360
+ border: 1px solid var(--ergo-material-disabled-outline);
494
361
  }
495
362
 
496
363
  .tcn-select-group-option[data-hierarchy="primary"][data-is-disabled="true"] {
497
- background: var(--material-disabled);
364
+ background: var(--ergo-material-disabled-outline);
498
365
  color: white;
499
- border: 1px solid var(--material-disabled);
366
+ border: 1px solid var(--ergo-material-disabled-outline);
500
367
  }
501
368
 
502
369
  .tcn-select-group-option {
503
370
  border-radius: 0;
504
371
  }
505
372
  .tcn-select-group-option:first-child {
506
- border-top-left-radius: var(--shape-radius-medium);
507
- border-bottom-left-radius: var(--shape-radius-medium);
373
+ border-top-left-radius: var(--ergo-shape-radius-medium);
374
+ border-bottom-left-radius: var(--ergo-shape-radius-medium);
508
375
  }
509
376
  .tcn-select-group-option:last-child {
510
- border-top-right-radius: var(--shape-radius-medium);
511
- border-bottom-right-radius: var(--shape-radius-medium);
377
+ border-top-right-radius: var(--ergo-shape-radius-medium);
378
+ border-bottom-right-radius: var(--ergo-shape-radius-medium);
512
379
  }
513
380
  }
514
381
 
@@ -589,7 +456,7 @@
589
456
  left: 0;
590
457
  width: 100%;
591
458
  height: 1px;
592
- background: var(--material-line);
459
+ background: var(--ergo-material-divider);
593
460
  pointer-events: none;
594
461
  z-index: 1;
595
462
  }
@@ -601,16 +468,15 @@
601
468
  min-width: min-content;
602
469
  width: auto;
603
470
  flex-grow: 0;
604
- border-radius: var(--shape-radius-medium);
471
+ border-radius: 6px;
605
472
  border: 1px solid var(--on-material);
606
- padding-block: 1px;
607
- padding-inline: 2px;
473
+ padding: 2px;
608
474
 
609
475
  .tcn-tabs-list {
610
476
  height: 20px;
611
- gap: var(--gap-xs);
477
+ gap: var(--ergo-spacing-xs);
612
478
  .tcn-tab-item {
613
- border-radius: var(--shape-radius-medium);
479
+ border-radius: var(--ergo-shape-radius-medium);
614
480
  min-height: 20px;
615
481
  }
616
482
  }
@@ -698,19 +564,19 @@
698
564
  }
699
565
 
700
566
  &[data-anchor-direction="bottom"] {
701
- padding-bottom: var(--shape-triangle-medium);
567
+ padding-bottom: var(--ergo-shape-triangle-medium);
702
568
  }
703
569
 
704
570
  &[data-anchor-direction="top"] {
705
- padding-top: var(--shape-triangle-medium);
571
+ padding-top: var(--ergo-shape-triangle-medium);
706
572
  }
707
573
 
708
574
  &[data-anchor-direction="start"] {
709
- padding-left: var(--shape-triangle-medium);
575
+ padding-left: var(--ergo-shape-triangle-medium);
710
576
  }
711
577
 
712
578
  &[data-anchor-direction="end"] {
713
- padding-right: var(--shape-triangle-medium);
579
+ padding-right: var(--ergo-shape-triangle-medium);
714
580
  }
715
581
  }
716
582
 
@@ -725,7 +591,7 @@
725
591
  box-shadow: 0px 4px 7px 0px rgba(65, 65, 65, 0.66);
726
592
  color: var(--on-material);
727
593
  background: var(--material);
728
- border-radius: var(--shape-radius-medium);
594
+ border-radius: var(--ergo-shape-radius-medium);
729
595
  padding: var(--padding-medium);
730
596
  }
731
597
  }
@@ -735,16 +601,15 @@
735
601
  .tcn-item {
736
602
  height: 24px;
737
603
  padding: 0px var(--padding-medium);
738
- border-radius: var(--shape-radius-medium);
604
+ border-radius: var(--ergo-shape-radius-medium);
739
605
  }
740
606
  }
741
607
  /* Rail: */
742
608
  .tcn-utility-strip {
743
- min-width: var(--bar-md);
609
+ min-width: var(--ergo-sizing-bar-md);
744
610
  }
745
611
 
746
- .tcn-utility-strip,
747
- .tcn-side {
612
+ .tcn-utility-strip {
748
613
  padding-block: var(--padding-medium);
749
614
  gap: var(--gap-medium);
750
615
  }
@@ -758,12 +623,12 @@
758
623
  }
759
624
 
760
625
  .tcn-utility-bar {
761
- min-height: var(--bar-md);
626
+ min-height: var(--ergo-sizing-bar-md);
762
627
  }
763
628
 
764
629
  .tcn-footer,
765
630
  .tcn-header {
766
- min-height: var(--bar-lg);
631
+ min-height: var(--ergo-sizing-bar-lg);
767
632
  }
768
633
 
769
634
  .tcn-scaffold {
@@ -777,14 +642,14 @@
777
642
  :where(.tcn-utility-bar) + :where(.tcn-scaffold),
778
643
  :where(.tcn-utility-bar) + :where(.tcn-rail) {
779
644
  border-top: calc(var(--scaffold-divide-header) * 1px) solid
780
- var(--foreground-color-primary);
645
+ var(--ergo-material-border);
781
646
  }
782
647
 
783
648
  /* Border appears on footer when it follows scaffold/rail */
784
649
  :where(.tcn-scaffold) + :where(.tcn-footer),
785
650
  :where(.tcn-rail) + :where(.tcn-footer) {
786
651
  border-top: calc(var(--scaffold-divide-footer) * 1px) solid
787
- var(--foreground-color-primary);
652
+ var(--ergo-material-border);
788
653
  }
789
654
  }
790
655
 
@@ -798,26 +663,19 @@
798
663
  --divide-footer: 0;
799
664
  --material: var(--background-color-tertiary);
800
665
  background-color: var(--material);
801
- padding: var(--padding-medium);
802
- }
803
-
804
- /* TODO: remove - shim to replicate Column at Page level */
805
- .tcn-page > .tcn-scaffold-stack > .tcn-scaffold > .tcn-scaffold-stack,
806
- .tcn-page > .tcn-scaffold-stack > .tcn-rail > .tcn-rail-stack {
807
- gap: var(--gap-medium);
808
666
  }
809
667
 
810
668
  /* MODAL: */
811
669
  .tcn-modal {
812
670
  --divide-header: 0;
813
671
  box-shadow: 0px 4px 34px 0px #00000096;
814
- border-radius: var(--shape-radius-medium);
672
+ border-radius: var(--ergo-shape-radius-medium);
815
673
  background-color: var(--background-color-primary);
816
674
  overflow: hidden;
817
- border: 1px solid var(--foreground-color-primary);
675
+ border: 1px solid var(--ergo-material-border);
818
676
 
819
677
  :where(.tcn-header) {
820
- --material: var(--ergo-secondary-dark);
678
+ --material: var(--ergo-material-overlay);
821
679
  --on-material: var(--ergo-white);
822
680
  --action: var(--ergo-tertiary);
823
681
  --on-action: var(--ergo-secondary-dark);
@@ -838,7 +696,7 @@
838
696
  overflow: hidden;
839
697
 
840
698
  :where(.tcn-header) {
841
- --material: var(--ergo-secondary-dark);
699
+ --material: var(--ergo-material-overlay);
842
700
  --on-material: var(--ergo-white);
843
701
  --action: var(--ergo-tertiary);
844
702
  --on-action: var(--ergo-secondary-dark);
@@ -855,13 +713,13 @@
855
713
  .tcn-window {
856
714
  box-shadow: 0px 4px 34px 0px #00000096;
857
715
  --divide-header: 0;
858
- border-radius: var(--shape-radius-medium);
716
+ border-radius: var(--ergo-shape-radius-medium);
859
717
  background-color: var(--background-color-primary);
860
718
  overflow: hidden;
861
719
  border: 2px solid white;
862
720
 
863
721
  :where(.tcn-header) {
864
- --material: var(--ergo-secondary-dark);
722
+ --material: var(--ergo-material-overlay);
865
723
  --on-material: var(--ergo-white);
866
724
  --action: var(--ergo-tertiary);
867
725
  --on-action: var(--ergo-secondary-dark);
@@ -880,7 +738,7 @@
880
738
  --pad-inline: var(--padding-medium);
881
739
 
882
740
  .tcn-pop-confirm-scaffold > .tcn-scaffold-stack {
883
- border-radius: var(--shape-radius-medium);
741
+ border-radius: var(--ergo-shape-radius-medium);
884
742
  box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.4);
885
743
  background-color: var(--background-color-primary);
886
744
  }
@@ -892,14 +750,14 @@
892
750
  /* Set the indicator to match the header color */
893
751
  &[data-v-origin="top"] {
894
752
  :where(.tcn-tethered-origin-indicator) {
895
- --material: var(--ergo-secondary-dark);
753
+ --material: var(--ergo-material-overlay);
896
754
  }
897
755
  }
898
756
 
899
757
  :where(.tcn-header) {
900
- min-height: var(--bar-md);
758
+ min-height: var(--ergo-sizing-bar-md);
901
759
 
902
- --material: var(--ergo-secondary-dark);
760
+ --material: var(--ergo-material-overlay);
903
761
  --on-material: var(--ergo-white);
904
762
  --action: var(--ergo-tertiary);
905
763
  --on-action: var(--ergo-secondary-dark);
@@ -927,7 +785,7 @@
927
785
  min-width: 2px;
928
786
  height: 18px;
929
787
  background: var(--ergo-grey);
930
- border-radius: var(--shape-radius-small);
788
+ border-radius: var(--ergo-shape-radius-small);
931
789
  align-self: center;
932
790
  }
933
791
  }
@@ -938,7 +796,7 @@
938
796
  --divide-footer: 1;
939
797
  --material: var(--background-color-primary);
940
798
  background-color: var(--material);
941
- border-radius: var(--shape-radius-medium);
799
+ border-radius: var(--ergo-shape-radius-medium);
942
800
  overflow: hidden;
943
801
 
944
802
  :where(.tcn-title) {
@@ -956,11 +814,11 @@
956
814
  overflow: hidden;
957
815
 
958
816
  :where(.tcn-header) {
959
- min-height: var(--bar-md);
817
+ min-height: var(--ergo-sizing-bar-md);
960
818
  }
961
819
 
962
820
  :where(.tcn-footer) {
963
- min-height: var(--bar-md);
821
+ min-height: var(--ergo-sizing-bar-md);
964
822
  }
965
823
 
966
824
  :where(.tcn-title) {
@@ -975,12 +833,12 @@
975
833
  --pad-inline: var(--padding-medium);
976
834
 
977
835
  background-color: var(--background-color-primary);
978
- border-radius: var(--shape-radius-medium);
979
- border: 1px solid var(--foreground-color-primary);
836
+ border-radius: var(--ergo-shape-radius-medium);
837
+ border: 1px solid var(--ergo-material-border);
980
838
  overflow: hidden;
981
839
 
982
840
  :where(.tcn-header) {
983
- min-height: var(--bar-md);
841
+ min-height: var(--ergo-sizing-bar-md);
984
842
 
985
843
  --material: var(--ergo-secondary-light);
986
844
  --on-material: var(--ergo-accent-blue);
@@ -995,7 +853,7 @@
995
853
  }
996
854
 
997
855
  :where(.tcn-utility-bar) {
998
- min-height: var(--bar-sm);
856
+ min-height: var(--ergo-sizing-bar-sm);
999
857
  }
1000
858
 
1001
859
  :where(.tcn-scaffold-stack) > :where(.tcn-scaffold) > :where(.tcn-scaffold-stack),
@@ -1006,6 +864,32 @@
1006
864
  }
1007
865
  }
1008
866
 
867
+ /* Columns: */
868
+ .tcn-panel {
869
+ :where(.tcn-columns) {
870
+ padding: var(--padding-large);
871
+
872
+ :where(.tcn-column) {
873
+ border-right: 1px solid var(--ergo-material-border);
874
+ padding-inline-end: var(--padding-medium);
875
+ }
876
+
877
+ :where(.tcn-column):not(:first-child) {
878
+ padding-inline-start: var(--padding-medium);
879
+ }
880
+ }
881
+ }
882
+
883
+ .tcn-page {
884
+ :where(.tcn-columns) {
885
+ padding: var(--padding-medium);
886
+
887
+ :where(.tcn-column):not(:last-child) {
888
+ padding-inline-end: var(--padding-medium);
889
+ }
890
+ }
891
+ }
892
+
1009
893
  /* SECTION */
1010
894
  .tcn-section {
1011
895
  --max-section-depth: 4;
@@ -1016,19 +900,24 @@
1016
900
  var(--section-tab-start) +
1017
901
  (var(--section-tab-width) * var(--section-tab-depth))
1018
902
  );
903
+ --section-heading-height: var(--ergo-sizing-bar-md);
1019
904
  --section-action: var(--ergo-secondary);
1020
905
  --section-mat: var(--ergo-secondary-light);
1021
- --section-on-mat: var(--ergo-ink-primary);
906
+ --section-on-mat: var(--ergo-text-color-primary);
1022
907
  }
1023
908
 
1024
909
  .tcn-heading {
1025
- background-color: #f1f1f1;
910
+ position: sticky;
911
+ background-color: var(--material);
1026
912
  padding-inline-start: var(--pad-inline, var(--padding-medium));
1027
- height: 30px;
913
+ padding-inline-end: var(--pad-inline, var(--padding-medium));
914
+ height: var(--section-heading-height);
1028
915
  z-index: 5;
916
+ user-select: none;
1029
917
  }
1030
918
 
1031
919
  .tcn-section > .tcn-heading {
920
+ top: calc(var(--section-heading-height) * var(--section-tab-depth));
1032
921
  z-index: calc(var(--max-section-depth) - var(--section-tab-depth));
1033
922
  padding-inline-start: var(--section-tab);
1034
923
  --material: var(--section-mat);
@@ -1039,14 +928,18 @@
1039
928
  gap: var(--gap-small);
1040
929
  }
1041
930
 
1042
- /* TODO: Consider an opt-in model (E) where Section exposes --section-tab but does not
1043
- apply padding-inline-start automatically. A dedicated component (e.g. SectionContent)
1044
- would opt in via the variable, and surfaces like Card would be unaffected by default.
1045
- This would decouple Section from needing to know about every surface type and give
1046
- clearer boundaries between "content that lives inside a section" vs "a surface placed
1047
- at section level". High blast-radius refactor — table for a future pass. */
1048
- .tcn-section > :not(.tcn-heading, .tcn-section) {
931
+ .tcn-detail {
932
+ padding-block: var(--padding-medium);
933
+ gap: var(--padding-medium);
934
+ }
935
+
936
+ .tcn-section > .tcn-detail {
1049
937
  padding-inline-start: var(--section-tab);
938
+ padding-inline-end: var(--pad-inline, var(--padding-medium));
939
+ }
940
+
941
+ .tcn-scaffold-stack > .tcn-detail {
942
+ padding-inline: var(--pad-inline, var(--padding-medium));
1050
943
  }
1051
944
 
1052
945
  .tcn-section > .tcn-section {
@@ -1068,7 +961,7 @@
1068
961
  }
1069
962
 
1070
963
  .tcn-caret {
1071
- --caret-size: var(--shape-triangle-medium);
964
+ --caret-size: var(--ergo-shape-triangle-medium);
1072
965
  --caret-triangle-height: calc(var(--caret-size) / 2);
1073
966
  --caret-triangle-width: var(--caret-size);
1074
967
  --caret-triangle-base: var(--caret-triangle-height) solid transparent;
@@ -1111,7 +1004,7 @@
1111
1004
  --table-pad-inline: var(--pad-inline, var(--padding-medium));
1112
1005
 
1113
1006
  --material: var(--ergo-white);
1114
- --on-material: var(--ergo-ink-primary);
1007
+ --on-material: var(--ergo-text-color-primary);
1115
1008
  --action: var(--ergo-accent-blue);
1116
1009
  --on-action: var(--ergo-white);
1117
1010
  background-color: var(--material);
@@ -1152,7 +1045,7 @@
1152
1045
  .tcn-thead {
1153
1046
  /* Border for header row */
1154
1047
  .tcn-tr {
1155
- height: var(--bar-md);
1048
+ height: var(--ergo-sizing-bar-md);
1156
1049
  .tcn-th {
1157
1050
  border-bottom: 1px solid var(--ergo-grey-light);
1158
1051
  }
@@ -1169,7 +1062,7 @@
1169
1062
  font-weight: bold;
1170
1063
  /* Border for footer row */
1171
1064
  .tcn-tr {
1172
- height: var(--bar-sm);
1065
+ height: var(--ergo-sizing-bar-sm);
1173
1066
  .tcn-th,
1174
1067
  .tcn-td {
1175
1068
  border-top: 1px solid var(--ergo-grey-light);
@@ -1195,7 +1088,7 @@
1195
1088
  }
1196
1089
 
1197
1090
  .tcn-tr {
1198
- height: var(--bar-sm);
1091
+ height: var(--ergo-sizing-bar-sm);
1199
1092
  align-content: center;
1200
1093
  }
1201
1094
 
@@ -1254,17 +1147,17 @@
1254
1147
  --mat: var(--material);
1255
1148
  --act-raised: color-mix(in srgb, var(--mat), var(--act) 12%);
1256
1149
 
1257
- font-size: var(--font-size-input);
1150
+ font-size: var(--ergo-text-size-input);
1258
1151
  border: 1px solid var(--ergo-grey);
1259
1152
  box-sizing: border-box;
1260
- min-height: var(--action-md);
1261
- border-radius: var(--shape-radius-medium);
1153
+ min-height: var(--ergo-sizing-action-md);
1154
+ border-radius: var(--ergo-shape-radius-medium);
1262
1155
  padding-inline: 4px;
1263
1156
  }
1264
1157
 
1265
1158
  .tcn-radio-label,
1266
1159
  .tcn-select-selected-label {
1267
- font-size: var(--font-size-input);
1160
+ font-size: var(--ergo-text-size-input);
1268
1161
  }
1269
1162
 
1270
1163
  .tcn-control[data-is-disabled="false"]:hover {
@@ -1286,12 +1179,12 @@
1286
1179
 
1287
1180
  .tcn-control[data-is-disabled="true"] {
1288
1181
  cursor: not-allowed;
1289
- background: var(--material-disabled);
1290
- color: var(--on-material-disabled);
1182
+ background: var(--ergo-material-disabled-outline);
1183
+ color: var(--ergo-text-color-disabled-outline);
1291
1184
  }
1292
1185
 
1293
1186
  .tcn-control[data-is-disabled="true"]::placeholder {
1294
- color: var(--on-material-disabled);
1187
+ color: var(--ergo-text-color-disabled-outline);
1295
1188
  }
1296
1189
 
1297
1190
  .tcn-control {
@@ -1341,7 +1234,7 @@
1341
1234
  }
1342
1235
 
1343
1236
  .tcn-control-set {
1344
- border-radius: var(--shape-radius-medium);
1237
+ border-radius: var(--ergo-shape-radius-medium);
1345
1238
 
1346
1239
  &:focus-within {
1347
1240
  outline: 2px solid var(--ergo-primary);
@@ -1352,7 +1245,7 @@
1352
1245
  z-index: 1;
1353
1246
  border-radius: 0;
1354
1247
  height: auto;
1355
- min-height: var(--action-md);
1248
+ min-height: var(--ergo-sizing-action-md);
1356
1249
  padding-block: 0;
1357
1250
  &:focus,
1358
1251
  &:focus-visible {
@@ -1362,8 +1255,8 @@
1362
1255
  }
1363
1256
 
1364
1257
  .tcn-control-set-item:first-child {
1365
- border-top-left-radius: var(--shape-radius-medium);
1366
- border-bottom-left-radius: var(--shape-radius-medium);
1258
+ border-top-left-radius: var(--ergo-shape-radius-medium);
1259
+ border-bottom-left-radius: var(--ergo-shape-radius-medium);
1367
1260
  }
1368
1261
 
1369
1262
  .tcn-control-set-item:not(:last-child) {
@@ -1371,8 +1264,8 @@
1371
1264
  }
1372
1265
 
1373
1266
  .tcn-control-set-item:last-child {
1374
- border-top-right-radius: var(--shape-radius-medium);
1375
- border-bottom-right-radius: var(--shape-radius-medium);
1267
+ border-top-right-radius: var(--ergo-shape-radius-medium);
1268
+ border-bottom-right-radius: var(--ergo-shape-radius-medium);
1376
1269
  }
1377
1270
 
1378
1271
  .tcn-select,
@@ -1380,8 +1273,8 @@
1380
1273
  .tcn-button[data-hierarchy] {
1381
1274
  border: 1px solid var(--ergo-grey);
1382
1275
  height: auto;
1383
- min-height: var(--action-md);
1384
- min-width: var(--action-md);
1276
+ min-height: var(--ergo-sizing-action-md);
1277
+ min-width: var(--ergo-sizing-action-md);
1385
1278
  box-sizing: border-box;
1386
1279
  &:hover,
1387
1280
  &[data-hover] {
@@ -1425,7 +1318,7 @@
1425
1318
 
1426
1319
  &[data-is-disabled="true"] {
1427
1320
  cursor: not-allowed;
1428
- border-color: var(--material-disabled);
1321
+ border-color: var(--ergo-material-disabled-outline);
1429
1322
  }
1430
1323
 
1431
1324
  &[data-checked="true"] {
@@ -1470,4 +1363,64 @@
1470
1363
  .tcn-suggestion-list {
1471
1364
  --accent-color: var(--ergo-primary);
1472
1365
  }
1366
+
1367
+ /* Datum/Tokens */
1368
+ .tcn-chip {
1369
+ --action: var(--ergo-primary);
1370
+ --accent-color: var(--ergo-primary);
1371
+ }
1372
+
1373
+ .tcn-datum[data-emphasis="normal"] {
1374
+ --datum-font-color: var(--on-material);
1375
+ }
1376
+
1377
+ .tcn-datum[data-emphasis="strong"] {
1378
+ --datum-font-weight: 700;
1379
+ }
1380
+
1381
+ .tcn-datum[data-emphasis="faint"] {
1382
+ --datum-font-color: color-mix(in srgb, var(--on-material), transparent 12%);
1383
+ }
1384
+
1385
+ .tcn-datum[data-severity="dangerous"] {
1386
+ --datum-font-color: var(--ergo-status-red);
1387
+ }
1388
+
1389
+ .tcn-datum[data-severity="cautious"] {
1390
+ --datum-font-color: var(--ergo-status-yellow);
1391
+ }
1392
+
1393
+ .tcn-datum[data-severity="suggested"] {
1394
+ --datum-font-color: var(--ergo-status-blue);
1395
+ }
1396
+
1397
+ .tcn-datum[data-severity="encouraged"] {
1398
+ --datum-font-color: var(--ergo-status-green);
1399
+ }
1400
+
1401
+ .tcn-key {
1402
+ --accent-color: var(--action);
1403
+ font-size: 14px;
1404
+ color: var(--datum-font-color);
1405
+ font-weight: var(--datum-font-weight, 400);
1406
+ }
1407
+
1408
+ .tcn-value {
1409
+ font-size: 12px;
1410
+
1411
+ color: var(--datum-font-color);
1412
+ font-weight: var(--datum-font-weight, 400);
1413
+ }
1414
+
1415
+ .tcn-term > .tcn-key,
1416
+ .tcn-term > .tcn-value {
1417
+ max-width: 50%;
1418
+ }
1419
+
1420
+ .tcn-value {
1421
+ :where(.tcn-chip) {
1422
+ --action: var(--ergo-accent-blue);
1423
+ --accent-color: var(--ergo-accent-blue);
1424
+ }
1425
+ }
1473
1426
  }