@hermes-ui/angular 0.1.7 → 0.2.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 (108) hide show
  1. package/README.md +6 -6
  2. package/button/_buttons.clarity.scss +80 -2
  3. package/button/_mixins.buttons.scss +44 -2
  4. package/button/_properties.buttons.scss +209 -247
  5. package/button/_variables.buttons.scss +22 -0
  6. package/fesm2022/hermes-ui-angular-accordion.mjs +2 -2
  7. package/fesm2022/hermes-ui-angular-accordion.mjs.map +1 -1
  8. package/fesm2022/hermes-ui-angular-addons-card-container.mjs +3 -3
  9. package/fesm2022/hermes-ui-angular-addons-card-container.mjs.map +1 -1
  10. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs +2 -2
  11. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs.map +1 -1
  12. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs +2 -2
  13. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs.map +1 -1
  14. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs +2 -2
  15. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs.map +1 -1
  16. package/fesm2022/hermes-ui-angular-addons-property-view.mjs +2 -2
  17. package/fesm2022/hermes-ui-angular-addons-property-view.mjs.map +1 -1
  18. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs +66 -66
  19. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs.map +1 -1
  20. package/fesm2022/hermes-ui-angular-addons-var.mjs +2 -2
  21. package/fesm2022/hermes-ui-angular-addons-var.mjs.map +1 -1
  22. package/fesm2022/hermes-ui-angular-addons-wizard.mjs +2 -2
  23. package/fesm2022/hermes-ui-angular-addons-wizard.mjs.map +1 -1
  24. package/fesm2022/hermes-ui-angular-button.mjs +2 -2
  25. package/fesm2022/hermes-ui-angular-button.mjs.map +1 -1
  26. package/fesm2022/hermes-ui-angular-data-datagrid.mjs +2 -2
  27. package/fesm2022/hermes-ui-angular-data-datagrid.mjs.map +1 -1
  28. package/fesm2022/hermes-ui-angular-data-stack-view.mjs +2 -2
  29. package/fesm2022/hermes-ui-angular-data-stack-view.mjs.map +1 -1
  30. package/fesm2022/hermes-ui-angular-data-tree-view.mjs +2 -2
  31. package/fesm2022/hermes-ui-angular-data-tree-view.mjs.map +1 -1
  32. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs +2 -2
  33. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs.map +1 -1
  34. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs +2 -2
  35. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs.map +1 -1
  36. package/fesm2022/hermes-ui-angular-forms-combobox.mjs +2 -2
  37. package/fesm2022/hermes-ui-angular-forms-combobox.mjs.map +1 -1
  38. package/fesm2022/hermes-ui-angular-forms-common.mjs +2 -2
  39. package/fesm2022/hermes-ui-angular-forms-common.mjs.map +1 -1
  40. package/fesm2022/hermes-ui-angular-forms-datalist.mjs +2 -2
  41. package/fesm2022/hermes-ui-angular-forms-datalist.mjs.map +1 -1
  42. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs +3 -3
  43. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs.map +1 -1
  44. package/fesm2022/hermes-ui-angular-forms-file-input.mjs +2 -2
  45. package/fesm2022/hermes-ui-angular-forms-file-input.mjs.map +1 -1
  46. package/fesm2022/hermes-ui-angular-forms-input.mjs +2 -2
  47. package/fesm2022/hermes-ui-angular-forms-input.mjs.map +1 -1
  48. package/fesm2022/hermes-ui-angular-forms-native-select.mjs +2 -2
  49. package/fesm2022/hermes-ui-angular-forms-native-select.mjs.map +1 -1
  50. package/fesm2022/hermes-ui-angular-forms-number-input.mjs +2 -2
  51. package/fesm2022/hermes-ui-angular-forms-number-input.mjs.map +1 -1
  52. package/fesm2022/hermes-ui-angular-forms-password.mjs +2 -2
  53. package/fesm2022/hermes-ui-angular-forms-password.mjs.map +1 -1
  54. package/fesm2022/hermes-ui-angular-forms-radio.mjs +2 -2
  55. package/fesm2022/hermes-ui-angular-forms-radio.mjs.map +1 -1
  56. package/fesm2022/hermes-ui-angular-forms-range.mjs +2 -2
  57. package/fesm2022/hermes-ui-angular-forms-range.mjs.map +1 -1
  58. package/fesm2022/hermes-ui-angular-forms-select.mjs +2 -2
  59. package/fesm2022/hermes-ui-angular-forms-select.mjs.map +1 -1
  60. package/fesm2022/hermes-ui-angular-forms-textarea.mjs +2 -2
  61. package/fesm2022/hermes-ui-angular-forms-textarea.mjs.map +1 -1
  62. package/fesm2022/hermes-ui-angular-icon.mjs +29 -29
  63. package/fesm2022/hermes-ui-angular-icon.mjs.map +1 -1
  64. package/fesm2022/hermes-ui-angular-layout-nav.mjs +2 -2
  65. package/fesm2022/hermes-ui-angular-layout-nav.mjs.map +1 -1
  66. package/fesm2022/hermes-ui-angular-layout-tabs.mjs +2 -2
  67. package/fesm2022/hermes-ui-angular-layout-tabs.mjs.map +1 -1
  68. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs +382 -28
  69. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs.map +1 -1
  70. package/fesm2022/hermes-ui-angular-modal.mjs +2 -2
  71. package/fesm2022/hermes-ui-angular-modal.mjs.map +1 -1
  72. package/fesm2022/hermes-ui-angular-popover-signpost.mjs +2 -2
  73. package/fesm2022/hermes-ui-angular-popover-signpost.mjs.map +1 -1
  74. package/fesm2022/hermes-ui-angular-stepper.mjs +2 -2
  75. package/fesm2022/hermes-ui-angular-stepper.mjs.map +1 -1
  76. package/fesm2022/hermes-ui-angular-timeline.mjs +2 -2
  77. package/fesm2022/hermes-ui-angular-timeline.mjs.map +1 -1
  78. package/fesm2022/hermes-ui-angular-toast.mjs +2 -2
  79. package/fesm2022/hermes-ui-angular-toast.mjs.map +1 -1
  80. package/fesm2022/hermes-ui-angular-utils.mjs +6 -0
  81. package/fesm2022/hermes-ui-angular-utils.mjs.map +1 -1
  82. package/fesm2022/hermes-ui-angular-wizard.mjs +2 -2
  83. package/fesm2022/hermes-ui-angular-wizard.mjs.map +1 -1
  84. package/forms/combobox/_combobox.clarity.scss +18 -4
  85. package/forms/combobox/_properties.combobox.scss +5 -5
  86. package/forms/styles/_input-group.clarity.scss +7 -0
  87. package/forms/styles/_mixins.forms.scss +12 -10
  88. package/forms/styles/_native-select.clarity.scss +17 -5
  89. package/forms/styles/_properties.forms.scss +29 -18
  90. package/forms/styles/_textarea.clarity.scss +4 -4
  91. package/forms/styles/_variables.forms.scss +6 -0
  92. package/layout/main-container/_properties.header.scss +44 -6
  93. package/layout/main-container/_variables.header.scss +11 -0
  94. package/layout/nav/_header.clarity.scss +14 -0
  95. package/layout/nav/_mixins.header.scss +55 -40
  96. package/layout/nav/_responsive-nav.clarity.scss +21 -10
  97. package/layout/vertical-nav/_properties.vertical-nav.scss +77 -27
  98. package/layout/vertical-nav/_variables.vertical-nav.scss +23 -0
  99. package/layout/vertical-nav/_vertical-nav.clarity.scss +418 -277
  100. package/package.json +1 -1
  101. package/types/hermes-ui-angular-addons-theme-builder.d.ts +2 -2
  102. package/types/hermes-ui-angular-addons-theme-builder.d.ts.map +1 -1
  103. package/types/hermes-ui-angular-icon.d.ts +3 -3
  104. package/types/hermes-ui-angular-icon.d.ts.map +1 -1
  105. package/types/hermes-ui-angular-layout-vertical-nav.d.ts +134 -10
  106. package/types/hermes-ui-angular-layout-vertical-nav.d.ts.map +1 -1
  107. package/types/hermes-ui-angular-utils.d.ts +12 -0
  108. package/types/hermes-ui-angular-utils.d.ts.map +1 -1
@@ -11,16 +11,32 @@
11
11
  @use '../../styles/core/tokens/variables.tokens' as tokens;
12
12
  @use '../main-container/variables.header' as header-variables;
13
13
 
14
- @mixin header-nav-link($horizontal-padding: density.$hermes-base-horizontal-offset-xl) {
14
+ // A control in the header band: a box of --hermes-header-control-size (32px) centered in the bar,
15
+ // not a cell that fills its whole height. Hover is a translucent white veil, the focus ring sits
16
+ // outside the box (there is room: the bar is taller than the control).
17
+ @mixin header-nav-link($horizontal-padding: tokens.$hermes-global-space-5) {
15
18
  display: inline-flex;
16
19
  align-items: center;
17
20
  text-decoration: none;
18
21
  gap: density.$hermes-base-gap-s;
19
- height: 100%;
20
- padding: density.$hermes-base-vertical-offset-m $horizontal-padding;
22
+ height: header-variables.$hermes-header-control-size;
23
+ min-height: 0;
24
+ margin: 0;
25
+ padding: 0 $horizontal-padding;
26
+ border-radius: header-variables.$hermes-header-control-radius;
27
+ transition: background-color header-variables.$hermes-header-transition;
28
+
29
+ &:hover:not(:disabled) {
30
+ background-color: header-variables.$hermes-header-highlight-color;
31
+ }
21
32
 
22
33
  &:focus {
23
- outline-offset: header-variables.$hermes-header-outline-offset; // So that the outline styles aren't hidden because of the browser
34
+ outline-offset: header-variables.$hermes-header-outline-offset;
35
+ }
36
+
37
+ &:focus-visible {
38
+ outline: tokens.$hermes-alias-object-border-width-200 solid header-variables.$hermes-header-focus-color;
39
+ outline-offset: tokens.$hermes-global-space-3;
24
40
  }
25
41
  }
26
42
  @mixin header-section-divider() {
@@ -58,16 +74,27 @@
58
74
  }
59
75
  }
60
76
  @mixin header-branding() {
77
+ // Brand and context in one block, not two loose children of the bar: the bar's `gap` is the
78
+ // distance between its blocks, and anything that belongs to the brand (version, module name)
79
+ // must sit closer to it than that.
61
80
  .branding {
62
81
  display: flex;
63
82
  flex: 0 0 auto;
83
+ align-items: center;
84
+ gap: tokens.$hermes-global-space-7;
64
85
  height: header-variables.$hermes-header-height;
65
- min-width: mixins.baselinePx(204);
66
- padding: 0 density.$hermes-base-horizontal-offset-xl;
86
+ padding: 0;
67
87
 
68
88
  & > a,
69
89
  & > .nav-link {
70
- @include header-nav-link(density.$hermes-base-horizontal-offset-m);
90
+ @include header-nav-link(0);
91
+
92
+ gap: tokens.$hermes-global-space-5;
93
+
94
+ // The brand is not a control: no veil on hover.
95
+ &:hover {
96
+ background-color: transparent;
97
+ }
71
98
  }
72
99
 
73
100
  .hermes-icon,
@@ -141,11 +168,6 @@
141
168
  @include mixins.generate-typography-token('BODY-14-SB-EXP');
142
169
  }
143
170
  }
144
-
145
- &:focus {
146
- // So that the outline styles aren't hidden because of the browser
147
- outline-offset: header-variables.$hermes-header-outline-offset;
148
- }
149
171
  }
150
172
  }
151
173
  }
@@ -154,12 +176,11 @@
154
176
  display: flex;
155
177
  flex: 0 0 auto;
156
178
  align-items: center;
179
+ // Neighbouring links are boxes with a hover veil; the gap is what tells one from the next,
180
+ // so the section dividers of the old header are gone.
181
+ gap: tokens.$hermes-global-space-3;
157
182
  position: relative;
158
183
 
159
- &::before {
160
- @include header-section-divider();
161
- }
162
-
163
184
  .nav-link {
164
185
  &:first-of-type,
165
186
  &:last-of-type {
@@ -173,28 +194,21 @@
173
194
  .header-actions {
174
195
  flex: 1 0 auto;
175
196
  display: flex;
197
+ align-items: center;
176
198
  justify-content: flex-end;
177
-
178
- & > *:not(.dropdown)::before,
179
- & > .dropdown::before {
180
- @include header-section-divider();
181
- }
199
+ // 16px, not the 8px of the rest of the UI: the neighbours are loose glyphs with no box or
200
+ // label to delimit them, and at 8px they read as a single block.
201
+ gap: tokens.$hermes-global-space-7;
182
202
 
183
203
  // Reduce nesting from 5 to 3 at the most
184
204
  & > .dropdown {
185
- padding: density.$hermes-base-vertical-offset-m density.$hermes-base-horizontal-offset-m;
205
+ padding: 0;
186
206
 
187
207
  & > .dropdown-toggle {
188
208
  position: relative;
189
209
 
190
210
  @include header-nav-appearance();
191
211
  @include header-nav-link();
192
-
193
- padding: 0 density.$hermes-base-horizontal-offset-m;
194
-
195
- &:focus {
196
- outline-offset: initial;
197
- }
198
212
  }
199
213
 
200
214
  .dropdown-toggle.nav-icon {
@@ -206,9 +220,10 @@
206
220
  }
207
221
  }
208
222
 
209
- // Pull the dropdown menus of all dropdowns up to compensate for the height of the header.
223
+ // The toggle is centered in the bar, so the menu hangs from the bar's bottom edge, not from
224
+ // the toggle's: push it down by the room above and below the control.
210
225
  .dropdown-menu {
211
- margin-top: calc(-1 * tokens.$hermes-global-space-5);
226
+ margin-top: calc((#{header-variables.$hermes-header-height} - #{header-variables.$hermes-header-control-size}) / 2);
212
227
  margin-right: tokens.$hermes-global-space-5;
213
228
  // TODO: As of 0.10.0 the dropdown-menu inside header without hermesIfOpen directive (legacy)
214
229
  // will create empty space beyond the .main-container if the right isn't set to zero.
@@ -231,10 +246,6 @@
231
246
 
232
247
  @include header-nav-appearance();
233
248
 
234
- &::before {
235
- @include header-section-divider();
236
- }
237
-
238
249
  & > .nav-icon {
239
250
  margin: 0 tokens.$hermes-global-space-4 mixins.baselinePx(3) tokens.$hermes-global-space-9;
240
251
  }
@@ -269,12 +280,15 @@
269
280
  }
270
281
  }
271
282
 
283
+ // The field lives inside the band and uses its colors: a white input in the middle of a dark
284
+ // bar is a hole. The outline is what delimits it, as a translucent veil.
272
285
  input[type='text'] {
273
- border: none;
274
- background: none;
286
+ border: tokens.$hermes-alias-object-border-width-100 solid header-variables.$hermes-header-search-border-color;
287
+ background: header-variables.$hermes-header-search-bg-color;
275
288
  color: header-variables.$hermes-header-search-input-font-color;
276
- border-radius: density.$hermes-base-border-radius-s;
277
- height: tokens.$hermes-global-space-11;
289
+ border-radius: header-variables.$hermes-header-control-radius;
290
+ height: header-variables.$hermes-header-control-size;
291
+ transition: border-color header-variables.$hermes-header-transition;
278
292
  padding: 0 0 0 calc(header-variables.$hermes-header-search-icon-size + 2 * header-variables.$hermes-header-search-gap);
279
293
  vertical-align: middle;
280
294
 
@@ -302,13 +316,14 @@
302
316
  }
303
317
 
304
318
  &:focus-visible {
305
- outline: none;
319
+ outline: tokens.$hermes-alias-object-border-width-200 solid header-variables.$hermes-header-focus-color;
320
+ outline-offset: tokens.$hermes-global-space-3;
306
321
  border: header-variables.$hermes-header-search-border-active;
307
322
  }
308
323
 
309
324
  &:focus,
310
325
  &:active {
311
- background: none;
326
+ background: header-variables.$hermes-header-search-bg-color;
312
327
  }
313
328
  }
314
329
  }
@@ -129,7 +129,13 @@
129
129
  background: none;
130
130
  cursor: pointer;
131
131
 
132
- @include mixins.equilateral(header-variables.$hermes-header-height);
132
+ // A control box centered in the bar (not a header-tall cell), like the other header
133
+ // controls: veil on hover, ring outside on focus.
134
+ @include mixins.equilateral(header-variables.$hermes-header-control-size);
135
+
136
+ flex: none;
137
+ border-radius: header-variables.$hermes-header-control-radius;
138
+ transition: background-color header-variables.$hermes-header-transition;
133
139
 
134
140
  // TODO: replace `hamburger` and `dots` to use HERMES-ICON `bars` and `ellipsis-vertical` respectively.
135
141
  // 2px to vertically align the trigger lines. display flex was not working on all browsers.
@@ -137,9 +143,13 @@
137
143
  text-align: center;
138
144
  white-space: nowrap;
139
145
 
140
- &:focus {
141
- // So that the outline styles aren't hidden because of the browser
142
- outline-offset: calc(-1 * tokens.$hermes-global-space-4);
146
+ &:hover {
147
+ background-color: header-variables.$hermes-header-highlight-color;
148
+ }
149
+
150
+ &:focus-visible {
151
+ outline: tokens.$hermes-alias-object-border-width-200 solid header-variables.$hermes-header-focus-color;
152
+ outline-offset: tokens.$hermes-global-space-3;
143
153
  }
144
154
 
145
155
  @include header-mixins.header-nav-appearance();
@@ -224,10 +234,6 @@
224
234
  .main-container {
225
235
  .header-overflow-trigger {
226
236
  position: relative;
227
-
228
- &::after {
229
- @include header-mixins.header-section-divider();
230
- }
231
237
  }
232
238
 
233
239
  .header {
@@ -235,11 +241,15 @@
235
241
  max-width: mixins.baselinePx(240);
236
242
  min-width: 0;
237
243
  overflow: hidden;
244
+
245
+ // The block clips its content, so the ring goes inside the link instead of outside.
246
+ & > a:focus-visible,
247
+ & > .nav-link:focus-visible {
248
+ outline-offset: calc(-1 * #{tokens.$hermes-global-space-3});
249
+ }
238
250
  }
239
251
 
240
252
  .header-hamburger-trigger + .branding {
241
- padding-left: 0;
242
- margin-left: calc(-1 * density.$hermes-base-horizontal-offset-m);
243
253
 
244
254
  //TODO: deprecate .hermes-icon, .logo
245
255
  .hermes-icon,
@@ -263,6 +273,7 @@
263
273
  &.open-overflow-menu {
264
274
  .header {
265
275
  .header-backdrop {
276
+ display: block;
266
277
  position: fixed;
267
278
  inset: 0;
268
279
  background: tokens.$hermes-alias-object-overlay-backdrop-background;
@@ -14,33 +14,50 @@
14
14
  @include mixins.exports('vertical-nav.properties') {
15
15
  @include mixins.root-or-host() {
16
16
  --hermes-vertical-nav-item-active-font-weight: #{tokens.$hermes-alias-typography-font-weight-semibold};
17
- --hermes-vertical-nav-item-top-level-font-weight: #{tokens.$hermes-alias-typography-font-weight-semibold};
17
+ --hermes-vertical-nav-item-top-level-font-weight: #{tokens.$hermes-alias-typography-font-weight-medium};
18
18
  --hermes-vertical-nav-header-font-weight: #{tokens.$hermes-alias-typography-font-weight-semibold};
19
- --hermes-vertical-nav-trigger-divider-border-width: #{tokens.$hermes-global-space-1};
20
- // shadcn sidebar: item ativo/hover vira um pill arredondado (rounded-md),
21
- // e a lista de itens ganha um respiro (inset) da borda do container em
22
- // vez de ir de ponta a ponta.
19
+ --hermes-vertical-nav-trigger-divider-border-width: #{tokens.$hermes-alias-object-border-width-100};
20
+
21
+ // Item de lista de navegação: raio pequeno ("mora dentro de algo") e respiro de 8px entre a
22
+ // borda da coluna e os itens, em vez de itens de ponta a ponta.
23
23
  --hermes-vertical-nav-item-border-radius: #{mixins.baselinePx(6)};
24
24
  --hermes-vertical-nav-content-inset: #{mixins.baselinePx(8)};
25
25
 
26
+ // Trilho de largura. Expandida mostra ícone + texto; compacta é só a coluna de ícones. O piso
27
+ // e o teto valem para a coluna aberta: a largura medida (--hermes-vertical-nav-measured-width,
28
+ // escrita pelo componente) cresce entre eles conforme o rótulo mais comprido à vista.
29
+ --hermes-vertical-nav-width: #{mixins.baselinePx(240)};
30
+ --hermes-vertical-nav-max-width: #{mixins.baselinePx(360)};
31
+ // Respiro da coluna (8) + do item (8) + glifo + os mesmos 16 de volta. É o que deixa o ícone no
32
+ // MESMO x nos dois estados: a transição não o arrasta pela coluna.
33
+ --hermes-vertical-nav-rail-width: calc(var(--hermes-vertical-nav-icon-size) + #{mixins.baselinePx(32)});
34
+ --hermes-vertical-nav-transition-duration: 0.2s;
35
+
36
+ // Mesma escala que a coluna sempre teve (corpo de 14px, glifo `icon-size-s`): a referência usa
37
+ // 16/24, que no Hermes fica acima do resto da interface.
38
+ --hermes-vertical-nav-item-font-size: #{density.$hermes-base-typography-font-size-default};
39
+ --hermes-vertical-nav-child-font-size: #{density.$hermes-base-typography-font-size-default};
40
+ --hermes-vertical-nav-child-icon-size: var(--hermes-vertical-nav-icon-size);
41
+ --hermes-vertical-nav-item-gap: #{mixins.baselinePx(12)};
42
+ --hermes-vertical-nav-child-gap: #{mixins.baselinePx(4)};
43
+ // Recuo do submenu: o menor que ainda se lê. Cada pixel é cobrado da largura da coluna, porque
44
+ // o rótulo mais fundo tem que caber.
45
+ --hermes-vertical-nav-child-indent: #{mixins.baselinePx(4)};
46
+ --hermes-vertical-nav-child-padding-start: #{mixins.baselinePx(8)};
47
+
26
48
  &,
27
49
  & [hermes-density] {
28
50
  // Vertical Nav - Icons
29
51
  --hermes-vertical-nav-icon-size: #{density.$hermes-base-icon-size-s};
30
52
  --hermes-vertical-nav-icon-right-margin: #{density.$hermes-base-horizontal-offset-s};
31
53
  --hermes-vertical-nav-collapsed-caret-size: #{density.$hermes-base-icon-size-2xl};
54
+ --hermes-vertical-nav-caret-size: #{density.$hermes-base-icon-size-s};
32
55
 
33
- // Vertical Nav - Align
34
- --hermes-vertical-nav-item-padding: #{density.$hermes-base-vertical-offset-m} #{density.$hermes-base-horizontal-offset-m}
35
- #{density.$hermes-base-vertical-offset-m} #{density.$hermes-base-horizontal-offset-xl};
36
- // Antes compensava a ausência de ícone com um padding-left gigante
37
- // (calc com o tamanho do ícone) pra alinhar o texto. Agora quem faz
38
- // esse trabalho é o indent + linha vertical de .nav-group-children
39
- // (ver _vertical-nav.clarity.scss) — aqui só o padding normal do item.
40
- --hermes-vertical-nav-item-child-padding: #{density.$hermes-base-vertical-offset-m}
41
- #{density.$hermes-base-horizontal-offset-m};
42
- --hermes-vertical-nav-item-height: #{density.$hermes-base-row-height-m};
43
- --hermes-vertical-nav-min-width: #{density.$hermes-base-layout-space-3xl};
56
+ // Vertical Nav - Align. Linha densa (32px): é lista de navegação, não um controle isolado.
57
+ --hermes-vertical-nav-item-padding: #{mixins.baselinePx(8)};
58
+ --hermes-vertical-nav-item-child-padding: #{mixins.baselinePx(8)};
59
+ --hermes-vertical-nav-item-height: #{mixins.baselinePx(32)};
60
+ --hermes-vertical-nav-min-width: var(--hermes-vertical-nav-rail-width);
44
61
  --hermes-vertical-nav-toggle-button-size: #{density.$hermes-base-row-height-m};
45
62
 
46
63
  // Vertical Nav - Header
@@ -52,20 +69,49 @@
52
69
  & [hermes-theme] {
53
70
  /* Vertical Nav */
54
71
  --hermes-vertical-nav-divider-color: #{tokens.$hermes-alias-object-border-color};
55
- --hermes-vertical-nav-icon-active-color: #{tokens.$hermes-alias-object-interaction-color};
56
- --hermes-vertical-nav-item-color: #{tokens.$hermes-alias-object-interaction-color};
57
- --hermes-vertical-nav-item-active-color: #{tokens.$hermes-alias-object-interaction-color-active};
58
72
 
59
- // Selected background colors
60
- --hermes-vertical-nav-selected-bg-color: var(--hermes-alias-object-interaction-background-shade-selected);
61
- --hermes-vertical-nav-selected-hover-bg-color: var(--hermes-alias-object-interaction-background-shade-selected-hover);
62
- --hermes-vertical-nav-selected-active-bg-color: var(--hermes-alias-object-interaction-background-shade-selected-active);
73
+ // Texto neutro de alto contraste; quem carrega a cor da marca é o glifo. Segue só claro/escuro
74
+ // — a família escolhida (ver o eixo `primary` do preset, no addon `theme-builder`) nunca muda
75
+ // o fundo nem o texto da coluna, só o acento (glifo, link, seleção). Já existiu aqui um
76
+ // segundo eixo (`tertiary`) tingindo o fundo por família, lido errado de um comentário do
77
+ // app de referência: aquele token é cor categórica de gráfico lá, não fundo de navegação —
78
+ // a navegação de lá usa a mesma superfície do app, do jeito que está feito abaixo.
79
+ --hermes-vertical-nav-item-color: #{tokens.$hermes-alias-typography-color-400};
80
+ --hermes-vertical-nav-item-active-color: #{tokens.$hermes-alias-typography-color-400};
81
+ --hermes-vertical-nav-active-color: #{tokens.$hermes-alias-typography-color-400};
82
+ --hermes-vertical-nav-child-icon-color: #{tokens.$hermes-alias-typography-color-300};
83
+
84
+ // Glifo na cor da marca em todos os itens: é ele que dá à coluna a leitura de navegação.
85
+ --hermes-vertical-nav-icon-color: #{tokens.$hermes-alias-object-interaction-color};
86
+ --hermes-vertical-nav-icon-active-color: #{tokens.$hermes-alias-object-interaction-color-active};
87
+
88
+ // Véu da cor da marca, e não um degrau neutro: o degrau neutro vizinho vale, em vários temas,
89
+ // a própria cor da barra, e o item em hover pintava o que já estava lá.
90
+ --hermes-vertical-nav-hover-bg-color: color-mix(
91
+ in srgb,
92
+ #{tokens.$hermes-alias-object-interaction-color} 14%,
93
+ transparent
94
+ );
95
+ --hermes-vertical-nav-active-bg-color: color-mix(
96
+ in srgb,
97
+ #{tokens.$hermes-alias-object-interaction-color} 26%,
98
+ transparent
99
+ );
100
+ // O selecionado é só a tinta, sem faixa lateral. O que o distingue do hover é o peso do texto
101
+ // e a cor do glifo; sob o ponteiro ele sobe para o véu forte.
102
+ --hermes-vertical-nav-selected-bg-color: var(--hermes-vertical-nav-hover-bg-color);
103
+ --hermes-vertical-nav-selected-hover-bg-color: var(--hermes-vertical-nav-active-bg-color);
104
+ --hermes-vertical-nav-selected-active-bg-color: var(--hermes-vertical-nav-active-bg-color);
63
105
 
64
- // NOT selected background colors
65
106
  --hermes-vertical-nav-bg-color: var(--hermes-alias-object-interaction-background-shade);
66
- --hermes-vertical-nav-hover-bg-color: var(--hermes-alias-object-interaction-background-shade-hover);
67
- --hermes-vertical-nav-active-bg-color: var(--hermes-alias-object-interaction-background-shade-active);
68
- --hermes-vertical-nav-active-color: #{tokens.$hermes-alias-object-interaction-color-active};
107
+
108
+ // Sombra só quando a coluna está POR CIMA do conteúdo e aberta: é a informação de que há duas
109
+ // camadas. Em repouso, com a largura da trilha, não há.
110
+ --hermes-vertical-nav-overlay-shadow: #{mixins.baselinePx(4)} 0 #{mixins.baselinePx(12)} 0
111
+ color-mix(in srgb, #{tokens.$hermes-alias-typography-color-400} 20%, transparent);
112
+ // Acima do conteúdo da página (datagrids sticky chegam a 502) e abaixo da gaveta responsiva
113
+ // (1038) e dos menus suspensos (1050).
114
+ --hermes-vertical-nav-overlay-z-index: 1000;
69
115
 
70
116
  // Vertical Nav - Trigger
71
117
  --hermes-vertical-nav-toggle-icon-color: #{tokens.$hermes-alias-object-interaction-color};
@@ -73,6 +119,10 @@
73
119
  --hermes-vertical-nav-toggle-icon-active-color: #{tokens.$hermes-alias-object-interaction-color-active};
74
120
  --hermes-vertical-nav-toggle-icon-disabled-color: #{tokens.$hermes-alias-object-interaction-color-disabled};
75
121
  --hermes-vertical-nav-trigger-divider-border-color: #{tokens.$hermes-alias-object-border-color};
122
+
123
+ // Vertical Nav - Footer
124
+ --hermes-vertical-nav-footer-text-color: #{tokens.$hermes-alias-typography-color-300};
125
+ --hermes-vertical-nav-menu-bg-color: #{tokens.$hermes-alias-object-container-background};
76
126
  }
77
127
  }
78
128
  }
@@ -52,3 +52,26 @@ $hermes-vertical-nav-trigger-divider-border-width: var(--hermes-vertical-nav-tri
52
52
  // Vertical Nav - Header
53
53
  $hermes-vertical-nav-header-font-weight: var(--hermes-vertical-nav-header-font-weight) !default;
54
54
  $hermes-vertical-nav-header-padding: var(--hermes-vertical-nav-header-padding) !default;
55
+
56
+ // Vertical Nav - Layout
57
+ $hermes-vertical-nav-width: var(--hermes-vertical-nav-width) !default;
58
+ $hermes-vertical-nav-max-width: var(--hermes-vertical-nav-max-width) !default;
59
+ $hermes-vertical-nav-rail-width: var(--hermes-vertical-nav-rail-width) !default;
60
+ $hermes-vertical-nav-transition-duration: var(--hermes-vertical-nav-transition-duration) !default;
61
+ $hermes-vertical-nav-overlay-shadow: var(--hermes-vertical-nav-overlay-shadow) !default;
62
+
63
+ // Vertical Nav - Items
64
+ $hermes-vertical-nav-icon-color: var(--hermes-vertical-nav-icon-color) !default;
65
+ $hermes-vertical-nav-child-icon-color: var(--hermes-vertical-nav-child-icon-color) !default;
66
+ $hermes-vertical-nav-child-icon-size: var(--hermes-vertical-nav-child-icon-size) !default;
67
+ $hermes-vertical-nav-caret-size: var(--hermes-vertical-nav-caret-size) !default;
68
+ $hermes-vertical-nav-item-font-size: var(--hermes-vertical-nav-item-font-size) !default;
69
+ $hermes-vertical-nav-child-font-size: var(--hermes-vertical-nav-child-font-size) !default;
70
+ $hermes-vertical-nav-item-gap: var(--hermes-vertical-nav-item-gap) !default;
71
+ $hermes-vertical-nav-child-gap: var(--hermes-vertical-nav-child-gap) !default;
72
+ $hermes-vertical-nav-child-indent: var(--hermes-vertical-nav-child-indent) !default;
73
+ $hermes-vertical-nav-child-padding-start: var(--hermes-vertical-nav-child-padding-start) !default;
74
+
75
+ // Vertical Nav - Footer
76
+ $hermes-vertical-nav-footer-text-color: var(--hermes-vertical-nav-footer-text-color) !default;
77
+ $hermes-vertical-nav-menu-bg-color: var(--hermes-vertical-nav-menu-bg-color) !default;