@tcn/ui 0.3.3 → 0.5.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 (131) hide show
  1. package/dist/Color-6BZIO3FS-CWWwv-fq.js +1004 -0
  2. package/dist/Color-6BZIO3FS-CWWwv-fq.js.map +1 -0
  3. package/dist/{WithTooltip-IO6J4KBT-B1oq93K5.js → WithTooltip-65CFNBJE-DvcUZizH.js} +4 -4
  4. package/dist/WithTooltip-65CFNBJE-DvcUZizH.js.map +1 -0
  5. package/dist/actions/__docs__/components/showcase.d.ts.map +1 -1
  6. package/dist/actions/__docs__/components/showcase.js +1 -1
  7. package/dist/actions/button/base_button/base_button.d.ts +2 -4
  8. package/dist/actions/button/base_button/base_button.d.ts.map +1 -1
  9. package/dist/actions/button/base_button/base_button.js +35 -35
  10. package/dist/actions/button/base_button/base_button.js.map +1 -1
  11. package/dist/actions/button/button/button.d.ts +7 -1
  12. package/dist/actions/button/button/button.d.ts.map +1 -1
  13. package/dist/actions/button/button/button.js +9 -7
  14. package/dist/actions/button/button/button.js.map +1 -1
  15. package/dist/actions/button/slim_button/slim_button.d.ts +6 -1
  16. package/dist/actions/button/slim_button/slim_button.d.ts.map +1 -1
  17. package/dist/actions/button/slim_button/slim_button.js +13 -14
  18. package/dist/actions/button/slim_button/slim_button.js.map +1 -1
  19. package/dist/actions/toggle/toggle.d.ts +9 -0
  20. package/dist/actions/toggle/toggle.d.ts.map +1 -0
  21. package/dist/actions/toggle/toggle.js +21 -0
  22. package/dist/actions/toggle/toggle.js.map +1 -0
  23. package/dist/feedback/lazy/lazy.js +3 -3
  24. package/dist/formatter-EIJCOSYU-D6nmx63h.js +6 -0
  25. package/dist/formatter-EIJCOSYU-D6nmx63h.js.map +1 -0
  26. package/dist/inputs/mask_input/mask.d.ts.map +1 -1
  27. package/dist/inputs/mask_input/mask.js.map +1 -1
  28. package/dist/inputs/multiselect/multiselect_inline_values.js +3 -2
  29. package/dist/inputs/multiselect/multiselect_inline_values.js.map +1 -1
  30. package/dist/inputs/multiselect/multiselect_values.js +3 -2
  31. package/dist/inputs/multiselect/multiselect_values.js.map +1 -1
  32. package/dist/layouts/index.d.ts +3 -1
  33. package/dist/layouts/index.d.ts.map +1 -1
  34. package/dist/layouts/index.js +22 -18
  35. package/dist/layouts/index.js.map +1 -1
  36. package/dist/layouts/row/row.d.ts +4 -0
  37. package/dist/layouts/row/row.d.ts.map +1 -0
  38. package/dist/layouts/row/row.js +11 -0
  39. package/dist/layouts/row/row.js.map +1 -0
  40. package/dist/layouts/section/heading.d.ts +7 -0
  41. package/dist/layouts/section/heading.d.ts.map +1 -0
  42. package/dist/layouts/section/heading.js +9 -0
  43. package/dist/layouts/section/heading.js.map +1 -0
  44. package/dist/layouts/section/section.d.ts +4 -0
  45. package/dist/layouts/section/section.d.ts.map +1 -0
  46. package/dist/layouts/section/section.js +22 -0
  47. package/dist/layouts/section/section.js.map +1 -0
  48. package/dist/navigation/tabs/primitives/tabs_list.d.ts.map +1 -1
  49. package/dist/navigation/tabs/primitives/tabs_list.js +17 -24
  50. package/dist/navigation/tabs/primitives/tabs_list.js.map +1 -1
  51. package/dist/overlay/carrot/base_carrot.d.ts +8 -0
  52. package/dist/overlay/carrot/base_carrot.d.ts.map +1 -0
  53. package/dist/overlay/carrot/base_carrot.js +21 -0
  54. package/dist/overlay/carrot/base_carrot.js.map +1 -0
  55. package/dist/row.css +1 -0
  56. package/dist/section.css +1 -0
  57. package/dist/section.module-0wyGkhDg.js +5 -0
  58. package/dist/section.module-0wyGkhDg.js.map +1 -0
  59. package/dist/{showcase-WfP6kBEb.js → showcase-DK557szS.js} +18018 -16269
  60. package/dist/showcase-DK557szS.js.map +1 -0
  61. package/dist/surfaces/pop_confirm/pop_confirm.js +6 -3
  62. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -1
  63. package/dist/{syntaxhighlighter-IQDEPFLK-BX_eF8__.js → syntaxhighlighter-ED5Y7EFY-DaMS-2cF.js} +54 -54
  64. package/dist/syntaxhighlighter-ED5Y7EFY-DaMS-2cF.js.map +1 -0
  65. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  66. package/dist/themes/themes/ergo/ergo_theme.js +403 -263
  67. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  68. package/dist/themes/themes/windows_98/windows_98.css +1 -1
  69. package/dist/themes/themes/windows_98/windows_98_theme.js +108 -1
  70. package/dist/themes/themes/windows_98/windows_98_theme.js.map +1 -1
  71. package/dist/tokens/index.d.ts +2 -0
  72. package/dist/tokens/index.d.ts.map +1 -1
  73. package/dist/tokens/index.js +5 -1
  74. package/dist/tokens/index.js.map +1 -1
  75. package/dist/tokens/key/key.d.ts +3 -0
  76. package/dist/tokens/key/key.d.ts.map +1 -0
  77. package/dist/tokens/key/key.js +8 -0
  78. package/dist/tokens/key/key.js.map +1 -0
  79. package/dist/tokens/value/value.d.ts +3 -0
  80. package/dist/tokens/value/value.d.ts.map +1 -0
  81. package/dist/tokens/value/value.js +8 -0
  82. package/dist/tokens/value/value.js.map +1 -0
  83. package/package.json +1 -1
  84. package/src/actions/__docs__/actions.mdx +159 -34
  85. package/src/actions/__docs__/actions.stories.tsx +416 -101
  86. package/src/actions/__docs__/components/showcase.tsx +10 -6
  87. package/src/actions/button/__stories__/button.stories.tsx +10 -0
  88. package/src/actions/button/__stories__/toggle.stories.tsx +177 -0
  89. package/src/actions/button/base_button/base_button.tsx +8 -10
  90. package/src/actions/button/button/button.tsx +11 -2
  91. package/src/actions/button/slim_button/slim_button.tsx +20 -13
  92. package/src/actions/toggle/toggle.tsx +26 -0
  93. package/src/inputs/mask_input/mask.ts +7 -1
  94. package/src/layouts/index.ts +4 -2
  95. package/src/layouts/row/row.module.css +5 -0
  96. package/src/layouts/row/row.tsx +15 -0
  97. package/src/layouts/section/__stories__/section.stories.module.css +6 -0
  98. package/src/layouts/section/__stories__/section.stories.tsx +152 -0
  99. package/src/layouts/section/heading.tsx +16 -0
  100. package/src/layouts/section/section.module.css +41 -0
  101. package/src/layouts/section/section.tsx +21 -0
  102. package/src/navigation/tabs/primitives/tabs_list.tsx +5 -6
  103. package/src/overlay/carrot/base_carrot.tsx +24 -0
  104. package/src/overlay/carrot/carrot.stories.tsx +54 -0
  105. package/src/surfaces/card/card.stories.tsx +14 -14
  106. package/src/surfaces/modal/__stories__/modal.stories.tsx +16 -7
  107. package/src/surfaces/window/window.stories.tsx +16 -10
  108. package/src/themes/themes/ergo/__stories__/components/material_picker/sb_inverted_materials.module.css +4 -4
  109. package/src/themes/themes/ergo/__stories__/components/tone_picker/sb_tone_picker.module.css +3 -0
  110. package/src/themes/themes/ergo/__stories__/components/tone_picker/sb_tone_picker.tsx +5 -2
  111. package/src/themes/themes/ergo/__stories__/material.stories.tsx +2 -2
  112. package/src/themes/themes/ergo/__stories__/sb_materials.module.css +31 -26
  113. package/src/themes/themes/ergo/ergo_theme.css +400 -260
  114. package/src/themes/themes/windows_98/windows_98.css +108 -1
  115. package/src/tokens/index.ts +2 -0
  116. package/src/tokens/key/key.tsx +10 -0
  117. package/src/tokens/value/value.tsx +10 -0
  118. package/tsconfig.json +6 -0
  119. package/dist/Color-ASIRERSW-B4GaVKuQ.js +0 -990
  120. package/dist/Color-ASIRERSW-B4GaVKuQ.js.map +0 -1
  121. package/dist/WithTooltip-IO6J4KBT-B1oq93K5.js.map +0 -1
  122. package/dist/formatter-QJ4M4OGQ-DaIl2Wi_.js +0 -6
  123. package/dist/formatter-QJ4M4OGQ-DaIl2Wi_.js.map +0 -1
  124. package/dist/layouts/list/section_header.d.ts +0 -6
  125. package/dist/layouts/list/section_header.d.ts.map +0 -1
  126. package/dist/layouts/list/section_header.js +0 -22
  127. package/dist/layouts/list/section_header.js.map +0 -1
  128. package/dist/showcase-WfP6kBEb.js.map +0 -1
  129. package/dist/syntaxhighlighter-IQDEPFLK-BX_eF8__.js.map +0 -1
  130. package/src/layouts/list/section_header.module.css +0 -20
  131. package/src/layouts/list/section_header.tsx +0 -21
@@ -8,11 +8,44 @@
8
8
  @layer tcn-theme {
9
9
  /* ===== CSS VARIABLES ===== */
10
10
  :root {
11
+ /* ========== Ergo Brand Palette ========== */
12
+ --ergo-primary: #ce6b2b;
13
+ --ergo-secondary: #669eb4;
14
+ --ergo-secondary-light: #ecf4fb;
15
+ --ergo-secondary-dark: #497485;
16
+ --ergo-tertiary: #dfd7cd;
17
+ --ergo-white: #ffffff;
18
+
19
+ --ergo-accent-blue: #395578;
20
+ --ergo-accent-green: #97bba3;
21
+ --ergo-accent-yellow: #dbc97e;
22
+ --ergo-accent-green: #97bba3;
23
+
24
+ --ergo-grey: #aaaaaa;
25
+ --ergo-grey-light: #d3d3d3;
26
+ --ergo-grey-dark: #808080;
27
+
28
+ --ergo-status-red: #ff6565;
29
+ --ergo-status-red-dark: #c24848;
30
+
31
+ --ergo-status-yellow: #ffd439;
32
+ --ergo-status-yellow-dark: #dbb735;
33
+
34
+ --ergo-status-blue: var(--ergo-secondary);
35
+ --ergo-status-blue-dark: var(--ergo-secondary-dark);
36
+
37
+ --ergo-status-green: #3fbc6a;
38
+ --ergo-status-green-dark: #2d904f;
39
+
40
+ --ergo-ink-primary: var(--ergo-accent-blue);
41
+ --ergo-ink-inverse: var(--ergo-white);
42
+
43
+ /* ========== Blackcat System Tokens ========== */
11
44
  --scalar: 1;
12
- --accent-color: #cd6b2c;
45
+ --accent-color: var(--ergo-primary);
13
46
 
14
47
  /* Typography */
15
- --font-color: #395578;
48
+ --font-color: var(--ergo-ink-primary);
16
49
  --font-family: "Lato", sans-serif;
17
50
  --font-size: 12px;
18
51
 
@@ -26,16 +59,22 @@
26
59
  --padding-large: 16px;
27
60
 
28
61
  /* Status Colors */
29
- --status-color-disabled: #7f7f7f;
30
- --status-color-info: #008cff;
31
- --status-color-warning: #ffff00;
32
- --status-color-positive: #00ff00;
33
- --status-color-error: #ff0000;
34
-
35
- --async-color-initial: #c0c0c0;
36
- --async-color-pending: #008cff;
37
- --async-color-success: #00ff00;
38
- --async-color-failed: #ff0000;
62
+ --status-color-disabled: var(--ergo-grey-light);
63
+ --status-color-info: var(--ergo-status-blue);
64
+ --status-color-warning: var(--ergo-status-yellow);
65
+ --status-color-positive: var(--ergo-status-green);
66
+ --status-color-error: var(--ergo-status-red);
67
+
68
+ --async-color-initial: var(--ergo-grey-main);
69
+ --async-color-pending: var(--ergo-status-blue);
70
+ --async-color-success: var(--ergo-status-green);
71
+ --async-color-failed: var(--ergo-status-red);
72
+
73
+ --action-severity-dangerous: var(--ergo-status-red);
74
+ --action-severity-cautious: var(--ergo-status-yellow);
75
+ --action-severity-neutral: var(--ergo-primary);
76
+ --action-severity-suggested: var(--ergo-status-blue);
77
+ --action-severity-encouraged: var(--ergo-status-green);
39
78
 
40
79
  /* Shape */
41
80
  --shape-radius-small: 2px;
@@ -69,29 +108,26 @@
69
108
  --foreground-color-tertiary: #222222;
70
109
  --foreground-color-quaternary: #222222;
71
110
 
72
- --material-disabled: #d3d3d3;
73
- --material-line: #aaaaaa;
74
- --material-secondary-dark: 197 29.1% 40.4%;
75
- --material-tan: 33, 22%, 84%;
111
+ --material-disabled: var(--ergo-grey-light);
112
+ --on-material-disabled: var(--ergo-ink-inverse);
113
+ --ink-disabled: var(--ergo-grey-light);
76
114
 
77
- /* Default Material */
78
- --action: 23, 65%, 49%;
79
- --on-action: 0, 0%, 100%;
80
- --material: 0, 0%, 100%;
81
- --on-material: 213, 35.6%, 34.7%;
115
+ --material-line: var(--ergo-grey);
82
116
 
83
- --action-dangerous: 0, 90%, 50%;
84
- --action-cautious: 53, 90%, 60%;
85
- --on-action-cautious: 213, 35.6%, 34.7%;
86
- --action-neutral: var(--action);
87
- --action-suggested: 202, 90%, 40%;
88
- --action-encouraged: 120, 90%, 40%;
117
+ /* Default Material */
118
+ --action: var(--ergo-primary);
119
+ --on-action: var(--ergo-white);
120
+ --material: var(--ergo-white);
121
+ --on-material: var(--ergo-accent-blue);
89
122
  }
90
123
 
91
124
  .tcn-theme-root {
92
125
  font-family: var(--font-family);
93
126
  color: var(--font-color);
94
- background-color: var(--background-color-primary);
127
+ --action: var(--ergo-primary);
128
+ --on-action: var(--ergo-white);
129
+ --material: var(--ergo-white);
130
+ --on-material: var(--ergo-accent-blue);
95
131
  }
96
132
 
97
133
  /* ===== Actions ===== */
@@ -104,192 +140,206 @@
104
140
  background 0.1s,
105
141
  color 0.1s;
106
142
 
107
- --act: hsl(var(--tcn-interactive-color, var(--action)));
108
- --on-act: hsl(var(--on-action));
109
- /* Could use hsl here if we made three color variables for each of the hsl values */
110
- --act-down: color-mix(in srgb, var(--act), black 8%);
111
- --act-raised: color-mix(in srgb, var(--act), white 8%);
112
- --act-faint: hsla(var(--action), 0.2);
113
- --on-mat: hsl(var(--on-material));
114
- --on-mat-faint: hsla(var(--on-material), 0.2);
115
- --on-mat-down: color-mix(in srgb, var(--on-mat), black 8%);
116
- --mat: hsl(var(--material));
117
- --mat-down: color-mix(in srgb, var(--mat), black 8%);
118
- --mat-raised: color-mix(in srgb, var(--mat), white 8%);
119
- }
120
-
121
- .tcn-interactive[data-is-disabled="true"] {
122
- pointer-events: none;
123
- cursor: not-allowed;
124
- }
125
-
126
- .tcn-interactive[data-hierarchy="primary"] {
127
- background: var(--act);
128
- color: var(--on-act);
129
- border: 1px solid var(--act);
130
- }
131
-
132
- .tcn-interactive[data-hierarchy="primary"]:focus-visible {
133
- outline: 2px dashed var(--act);
134
- }
143
+ --ink: var(--on-material);
144
+ --act: var(--action);
145
+ --mat: var(--material);
135
146
 
136
- .tcn-interactive[data-hierarchy="primary"][data-is-disabled="true"] {
137
- background: var(--material-disabled);
138
- color: white;
139
- border: 1px solid var(--material-disabled);
140
- }
147
+ --act-down: color-mix(in srgb, var(--mat), black 12%);
148
+ --act-raised: color-mix(in srgb, var(--mat), var(--act) 12%);
149
+ --act-focus: color-mix(in srgb, var(--mat), var(--act) 16%);
150
+ --act-drag: color-mix(in srgb, var(--mat), var(--act) 24%);
141
151
 
142
- .tcn-interactive[data-hierarchy="primary"]:hover {
143
- background: var(--act-raised);
144
- }
145
-
146
- .tcn-interactive[data-hierarchy="primary"]:active {
147
- background: var(--act-down);
148
- }
149
-
150
- .tcn-interactive[data-hierarchy="secondary"] {
151
- background: transparent;
152
- color: var(--on-mat);
153
- border: 1px solid var(--on-mat);
154
- }
155
-
156
- .tcn-interactive[data-hierarchy="secondary"]:focus-visible {
157
- outline: 2px dashed var(--on-mat);
158
- }
152
+ background: var(--mat);
153
+ color: var(--ink);
154
+ transition:
155
+ background 0.1s,
156
+ color 0.1s;
159
157
 
160
- .tcn-interactive[data-hierarchy="secondary"][data-is-disabled="true"] {
161
- color: var(--material-disabled);
162
- border: 1px solid var(--material-disabled);
163
- }
158
+ &:focus-visible,
159
+ &[data-focus-visible] {
160
+ background: var(--act-focus);
161
+ outline: 2px solid var(--ergo-primary);
162
+ outline-offset: 2px;
163
+ }
164
164
 
165
- .tcn-interactive[data-hierarchy="secondary"]:hover {
166
- background: var(--on-mat-faint);
167
- }
165
+ &:hover,
166
+ &[data-hover] {
167
+ background: var(--act-raised);
168
+ }
168
169
 
169
- .tcn-interactive[data-hierarchy="secondary"]:active {
170
- background: var(--mat-down);
171
- }
170
+ &:active,
171
+ &[data-active] {
172
+ background: var(--act-down);
173
+ }
172
174
 
173
- .tcn-interactive[data-hierarchy="tertiary"] {
174
- background: transparent;
175
- color: var(--on-mat);
176
- border: 1px solid transparent;
175
+ &[data-is-disabled="true"] {
176
+ pointer-events: none;
177
+ }
177
178
  }
178
179
 
179
- .tcn-interactive[data-hierarchy="tertiary"]:focus-visible {
180
- outline: 2px dashed var(--on-mat);
181
- }
180
+ /* ===== Base Button =====
181
+ * Shared between Button and Toggle.
182
+ * Primarily manages button dimensions and sizing ratios.
183
+ */
184
+ .tcn-base-button {
185
+ /* TODO: btn size should look for "--tcn-action-size" variable before defaulting. */
186
+ --btn-size-base: 26px;
187
+ --btn-pad-base: 12px;
182
188
 
183
- .tcn-interactive[data-hierarchy="tertiary"][data-is-disabled="true"] {
184
- color: var(--material-disabled);
185
- }
189
+ --btn-pad-delta: 4px;
190
+ --btn-size-delta: 4px;
191
+ --btn-step: 1;
186
192
 
187
- .tcn-interactive[data-hierarchy="tertiary"]:hover {
188
- text-decoration: underline;
189
- text-decoration-color: var(--on-mat);
190
- text-decoration-thickness: 1px;
191
- text-underline-offset: 4px;
192
- color: var(--on-mat);
193
- background: var(--on-mat-faint);
194
- }
193
+ /* Increase size and pad by 4px for each size "step" from medium */
194
+ --btn-pad: calc(var(--btn-pad-base) + var(--btn-pad-delta) * var(--btn-step));
195
+ --btn-size: calc(var(--btn-size-base) + var(--btn-size-delta) * var(--btn-step));
195
196
 
196
- .tcn-interactive[data-hierarchy="tertiary"]:active {
197
- background: var(--mat-down);
198
- }
197
+ border-radius: var(--shape-radius-medium);
198
+ min-height: var(--btn-size);
199
+ padding: var(--padding-small) var(--btn-pad);
199
200
 
200
- /* Button */
201
+ &[data-size="sm"] {
202
+ --btn-step: -1;
203
+ }
204
+ &[data-size="md"] {
205
+ --btn-step: 0;
206
+ }
207
+ &[data-size="lg"] {
208
+ --btn-step: 1;
209
+ }
201
210
 
202
- .tcn-base-button {
203
- --action: var(var(--button-color), var(--action));
204
- }
211
+ &[data-is-utility="true"] {
212
+ height: auto;
213
+ width: auto;
214
+ min-width: var(--btn-size);
215
+ padding: 0;
205
216
 
206
- .tcn-base-button[data-severity="dangerous"] {
207
- --action: var(--action-dangerous);
208
- --on-material: var(--action-dangerous);
209
- }
217
+ /* Icon is 75% of the button size but minimum of 2px to account for border and 1px offset */
218
+ --util-ratio: 0.75;
219
+ --btn-size-base: 18px;
210
220
 
211
- .tcn-base-button[data-severity="cautious"] {
212
- --action: var(--action-cautious);
213
- --on-action: var(--on-action-cautious);
214
- --on-material: var(--action-cautious);
221
+ .tcn-icon {
222
+ min-height: min(2px, calc(var(--btn-size) * var(--util-ratio)));
223
+ min-width: min(2px, calc(var(--btn-size) * var(--util-ratio)));
224
+ }
225
+ }
215
226
  }
216
227
 
217
- /* .tcn-base-button[data-severity="neutral"] {
218
- --action: var(--action-neutral);
219
- } */
228
+ /* ===== Button =====
229
+ * Manages Hierarchy and Severity.
230
+ */
231
+ .tcn-button {
232
+ --btn-primary: var(--action);
233
+ --btn-on-primary: var(--on-action);
234
+ --btn-variant: var(--on-material);
235
+
236
+ &[data-severity="dangerous"] {
237
+ --btn-primary: var(--action-severity-dangerous);
238
+ --btn-variant: var(--ergo-status-red-dark);
239
+ }
240
+ &[data-severity="cautious"] {
241
+ --btn-primary: var(--action-severity-cautious);
242
+ --btn-on-primary: var(--ergo-accent-blue);
243
+ --btn-variant: var(--ergo-status-yellow-dark);
244
+ }
245
+ &[data-severity="suggested"] {
246
+ --btn-primary: var(--action-severity-suggested);
247
+ --btn-variant: var(--ergo-status-blue-dark);
248
+ }
249
+ &[data-severity="encouraged"] {
250
+ --btn-primary: var(--action-severity-encouraged);
251
+ --btn-variant: var(--ergo-status-green-dark);
252
+ }
253
+
254
+ &[data-hierarchy="primary"] {
255
+ --act: var(--ergo-white);
256
+ --ink: var(--tcn-button-text-color, var(--btn-on-primary));
257
+ --mat: var(--tcn-button-color, var(--btn-primary));
258
+ &[data-is-disabled="true"] {
259
+ --ink: var(--ergo-white);
260
+ --mat: var(--ergo-grey-light);
261
+ }
262
+ }
220
263
 
221
- .tcn-base-button[data-severity="suggested"] {
222
- --action: var(--action-suggested);
223
- --on-material: var(--action-suggested);
224
- }
264
+ &[data-hierarchy="secondary"],
265
+ &[data-hierarchy="tertiary"] {
266
+ --act: var(--tcn-button-color, var(--btn-variant));
267
+ --ink: var(--tcn-button-color, var(--btn-variant));
268
+ &[data-is-disabled="true"] {
269
+ --ink: var(--ergo-grey-light);
270
+ }
271
+ }
225
272
 
226
- .tcn-base-button[data-severity="encouraged"] {
227
- --action: var(--action-encouraged);
228
- --on-material: var(--action-encouraged);
229
- }
273
+ /* Decorations */
274
+ &[data-hierarchy="tertiary"]:hover {
275
+ text-decoration: underline;
276
+ text-decoration-color: var(--ink);
277
+ text-decoration-thickness: 1px;
278
+ text-underline-offset: 4px;
279
+ }
230
280
 
231
- .tcn-button {
232
- border-radius: 4px;
233
- }
281
+ &[data-hierarchy="tertiary"] {
282
+ border: 1px solid transparent;
283
+ }
234
284
 
235
- .tcn-button[data-size="sm"] {
236
- padding: 0px 8px;
237
- min-height: 22px;
238
- }
285
+ &[data-hierarchy="secondary"] {
286
+ border: 1px solid var(--ink);
287
+ }
239
288
 
240
- .tcn-button[data-size="md"] {
241
- padding: 0px 12px;
242
- min-height: 26px;
243
- }
289
+ &[data-hierarchy="primary"] {
290
+ border: 1px solid var(--mat);
291
+ }
244
292
 
245
- .tcn-button[data-size="lg"] {
246
- padding: 0px 16px;
247
- min-height: 32px;
248
- }
293
+ transition:
294
+ box-shadow 0.1s,
295
+ transform 0.1s;
249
296
 
250
- .tcn-button:hover {
251
- transform: translateY(-1px);
252
- box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.1);
253
- }
297
+ &:hover,
298
+ &[data-hover] {
299
+ transform: translateY(-1px);
300
+ box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.12);
301
+ }
254
302
 
255
- .tcn-button:active {
256
- transform: translateY(1px);
257
- box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.1);
303
+ &:active,
304
+ &[data-active] {
305
+ transform: translateY(1px);
306
+ box-shadow: inset 0 2px 2px 0 rgba(0, 0, 0, 0.12);
307
+ }
258
308
  }
259
309
 
310
+ /* @deprecated - use Button with utility prop instead */
260
311
  .tcn-slim-button {
261
312
  height: auto;
262
313
  width: auto;
263
314
  padding: 0;
264
- }
265
315
 
266
- .tcn-slim-button[data-size="sm"] {
267
- min-height: 12px;
268
- min-width: 12px;
269
- padding: 0;
270
- .tcn-icon {
271
- min-height: 10px;
272
- min-width: 10px;
316
+ &[data-size="sm"] {
317
+ min-height: 12px;
318
+ min-width: 12px;
319
+ padding: 0;
320
+ .tcn-icon {
321
+ min-height: 10px;
322
+ min-width: 10px;
323
+ }
273
324
  }
274
- }
275
-
276
- .tcn-slim-button[data-size="md"] {
277
- min-height: 18px;
278
- min-width: 18px;
279
- padding: 0;
280
- .tcn-icon {
281
- min-height: 14px;
282
- min-width: 14px;
325
+ &[data-size="md"] {
326
+ min-height: 18px;
327
+ min-width: 18px;
328
+ padding: 0;
329
+ .tcn-icon {
330
+ min-height: 14px;
331
+ min-width: 14px;
332
+ }
283
333
  }
284
- }
285
334
 
286
- .tcn-slim-button[data-size="lg"] {
287
- min-height: 24px;
288
- min-width: 24px;
289
- padding: 0;
290
- .tcn-icon {
291
- min-height: 20px;
292
- min-width: 20px;
335
+ &[data-size="lg"] {
336
+ min-height: 24px;
337
+ min-width: 24px;
338
+ padding: 0;
339
+ .tcn-icon {
340
+ min-height: 20px;
341
+ min-width: 20px;
342
+ }
293
343
  }
294
344
  }
295
345
 
@@ -297,6 +347,28 @@
297
347
  padding-inline-end: 26px;
298
348
  }
299
349
 
350
+ /* Toggle */
351
+ .tcn-toggle {
352
+ --tgl-false: var(--ergo-accent-blue);
353
+ --tgl-true: var(--ergo-accent-blue);
354
+ --on-tgl-true: var(--ergo-white);
355
+
356
+ --ink: var(--tcn-button-color, var(--tgl-false));
357
+ --act: var(--tcn-button-color, var(--tgl-false));
358
+ &[data-is-disabled="true"] {
359
+ --ink: var(--ergo-grey-light);
360
+ }
361
+ &[data-is-selected="true"] {
362
+ --mat: var(--tcn-button-color, var(--tgl-true));
363
+ --ink: var(--tcn-button-text-color, var(--ergo-white));
364
+ --act: var(--ergo-white);
365
+ &[data-is-disabled="true"] {
366
+ --ink: var(--ergo-white);
367
+ --mat: var(--ergo-grey-light);
368
+ }
369
+ }
370
+ }
371
+
300
372
  .tcn-button-group {
301
373
  .tcn-button-group-button:hover,
302
374
  .tcn-button-group-button:active {
@@ -332,7 +404,6 @@
332
404
  }
333
405
 
334
406
  .tcn-select-group {
335
- --action: var(--action-neutral);
336
407
  .tcn-select-group-option:hover,
337
408
  .tcn-select-group-option:active {
338
409
  transform: none;
@@ -397,10 +468,15 @@
397
468
  box-sizing: border-box;
398
469
  border: none;
399
470
  padding: 0px var(--padding-medium);
471
+ border-radius: 0;
400
472
  }
401
473
  .tcn-tab-item[data-is-selected="true"] {
402
- --on-material: var(--action);
474
+ --mat: var(--tcn-button-color, var(--material));
475
+ --ink: var(--tcn-button-text-color, var(--ergo-primary));
476
+ --act: var(--ergo-primary);
403
477
  }
478
+
479
+ /* Hover Indicator */
404
480
  .tcn-tab-item[data-is-selected="false"]:hover::after {
405
481
  content: "";
406
482
  display: block;
@@ -409,12 +485,13 @@
409
485
  right: 0;
410
486
  bottom: 0px;
411
487
  height: 1px;
412
- background: var(--on-mat);
488
+ background: var(--ergo-accent-blue);
413
489
  pointer-events: none;
414
- z-index: 2;
415
490
  width: 100%;
491
+ z-index: 3;
416
492
  }
417
493
 
494
+ /* Indicator */
418
495
  &::after {
419
496
  content: "";
420
497
  position: absolute;
@@ -423,7 +500,7 @@
423
500
  min-height: 2px;
424
501
  transform: translateX(var(--tabs-active-rectangle-position-x, 0));
425
502
  width: var(--tabs-active-rectangle-width, 0);
426
- background: hsl(var(--action));
503
+ background: var(--ergo-primary);
427
504
  pointer-events: none;
428
505
  border-bottom-left-radius: 2px;
429
506
  border-bottom-right-radius: 2px;
@@ -435,15 +512,17 @@
435
512
  }
436
513
  }
437
514
 
515
+ /* Rail */
438
516
  &::before {
439
517
  content: "";
440
518
  position: absolute;
441
- bottom: 0;
519
+ bottom: 0px;
442
520
  left: 0;
443
521
  width: 100%;
444
522
  height: 1px;
445
523
  background: var(--material-line);
446
524
  pointer-events: none;
525
+ z-index: 1;
447
526
  }
448
527
  }
449
528
 
@@ -453,8 +532,7 @@
453
532
  width: auto;
454
533
  flex-grow: 0;
455
534
  border-radius: var(--shape-radius-medium);
456
- border: 1px solid hsl(var(--on-material));
457
- --action: var(--on-material);
535
+ border: 1px solid var(--on-material);
458
536
 
459
537
  .tcn-tabs-list {
460
538
  gap: var(--gap-small);
@@ -462,24 +540,14 @@
462
540
  .tcn-tab-item {
463
541
  border-radius: var(--shape-radius-medium);
464
542
  }
465
- .tcn-tab-item[data-is-selected="true"] {
466
- background: var(--on-mat);
467
- color: var(--mat);
468
- }
469
- .tcn-tab-item[data-is-selected="true"]:hover {
470
- background: color-mix(in srgb, var(--on-mat), white 8%);
471
- }
472
- .tcn-tab-item[data-is-selected="true"]:active {
473
- background: color-mix(in srgb, var(--on-mat), black 8%);
474
- }
475
543
  }
476
544
  }
477
545
 
478
546
  /* ===== MATERIAL ===== */
479
547
 
480
548
  .material {
481
- background-color: hsl(var(--material));
482
- color: hsl(var(--on-material));
549
+ background-color: var(--material);
550
+ color: var(--on-material);
483
551
  }
484
552
 
485
553
  /* ===== SURFACES ===== */
@@ -571,26 +639,17 @@
571
639
  border: 1px solid var(--foreground-color-primary);
572
640
  }
573
641
 
574
- :where(.tcn-typography) {
575
- color: inherit;
576
- }
577
-
578
642
  :where(.tcn-header) {
579
- --material: var(--material-secondary-dark);
580
- --on-material: 0, 0%, 100%;
581
- --action: var(--material-tan);
582
- --on-action: 0, 0%, 100%;
583
- background-color: hsl(var(--material));
584
- color: hsl(var(--on-material));
585
- }
586
-
587
- :where(.tcn-utility-bar) {
588
- --material: var(--material-secondary-dark);
589
- --on-material: 0, 0%, 100%;
590
- --action: var(--material-tan);
591
- --on-action: 0, 0%, 100%;
592
- background-color: hsl(var(--material));
593
- color: hsl(var(--on-material));
643
+ --material: var(--ergo-secondary-dark);
644
+ --on-material: var(--ergo-white);
645
+ --action: var(--ergo-tertiary);
646
+ --on-action: var(--ergo-secondary-dark);
647
+
648
+ background-color: var(--material);
649
+ color: var(--on-material);
650
+ :where(.tcn-typography) {
651
+ color: inherit;
652
+ }
594
653
  }
595
654
  }
596
655
 
@@ -606,26 +665,17 @@
606
665
  border: 2px solid white;
607
666
  }
608
667
 
609
- :where(.tcn-typography) {
610
- color: inherit;
611
- }
612
-
613
668
  :where(.tcn-header) {
614
- --material: var(--material-secondary-dark);
615
- --on-material: 0, 0%, 100%;
616
- --action: var(--material-tan);
617
- --on-action: 0, 0%, 100%;
618
- background-color: hsl(var(--material));
619
- color: hsl(var(--on-material));
620
- }
621
-
622
- :where(.tcn-utility-bar) {
623
- --material: var(--material-secondary-dark);
624
- --on-material: 0, 0%, 100%;
625
- --action: var(--material-tan);
626
- --on-action: 0, 0%, 100%;
627
- background-color: hsl(var(--material));
628
- color: hsl(var(--on-material));
669
+ --material: var(--ergo-secondary-dark);
670
+ --on-material: var(--ergo-white);
671
+ --action: var(--ergo-tertiary);
672
+ --on-action: var(--ergo-secondary-dark);
673
+
674
+ background-color: var(--material);
675
+ color: var(--on-material);
676
+ :where(.tcn-typography) {
677
+ color: inherit;
678
+ }
629
679
  }
630
680
  }
631
681
 
@@ -640,27 +690,19 @@
640
690
  overflow: hidden;
641
691
  }
642
692
 
643
- :where(.tcn-typography) {
644
- color: inherit;
645
- }
646
-
647
693
  :where(.tcn-header) {
648
694
  min-height: 32px;
649
- --material: var(--material-secondary-dark);
650
- --on-material: 0, 0%, 100%;
651
- --action: var(--material-tan);
652
- --on-action: 0, 0%, 100%;
653
- background-color: hsl(var(--material));
654
- color: hsl(var(--on-material));
655
- }
656
695
 
657
- :where(.tcn-utility-bar) {
658
- --material: var(--material-secondary-dark);
659
- --on-material: 0, 0%, 100%;
660
- --action: var(--material-tan);
661
- --on-action: 0, 0%, 100%;
662
- background-color: hsl(var(--material));
663
- color: hsl(var(--on-material));
696
+ --material: var(--ergo-secondary-dark);
697
+ --on-material: var(--ergo-white);
698
+ --action: var(--ergo-tertiary);
699
+ --on-action: var(--ergo-secondary-dark);
700
+
701
+ background-color: var(--material);
702
+ color: var(--on-material);
703
+ :where(.tcn-typography) {
704
+ color: inherit;
705
+ }
664
706
  }
665
707
  }
666
708
 
@@ -684,13 +726,111 @@
684
726
  overflow: hidden;
685
727
 
686
728
  :where(.tcn-header) {
687
- /* TODO: This should be a variable */
688
- background-color: #ecf4fb;
729
+ min-height: 32px;
730
+
731
+ --material: var(--ergo-secondary-light);
732
+ --on-material: var(--ergo-accent-blue);
733
+ --action: var(--ergo-secondary);
734
+ --on-action: var(--ergo-white);
735
+
736
+ background-color: var(--material);
737
+ color: var(--on-material);
738
+ :where(.tcn-typography) {
739
+ color: inherit;
740
+ }
689
741
  }
742
+ }
690
743
 
691
- :where(.tcn-utility-bar) {
692
- /* TODO: This should be a variable */
693
- background-color: #ecf4fb;
744
+ /* SECTION */
745
+ .tcn-heading {
746
+ background-color: #f1f1f1;
747
+ padding-inline-start: 8px;
748
+ height: 30px;
749
+ z-index: 5;
750
+ }
751
+
752
+ .tcn-section > .tcn-heading {
753
+ background-color: #f2f4f6;
754
+ padding-inline-start: 8px;
755
+ color: rgb(51, 51, 51);
756
+ z-index: 4;
757
+ }
758
+
759
+ .tcn-section > .tcn-section > .tcn-heading {
760
+ background-color: #fff7f0;
761
+ padding-inline-start: 12px;
762
+ color: #395578;
763
+ z-index: 3;
764
+ }
765
+
766
+ .tcn-section > .tcn-section > .tcn-section > .tcn-heading {
767
+ background-color: #eef8ef;
768
+ padding-inline-start: 16px;
769
+ color: #395578;
770
+ z-index: 2;
771
+ }
772
+
773
+ .tcn-section > .tcn-section > .tcn-section > .tcn-section .tcn-heading {
774
+ background-color: #ecf4fb;
775
+ padding-inline-start: 20px;
776
+ color: #395578;
777
+ z-index: 1;
778
+ }
779
+
780
+ .tcn-section > :not(.tcn-heading, .tcn-section) {
781
+ padding-inline-start: 8px;
782
+ }
783
+
784
+ .tcn-section > .tcn-section > :not(.tcn-heading, .tcn-section) {
785
+ padding-inline-start: 12px;
786
+ }
787
+
788
+ .tcn-section > .tcn-section > .tcn-section > :not(.tcn-heading, .tcn-section) {
789
+ padding-inline-start: 16px;
790
+ }
791
+
792
+ .tcn-section
793
+ > .tcn-section
794
+ > .tcn-section
795
+ > .tcn-section
796
+ > :not(.tcn-heading, .tcn-section) {
797
+ padding-inline-start: 20px;
798
+ }
799
+
800
+ .tcn-base-carrot {
801
+ --carrot-size: 12px;
802
+ --carrot-triangle-height: calc(var(--carrot-size) / 2);
803
+ --carrot-triangle-width: var(--carrot-size);
804
+ --carrot-triangle-base: var(--carrot-triangle-height) solid transparent;
805
+ --carrot-triangle-peak: var(--carrot-triangle-width) solid var(--material);
806
+
807
+ width: 0;
808
+ height: 0;
809
+ flex-grow: 0;
810
+ display: inline-block;
811
+
812
+ &[data-direction="top"] {
813
+ border-bottom: var(--carrot-triangle-peak);
814
+ border-left: var(--carrot-triangle-base);
815
+ border-right: var(--carrot-triangle-base);
816
+ }
817
+
818
+ &[data-direction="bottom"] {
819
+ border-top: var(--carrot-triangle-peak);
820
+ border-left: var(--carrot-triangle-base);
821
+ border-right: var(--carrot-triangle-base);
822
+ }
823
+
824
+ &[data-direction="start"] {
825
+ border-right: var(--carrot-triangle-peak);
826
+ border-top: var(--carrot-triangle-base);
827
+ border-bottom: var(--carrot-triangle-base);
828
+ }
829
+
830
+ &[data-direction="end"] {
831
+ border-left: var(--carrot-triangle-peak);
832
+ border-top: var(--carrot-triangle-base);
833
+ border-bottom: var(--carrot-triangle-base);
694
834
  }
695
835
  }
696
836
  }