@1doc/1ds-react 2.14.0 → 2.15.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 (49) hide show
  1. package/CHANGELOG.md +51 -67
  2. package/dist/components/AILabel/AILabel.css +1 -1
  3. package/dist/components/Alert/Alert.css +1 -1
  4. package/dist/components/AppShell/AppShell.css +4 -0
  5. package/dist/components/AttachmentCard/AttachmentCard.css +2 -2
  6. package/dist/components/Avatar/Avatar.d.ts +8 -3
  7. package/dist/components/Avatar/Avatar.js +28 -4
  8. package/dist/components/BottomNavigation/BottomNavigation.css +2 -2
  9. package/dist/components/BottomSheet/BottomSheet.css +2 -2
  10. package/dist/components/Box/Box.css +3 -3
  11. package/dist/components/Card/Card.css +5 -5
  12. package/dist/components/Chart/Chart.css +1 -1
  13. package/dist/components/Coachmark/Coachmark.css +1 -1
  14. package/dist/components/Combobox/Combobox.css +1 -1
  15. package/dist/components/ConfirmDialog/ConfirmDialog.css +1 -1
  16. package/dist/components/DatePicker/DatePicker.css +1 -1
  17. package/dist/components/Drawer/Drawer.css +2 -2
  18. package/dist/components/Dropdown/Dropdown.css +1 -1
  19. package/dist/components/Dropdown/Dropdown.d.ts +8 -0
  20. package/dist/components/Dropdown/Dropdown.js +2 -0
  21. package/dist/components/EmptyState/EmptyState.css +12 -0
  22. package/dist/components/EmptyState/EmptyState.d.ts +3 -0
  23. package/dist/components/EmptyState/EmptyState.js +1 -0
  24. package/dist/components/Kanban/Kanban.css +2 -2
  25. package/dist/components/Kanban/KanbanCard.css +2 -2
  26. package/dist/components/List/List.css +37 -1
  27. package/dist/components/List/List.d.ts +3 -0
  28. package/dist/components/List/List.js +6 -2
  29. package/dist/components/List/ListItem.d.ts +9 -0
  30. package/dist/components/List/ListItem.js +5 -1
  31. package/dist/components/Modal/Modal.css +3 -4
  32. package/dist/components/MultiSelect/MultiSelect.css +1 -1
  33. package/dist/components/OrgChart/OrgChart.css +2 -2
  34. package/dist/components/PhoneInput/PhoneInput.css +2 -2
  35. package/dist/components/Popover/Popover.css +1 -1
  36. package/dist/components/SegmentedControl/SegmentedControl.css +1 -1
  37. package/dist/components/Select/Select.css +1 -1
  38. package/dist/components/StatCard/StatCard.css +42 -3
  39. package/dist/components/Switch/Switch.css +2 -2
  40. package/dist/components/Text/Text.d.ts +6 -0
  41. package/dist/components/TimePicker/TimePicker.css +1 -1
  42. package/dist/components/Toast/Toast.css +2 -2
  43. package/dist/components/Tooltip/Tooltip.css +20 -3
  44. package/dist/teste/PedidosMatheus2.test.d.ts +1 -0
  45. package/dist/teste/PedidosMatheus2.test.js +82 -0
  46. package/dist/teste/SegmentedControlSuperficie.test.js +1 -1
  47. package/package.json +3 -3
  48. package/src/teste/PedidosMatheus2.test.tsx +102 -0
  49. package/src/teste/SegmentedControlSuperficie.test.tsx +1 -1
@@ -1,23 +1,47 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import './Avatar.css';
4
+ import { useState, useEffect } from "react";
4
5
  function Avatar(props) {
6
+ const [imagemFalhou, setImagemFalhou] = useState(() => false);
7
+ function mostraFoto() {
8
+ return !!props.src && !imagemFalhou;
9
+ }
10
+ function iniciais() {
11
+ const partes = (props.name || "").trim().split(/\s+/).filter(Boolean);
12
+ if (partes.length === 0)
13
+ return "";
14
+ const primeira = partes[0].charAt(0);
15
+ const ultima = partes.length > 1 ? partes[partes.length - 1].charAt(0) : "";
16
+ return (primeira + ultima).toUpperCase();
17
+ }
18
+ function aoFalhar(event) {
19
+ setImagemFalhou(true);
20
+ if (props.onError)
21
+ props.onError(event);
22
+ }
5
23
  function classes() {
6
24
  return [
7
25
  "umds-avatar",
8
26
  `umds-avatar--${props.size || "md"}`,
9
- `umds-avatar--${props.type || (props.src ? "photo" : "letter")}`,
27
+ `umds-avatar--${props.type || (props.src && !imagemFalhou ? "photo" : "letter")}`,
10
28
  props.className,
11
29
  ]
12
30
  .filter(Boolean)
13
31
  .join(" ");
14
32
  }
15
33
  function computedRole() {
16
- return props.ariaLabel || props.src ? "img" : undefined;
34
+ return props.ariaLabel || props.src || props.name ? "img" : undefined;
17
35
  }
18
36
  function computedAriaLabel() {
19
- return props.ariaLabel || (props.src && props.alt ? props.alt : undefined);
37
+ return (props.ariaLabel ||
38
+ (props.src && props.alt ? props.alt : undefined) ||
39
+ props.name ||
40
+ undefined);
20
41
  }
21
- return (_jsxs("div", { title: props.title, role: computedRole(), "aria-label": computedAriaLabel(), className: classes(), children: [props.src ? (_jsx("img", { className: "umds-avatar__image", src: props.src, alt: props.alt || "", onError: (event) => props.onError && props.onError() })) : null, !props.src ? _jsx(_Fragment, { children: props.children }) : null] }));
42
+ useEffect(() => {
43
+ setImagemFalhou(false);
44
+ }, [props.src]);
45
+ return (_jsxs("div", { title: props.title, role: computedRole(), "aria-label": computedAriaLabel(), className: classes(), children: [mostraFoto() ? (_jsx("img", { className: "umds-avatar__image", src: props.src, alt: props.alt || "", onError: (event) => aoFalhar(event) })) : null, !mostraFoto() ? (_jsx(_Fragment, { children: props.name ? _jsx(_Fragment, { children: iniciais() }) : _jsx(_Fragment, { children: props.children }) })) : null] }));
22
46
  }
23
47
  export default Avatar;
@@ -104,7 +104,7 @@
104
104
  box-sizing: border-box;
105
105
  padding-bottom: var(--umds-primitive-spacing-quarck); /* 4px */
106
106
  border-top: none;
107
- box-shadow: var(--umds-semantic-shadow-md);
107
+ box-shadow: var(--umds-semantic-shadow-top-sm);
108
108
  /* o disco ultrapassa o topo da barra: sem isto ele seria recortado */
109
109
  overflow: visible;
110
110
  }
@@ -131,7 +131,7 @@
131
131
  espaço, para o rótulo não descer junto e a linha de rótulos ficar reta. */
132
132
  margin-top: -12px;
133
133
  margin-bottom: -4px;
134
- box-shadow: var(--umds-semantic-shadow-sm);
134
+ box-shadow: var(--umds-semantic-shadow-bottom-sm);
135
135
  flex-shrink: 0;
136
136
  }
137
137
 
@@ -45,7 +45,7 @@
45
45
  background-color: var(--umds-semantic-color-background-elevated);
46
46
  border-top-left-radius: var(--umds-primitive-border-radius-sm);
47
47
  border-top-right-radius: var(--umds-primitive-border-radius-sm);
48
- box-shadow: var(--umds-semantic-shadow-lg);
48
+ box-shadow: var(--umds-semantic-shadow-top-sm);
49
49
  outline: none;
50
50
  animation: umds-bottomsheet-entrada var(--umds-semantic-motion-duration-base)
51
51
  var(--umds-semantic-motion-easing-standard);
@@ -153,7 +153,7 @@
153
153
  margin: 0 calc(-1 * var(--umds-primitive-spacing-xxxs))
154
154
  calc(-1 * var(--umds-primitive-spacing-xxxs));
155
155
  background-color: var(--umds-semantic-color-background-elevated);
156
- box-shadow: var(--umds-semantic-shadow-md);
156
+ box-shadow: var(--umds-semantic-shadow-top-sm);
157
157
  flex-shrink: 0;
158
158
  }
159
159
 
@@ -96,9 +96,9 @@
96
96
  .umds-box--radius-circular { border-radius: var(--umds-primitive-border-radius-circular); }
97
97
 
98
98
  /* ── Elevação ── */
99
- .umds-box--shadow-level1 { box-shadow: var(--umds-primitive-shadow-level-1); }
100
- .umds-box--shadow-level2 { box-shadow: var(--umds-primitive-shadow-level-2); }
101
- .umds-box--shadow-level3 { box-shadow: var(--umds-primitive-shadow-level-3); }
99
+ .umds-box--shadow-level1 { box-shadow: var(--umds-semantic-shadow-bottom-md); }
100
+ .umds-box--shadow-level2 { box-shadow: var(--umds-semantic-shadow-bottom-lg); }
101
+ .umds-box--shadow-level3 { box-shadow: var(--umds-semantic-shadow-bottom-xl); }
102
102
 
103
103
  /* ── Layout flex (direction, gap, align, justify, wrap) ──
104
104
  Liga quando qualquer uma das props é passada; mesmos nomes e valores do Stack. */
@@ -15,10 +15,10 @@
15
15
 
16
16
  /* ── Sombras (tokens semânticos oficiais — TOKEN-MAP §3b) ── */
17
17
  .umds-card--shadow-none { box-shadow: none; }
18
- .umds-card--shadow-xs { box-shadow: var(--umds-semantic-shadow-xs); }
19
- .umds-card--shadow-sm { box-shadow: var(--umds-semantic-shadow-sm); }
20
- .umds-card--shadow-md { box-shadow: var(--umds-semantic-shadow-md); }
21
- .umds-card--shadow-lg { box-shadow: var(--umds-semantic-shadow-lg); }
18
+ .umds-card--shadow-xs { box-shadow: var(--umds-semantic-shadow-bottom-xs); }
19
+ .umds-card--shadow-sm { box-shadow: var(--umds-semantic-shadow-bottom-sm); }
20
+ .umds-card--shadow-md { box-shadow: var(--umds-semantic-shadow-bottom-md); }
21
+ .umds-card--shadow-lg { box-shadow: var(--umds-semantic-shadow-bottom-lg); }
22
22
 
23
23
  /* ── Padding ── */
24
24
  .umds-card--padding-none { padding: 0; }
@@ -37,7 +37,7 @@
37
37
 
38
38
  .umds-card--hoverable:hover {
39
39
  border-color: var(--umds-semantic-color-primary-medium); /* #6393DB */
40
- box-shadow: var(--umds-semantic-shadow-md); /* protótipo --shadow-md */
40
+ box-shadow: var(--umds-semantic-shadow-bottom-md); /* protótipo --shadow-md */
41
41
  transform: translateY(-1px);
42
42
  }
43
43
 
@@ -215,7 +215,7 @@
215
215
  border: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
216
216
  border-radius: var(--umds-primitive-border-radius-sm);
217
217
  background-color: var(--umds-semantic-color-neutral-light-pure);
218
- box-shadow: var(--umds-primitive-shadow-level-2);
218
+ box-shadow: var(--umds-semantic-shadow-bottom-lg);
219
219
  font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
220
220
  line-height: var(--umds-primitive-font-line-height-lg);
221
221
  white-space: nowrap;
@@ -64,7 +64,7 @@
64
64
  background: var(--umds-semantic-color-background-white);
65
65
  color: var(--umds-semantic-color-neutral-dark-pure);
66
66
  border-radius: var(--umds-primitive-border-radius-md); /* 16px */
67
- box-shadow: var(--umds-primitive-shadow-level-3);
67
+ box-shadow: var(--umds-semantic-shadow-bottom-xl);
68
68
  outline: none;
69
69
  }
70
70
 
@@ -231,7 +231,7 @@
231
231
  background-color: var(--umds-semantic-color-background-elevated);
232
232
  border: 1px solid var(--umds-semantic-color-neutral-light-down);
233
233
  border-radius: var(--umds-primitive-border-radius-sm);
234
- box-shadow: var(--umds-semantic-shadow-md);
234
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
235
235
  z-index: var(--umds-semantic-layer-popover);
236
236
  max-height: 300px; /* literal, igual ao Select — candidato a novo token */
237
237
  display: flex;
@@ -39,7 +39,7 @@
39
39
  .umds-confirm-dialog {
40
40
  background: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
41
41
  border-radius: var(--umds-primitive-border-radius-sm); /* 8px universal (rodada ago/2026) — era md */
42
- box-shadow: var(--umds-semantic-shadow-lg); /* protótipo --shadow-lg */
42
+ box-shadow: var(--umds-semantic-shadow-center-xl); /* modal: mesma sombra do Modal */
43
43
  width: 100%;
44
44
  max-width: 440px;
45
45
  overflow: hidden;
@@ -178,7 +178,7 @@
178
178
  background: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
179
179
  border: 1px solid var(--umds-semantic-color-neutral-light-down); /* #D5D5D5 */
180
180
  border-radius: var(--umds-primitive-border-radius-sm); /* 8px */
181
- box-shadow: var(--umds-semantic-shadow-md);
181
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
182
182
  padding: var(--umds-primitive-spacing-xxxs); /* 16px */
183
183
  gap: var(--umds-primitive-spacing-xxxs); /* 16px */
184
184
  box-sizing: border-box;
@@ -71,7 +71,7 @@
71
71
  box-sizing: border-box;
72
72
  padding: var(--umds-primitive-spacing-xxxs);
73
73
  background-color: var(--umds-semantic-color-background-elevated);
74
- box-shadow: var(--umds-semantic-shadow-lg);
74
+ box-shadow: var(--umds-semantic-shadow-bottom-lg);
75
75
  outline: none;
76
76
  }
77
77
 
@@ -189,7 +189,7 @@
189
189
  margin: 0 calc(-1 * var(--umds-primitive-spacing-xxxs))
190
190
  calc(-1 * var(--umds-primitive-spacing-xxxs));
191
191
  background-color: var(--umds-semantic-color-background-elevated);
192
- box-shadow: var(--umds-semantic-shadow-md);
192
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
193
193
  flex-shrink: 0;
194
194
  }
195
195
 
@@ -35,7 +35,7 @@
35
35
  background: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
36
36
  border: 1px solid var(--umds-semantic-color-neutral-light-down); /* #D5D5D5 */
37
37
  border-radius: var(--umds-primitive-border-radius-sm); /* era 12px (protótipo --radius-lg) — snap 14/07: painel overlay → md */
38
- box-shadow: var(--umds-semantic-shadow-md); /* era 0 4px 16px rgba(0,0,0,0.12) — mapeado para shadow-md 14/07 */
38
+ box-shadow: var(--umds-semantic-shadow-bottom-md); /* era 0 4px 16px rgba(0,0,0,0.12) — mapeado para shadow-md 14/07 */
39
39
  font-family: var(--umds-semantic-font-family-base);
40
40
  min-width: 160px; /* dimensão do protótipo sem token 1DS */
41
41
  transition: opacity var(--umds-semantic-motion-duration-fast) var(--umds-semantic-motion-easing-standard);
@@ -10,8 +10,16 @@ import './Dropdown.css';
10
10
  * @property {string} href - Item que navega: vira `<a>` de verdade (Ctrl+clique e "abrir em nova aba" funcionam). O `onSelect` continua sendo chamado.
11
11
  * @property {string} target - Destino do link (`_blank` ganha `rel="noopener noreferrer"`).
12
12
  * @property {string} rel - Relação do link; sobrescreve o padrão do `target`.
13
+ * @property {function} onSelect - Ação deste item: chamada ao escolhê-lo, antes do `onSelect` do Dropdown. Dispensa o switch por `key` e o cast para um tipo próprio.
14
+ *
15
+ * O item aceita campos próprios (`command`, `id`, `payload`...), que voltam
16
+ * intactos no `onSelect`: não é preciso converter para outro tipo.
13
17
  */
14
18
  export interface DropdownItem {
19
+ /** Ação deste item, chamada ao escolhê-lo (antes do `onSelect` do Dropdown). */
20
+ onSelect?: (item: DropdownItem) => void;
21
+ /** Campos próprios do produto (`command`, `payload`...) voltam intactos no `onSelect`. */
22
+ [campo: string]: any;
15
23
  key: string;
16
24
  label: string;
17
25
  icon?: IconProp;
@@ -211,6 +211,8 @@ function Dropdown(props) {
211
211
  function handleSelect(item) {
212
212
  if (item.disabled)
213
213
  return;
214
+ if (item.onSelect)
215
+ item.onSelect(item);
214
216
  if (props.onSelect) {
215
217
  props.onSelect(item);
216
218
  }
@@ -130,3 +130,15 @@
130
130
  outline: 2px solid var(--umds-semantic-color-primary-pure);
131
131
  outline-offset: 2px;
132
132
  }
133
+
134
+ /* ── fill: ocupa e centraliza no espaço disponível ──
135
+ Para o vazio de uma coluna que rola: cresce no pai flex (flex: 1) e, num pai
136
+ com altura definida, ocupa a altura toda (min-height). O conteúdo continua
137
+ centralizado pela regra base. */
138
+ .umds-empty-state--fill {
139
+ flex: 1 1 auto;
140
+ align-self: stretch;
141
+ box-sizing: border-box;
142
+ width: 100%;
143
+ min-height: 100%;
144
+ }
@@ -11,6 +11,7 @@ import './EmptyState.css';
11
11
  * @property {function} onAction - Callback acionado ao clicar no botão de ação
12
12
  * @property {string} size - Tamanho do bloco: 'sm' | 'md' | 'lg'
13
13
  * @property {string} className - Classes CSS adicionais
14
+ * @property {boolean} fill - Ocupa e centraliza no espaço disponível: cresce no pai flex e, num pai com altura definida, fica no meio dele (o vazio de uma coluna que rola)
14
15
  * @quandoUsar Quando NÃO HÁ dados para mostrar: lista vazia, busca sem resultado, área ainda não configurada. Traz ícone, mensagem e ação opcional.
15
16
  * @quandoNaoUsar Enquanto os dados ainda estão CARREGANDO — use `Skeleton` ou `Spinner`. Estado vazio é resposta definitiva, não espera.
16
17
  */
@@ -22,6 +23,8 @@ export interface EmptyStateProps {
22
23
  actionLabel?: string;
23
24
  onAction?: () => void;
24
25
  size?: "sm" | "md" | "lg";
26
+ /** Ocupa e centraliza no espaço disponível (coluna que rola, painel). @default false */
27
+ fill?: boolean;
25
28
  className?: string;
26
29
  }
27
30
  import { IconProp } from "../Icon/Icon";
@@ -7,6 +7,7 @@ function EmptyState(props) {
7
7
  return [
8
8
  "umds-empty-state",
9
9
  `umds-empty-state--${props.size || "md"}`,
10
+ props.fill ? "umds-empty-state--fill" : "",
10
11
  props.className,
11
12
  ]
12
13
  .filter(Boolean)
@@ -65,7 +65,7 @@
65
65
 
66
66
  .umds-kanban__handle:hover .umds-kanban-card {
67
67
  border-color: var(--umds-semantic-color-primary-medium);
68
- box-shadow: var(--umds-semantic-shadow-md);
68
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
69
69
  }
70
70
 
71
71
  .umds-kanban__handle:focus {
@@ -80,7 +80,7 @@
80
80
  /* Pego pelo teclado: o cartão "levanta". */
81
81
  .umds-kanban__item--pego .umds-kanban-card {
82
82
  border-color: var(--umds-semantic-color-primary-pure);
83
- box-shadow: var(--umds-semantic-shadow-lg);
83
+ box-shadow: var(--umds-semantic-shadow-bottom-lg);
84
84
  }
85
85
 
86
86
  /* Origem do arrasto com o ponteiro: fica o lugar, esmaecido. */
@@ -18,7 +18,7 @@
18
18
  border: 1px solid var(--umds-semantic-color-neutral-light-medium);
19
19
  border-radius: var(--umds-primitive-border-radius-sm);
20
20
  background-color: var(--umds-semantic-color-background-elevated);
21
- box-shadow: var(--umds-semantic-shadow-xs);
21
+ box-shadow: var(--umds-semantic-shadow-bottom-xs);
22
22
  font-family: var(--umds-semantic-font-family-base);
23
23
  color: var(--umds-semantic-color-neutral-dark-pure);
24
24
  text-align: left;
@@ -33,7 +33,7 @@
33
33
 
34
34
  .umds-kanban-card--interativo:hover {
35
35
  border-color: var(--umds-semantic-color-primary-medium);
36
- box-shadow: var(--umds-semantic-shadow-md);
36
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
37
37
  }
38
38
 
39
39
  .umds-kanban-card--interativo:focus-visible {
@@ -34,6 +34,15 @@ ol.umds-list {
34
34
  justify-content: center;
35
35
  }
36
36
 
37
+ /* emptyFill: a lista vazia ocupa o espaço do pai (coluna que rola, painel) e o
38
+ EmptyState (fill) fica no meio dele. */
39
+ .umds-list--empty-fill {
40
+ flex: 1 1 auto;
41
+ align-self: stretch;
42
+ width: 100%;
43
+ min-height: 100%;
44
+ }
45
+
37
46
  /* ── <li> que envolve a linha ── */
38
47
  .umds-list__item {
39
48
  display: block;
@@ -180,4 +189,31 @@ ol.umds-list {
180
189
  flex-shrink: 0;
181
190
  align-items: center;
182
191
  gap: var(--umds-primitive-spacing-quarck); /* 4px */
183
- }
192
+ }
193
+ /* ── variant="primary": o item em destaque (Central de Ações) ──
194
+ Fundo azul-claro e hover um tom acima, como o cartão da referência. Não é
195
+ seleção (sem aria-current). O fundo é o mesmo azul-claro da seleção; o que\n muda é o hover, que escurece em vez de clarear. */
196
+ .umds-list-item--primary {
197
+ background: var(--umds-semantic-color-primary-light);
198
+ }
199
+
200
+ .umds-list-item--primary.umds-list-item--interactive:hover {
201
+ background: color-mix(
202
+ in srgb,
203
+ var(--umds-semantic-color-primary-medium) 35%,
204
+ var(--umds-semantic-color-primary-light)
205
+ );
206
+ }
207
+
208
+ /* Com ações, a superfície passa para o li (como a seleção). */
209
+ .umds-list__item:has(> .umds-list-item--primary):has(> .umds-list-item__actions) {
210
+ background: var(--umds-semantic-color-primary-light);
211
+ }
212
+
213
+ .umds-list__item:has(> .umds-list-item--primary.umds-list-item--interactive):has(> .umds-list-item__actions):hover {
214
+ background: color-mix(
215
+ in srgb,
216
+ var(--umds-semantic-color-primary-medium) 35%,
217
+ var(--umds-semantic-color-primary-light)
218
+ );
219
+ }
@@ -32,6 +32,7 @@ export type ListTag = "ul" | "ol";
32
32
  * @property {string} emptyDescription - Texto de apoio do estado vazio
33
33
  * @property {IconProp} emptyIcon - Ícone do estado vazio (objeto do Font Awesome)
34
34
  * @property {string} emptySize - Tamanho do estado vazio: 'sm' (padrão, compacto) | 'md' | 'lg'
35
+ * @property {boolean} emptyFill - O estado vazio ocupa e centraliza no espaço disponível (coluna que rola, painel de altura fixa)
35
36
  * @property {string} emptyActionLabel - Rótulo do botão do estado vazio (junto de onEmptyAction)
36
37
  * @property {function} onEmptyAction - Callback do botão do estado vazio
37
38
  * @property {any} empty - Slot `empty`: conteúdo próprio no lugar do EmptyState
@@ -61,6 +62,8 @@ export interface ListProps {
61
62
  emptyIcon?: IconProp;
62
63
  /** Tamanho do estado vazio. @default 'sm' */
63
64
  emptySize?: "sm" | "md" | "lg";
65
+ /** O estado vazio ocupa e centraliza no espaço disponível. @default false */
66
+ emptyFill?: boolean;
64
67
  /** Rótulo do botão do estado vazio (exibido junto de `onEmptyAction`). */
65
68
  emptyActionLabel?: string;
66
69
  /** Chamado no botão do estado vazio. */
@@ -21,7 +21,11 @@ function List(props) {
21
21
  .join(" ");
22
22
  }
23
23
  function emptyClasses() {
24
- return ["umds-list umds-list--empty", props.className]
24
+ return [
25
+ "umds-list umds-list--empty",
26
+ props.emptyFill ? "umds-list--empty-fill" : "",
27
+ props.className,
28
+ ]
25
29
  .filter(Boolean)
26
30
  .join(" ");
27
31
  }
@@ -48,6 +52,6 @@ function List(props) {
48
52
  }
49
53
  return out;
50
54
  }
51
- return (_jsxs(_Fragment, { children: [showEmpty() ? (_jsx("div", { role: "status", id: props.id, ...htmlAttrs(), className: emptyClasses(), children: _jsx(_Fragment, { children: props.empty || (_jsx(EmptyState, { icon: props.emptyIcon, title: emptyTitleText(), description: props.emptyDescription, size: emptySizeValue(), ...emptyActionProps() })) }) })) : null, showItems() && elementTag() === "ul" ? (_jsx("ul", { role: "list", id: props.id, "aria-label": props.ariaLabel, "aria-labelledby": props.ariaLabelledby, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, showItems() && elementTag() === "ol" ? (_jsx("ol", { role: "list", id: props.id, "aria-label": props.ariaLabel, "aria-labelledby": props.ariaLabelledby, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null] }));
55
+ return (_jsxs(_Fragment, { children: [showEmpty() ? (_jsx("div", { role: "status", id: props.id, ...htmlAttrs(), className: emptyClasses(), children: _jsx(_Fragment, { children: props.empty || (_jsx(EmptyState, { icon: props.emptyIcon, title: emptyTitleText(), description: props.emptyDescription, size: emptySizeValue(), fill: props.emptyFill, ...emptyActionProps() })) }) })) : null, showItems() && elementTag() === "ul" ? (_jsx("ul", { role: "list", id: props.id, "aria-label": props.ariaLabel, "aria-labelledby": props.ariaLabelledby, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null, showItems() && elementTag() === "ol" ? (_jsx("ol", { role: "list", id: props.id, "aria-label": props.ariaLabel, "aria-labelledby": props.ariaLabelledby, ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) })) : null] }));
52
56
  }
53
57
  export default List;
@@ -41,6 +41,9 @@ export type ListItemTag = "button" | "a" | "div";
41
41
  * @property {string} target - Destino do link: '_blank' ganha rel="noopener noreferrer"
42
42
  * @property {string} rel - Relação do link (sobrescreve o padrão do target)
43
43
  * @property {boolean} selected - Item atual: fundo de seleção e aria-current
44
+ * @property {string} variant - Superfície da linha: 'default' (transparente) | 'primary' (fundo azul-claro com hover próprio, o item em destaque da Central de Ações). Não é seleção: não marca aria-current
45
+ * @property {string} liClassName - Classes CSS do `li` (a linha visual). Use para animação de entrada escalonada; não vale com `standalone`
46
+ * @property {object} liStyle - Estilo inline do `li` (ex.: `{ '--ordem': 3 }` ou `transitionDelay`). Não vale com `standalone`
44
47
  * @property {boolean} disabled - Bloqueia clique e foco
45
48
  * @property {string} tooltip - Dica nativa do navegador: vira o atributo HTML `title` do elemento interativo
46
49
  * @property {boolean} standalone - Renderiza sem o `li`, só o elemento interativo (uso fora de `List`)
@@ -71,6 +74,12 @@ export interface ListItemProps {
71
74
  target?: string;
72
75
  /** Relação do link. Sobrescreve o padrão do `target`. */
73
76
  rel?: string;
77
+ /** Superfície: `primary` é o item em destaque, azul-claro com hover próprio. Não é seleção. @default 'default' */
78
+ variant?: "default" | "primary";
79
+ /** Classes CSS do `li` (a linha visual), para animação de entrada. Sem efeito com `standalone`. */
80
+ liClassName?: string;
81
+ /** Estilo inline do `li` (variável CSS, transitionDelay). Sem efeito com `standalone`. */
82
+ liStyle?: any;
74
83
  /** Item atual: fundo de seleção e `aria-current`. @default false */
75
84
  selected?: boolean;
76
85
  /** Bloqueia clique e foco. @default false */
@@ -10,11 +10,15 @@ function ListItem(props) {
10
10
  function isInteractive() {
11
11
  return elementTag() !== "div" || !!props.onClick;
12
12
  }
13
+ function liClasses() {
14
+ return ["umds-list__item", props.liClassName].filter(Boolean).join(" ");
15
+ }
13
16
  function classes() {
14
17
  return [
15
18
  "umds-list-item",
16
19
  isInteractive() ? "umds-list-item--interactive" : "",
17
20
  props.selected ? "umds-list-item--selected" : "",
21
+ props.variant === "primary" ? "umds-list-item--primary" : "",
18
22
  props.disabled ? "umds-list-item--disabled" : "",
19
23
  props.className,
20
24
  ]
@@ -77,6 +81,6 @@ function ListItem(props) {
77
81
  }
78
82
  return out;
79
83
  }
80
- return (_jsx(_Fragment, { children: !props.standalone ? (_jsx(_Fragment, { children: _jsxs("li", { className: "umds-list__item", children: [elementTag() === "button" ? (_jsxs("button", { type: "button", id: props.id, title: props.tooltip, disabled: props.disabled, "aria-current": ariaCurrent(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "a" ? (_jsxs("a", { id: props.id, title: props.tooltip, href: hrefValue(), target: props.target, rel: relValue(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "div" ? (_jsxs("div", { id: props.id, title: props.tooltip, role: divRole(), tabIndex: divTabIndex(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), onKeyDown: (event) => handleKeyDown(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, props.actions ? (_jsx("div", { className: "umds-list-item__actions", children: _jsx(_Fragment, { children: props.actions }) })) : null] }) })) : (_jsx(_Fragment, { children: _jsxs(_Fragment, { children: [elementTag() === "button" ? (_jsxs("button", { type: "button", id: props.id, title: props.tooltip, disabled: props.disabled, "aria-current": ariaCurrent(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "a" ? (_jsxs("a", { id: props.id, title: props.tooltip, href: hrefValue(), target: props.target, rel: relValue(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "div" ? (_jsxs("div", { id: props.id, title: props.tooltip, role: divRole(), tabIndex: divTabIndex(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), onKeyDown: (event) => handleKeyDown(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null] }) })) }));
84
+ return (_jsx(_Fragment, { children: !props.standalone ? (_jsx(_Fragment, { children: _jsxs("li", { style: props.liStyle, className: liClasses(), children: [elementTag() === "button" ? (_jsxs("button", { type: "button", id: props.id, title: props.tooltip, disabled: props.disabled, "aria-current": ariaCurrent(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "a" ? (_jsxs("a", { id: props.id, title: props.tooltip, href: hrefValue(), target: props.target, rel: relValue(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "div" ? (_jsxs("div", { id: props.id, title: props.tooltip, role: divRole(), tabIndex: divTabIndex(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), onKeyDown: (event) => handleKeyDown(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, props.actions ? (_jsx("div", { className: "umds-list-item__actions", children: _jsx(_Fragment, { children: props.actions }) })) : null] }) })) : (_jsx(_Fragment, { children: _jsxs(_Fragment, { children: [elementTag() === "button" ? (_jsxs("button", { type: "button", id: props.id, title: props.tooltip, disabled: props.disabled, "aria-current": ariaCurrent(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "a" ? (_jsxs("a", { id: props.id, title: props.tooltip, href: hrefValue(), target: props.target, rel: relValue(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null, elementTag() === "div" ? (_jsxs("div", { id: props.id, title: props.tooltip, role: divRole(), tabIndex: divTabIndex(), "aria-current": ariaCurrent(), "aria-disabled": ariaDisabled(), onClick: (event) => handleClick(event), onKeyDown: (event) => handleKeyDown(event), ...htmlAttrs(), className: classes(), children: [props.start ? (_jsx("span", { className: "umds-list-item__start", children: _jsx(_Fragment, { children: props.start }) })) : null, _jsxs("span", { className: "umds-list-item__body", children: [props.title ? (_jsx("span", { className: "umds-list-item__title", children: _jsx(Text, { variant: "body2", as: "span", weight: "semibold", color: "inherit", children: _jsx(_Fragment, { children: props.title }) }) })) : null, props.subtitle ? (_jsx("span", { className: "umds-list-item__subtitle", children: _jsx(Text, { variant: "body2", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.subtitle }) }) })) : null, props.meta ? (_jsx("span", { className: "umds-list-item__meta", children: _jsx(Text, { variant: "caption", as: "span", color: "inherit", children: _jsx(_Fragment, { children: props.meta }) }) })) : null, _jsx(_Fragment, { children: props.children })] }), props.end ? (_jsx("span", { className: "umds-list-item__end", children: _jsx(_Fragment, { children: props.end }) })) : null] })) : null] }) })) }));
81
85
  }
82
86
  export default ListItem;
@@ -41,7 +41,7 @@
41
41
  z-index: 2;
42
42
  background-color: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
43
43
  border-radius: var(--umds-primitive-border-radius-sm); /* 8px universal (rodada ago/2026) — a exceção "superfície grande → md" caiu */
44
- box-shadow: var(--umds-semantic-shadow-lg); /* era primitive-shadow-level-3 (0.16) — decisão 16/07 */
44
+ box-shadow: var(--umds-semantic-shadow-center-xl);
45
45
  padding: var(--umds-primitive-spacing-xxs);
46
46
  width: clamp(320px, 90%, 498px);
47
47
  max-width: 498px;
@@ -337,9 +337,8 @@
337
337
  padding: var(--umds-primitive-spacing-xxxs) var(--umds-primitive-spacing-xxs); /* 16px 24px (produto: 14px 22px) */
338
338
  border-top: 1px solid var(--umds-semantic-color-neutral-light-medium);
339
339
  background: var(--umds-semantic-color-neutral-light-pure);
340
- /* Levanta o rodapé do conteúdo que passa por baixo dele ao rolar.
341
- Sombra não tem token no 1DS — candidato a novo token. */
342
- box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.08);
340
+ /* Levanta o rodapé do conteúdo que passa por baixo dele ao rolar. */
341
+ box-shadow: var(--umds-semantic-shadow-top-md);
343
342
  flex-shrink: 0;
344
343
  box-sizing: border-box;
345
344
  }
@@ -195,7 +195,7 @@
195
195
  background-color: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
196
196
  border: 1px solid var(--umds-semantic-color-neutral-light-down);
197
197
  border-radius: var(--umds-primitive-border-radius-sm);
198
- box-shadow: var(--umds-semantic-shadow-md); /* protótipo --shadow-md */
198
+ box-shadow: var(--umds-semantic-shadow-bottom-md); /* protótipo --shadow-md */
199
199
  z-index: var(--umds-semantic-layer-popover); /* 1400 - acima de modal */
200
200
  max-height: 320px;
201
201
  display: flex;
@@ -54,7 +54,7 @@
54
54
  color: var(--umds-semantic-color-primary-dark);
55
55
  border: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
56
56
  border-radius: var(--umds-primitive-border-radius-sm);
57
- box-shadow: var(--umds-semantic-shadow-sm);
57
+ box-shadow: var(--umds-semantic-shadow-bottom-sm);
58
58
  cursor: pointer;
59
59
  transition:
60
60
  box-shadow var(--umds-semantic-motion-duration-fast) var(--umds-semantic-motion-easing-standard),
@@ -69,7 +69,7 @@
69
69
  }
70
70
 
71
71
  .umds-org-chart__node:hover {
72
- box-shadow: var(--umds-semantic-shadow-md);
72
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
73
73
  }
74
74
 
75
75
  .umds-org-chart__node--selected {
@@ -54,7 +54,7 @@
54
54
  /* 1px como os demais campos: 1,5px era do protótipo e engrossava só aqui. */
55
55
  border: 1px solid var(--umds-semantic-field-border-default);
56
56
  border-radius: var(--umds-primitive-border-radius-sm, 8px); /* era 12px (protótipo --radius-lg) — snap 14/07: controle de campo → sm, alinha com Input/Select */
57
- box-shadow: var(--umds-semantic-shadow-sm); /* era 0 1px 2px 0.04, 0 1px 3px 0.02 (protótipo --shadow-sm) — mapeado 14/07 */
57
+ box-shadow: var(--umds-semantic-shadow-bottom-sm); /* era 0 1px 2px 0.04, 0 1px 3px 0.02 (protótipo --shadow-sm) — mapeado 14/07 */
58
58
  transition:
59
59
  border-color var(--umds-semantic-motion-duration-fast) var(--umds-semantic-motion-easing-standard),
60
60
  box-shadow var(--umds-semantic-motion-duration-fast) var(--umds-semantic-motion-easing-standard);
@@ -234,7 +234,7 @@
234
234
  background: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
235
235
  border: 1px solid var(--umds-semantic-color-neutral-light-medium); /* #EBEBEB */
236
236
  border-radius: var(--umds-primitive-border-radius-sm); /* 8px (protótipo --radius-md) */
237
- box-shadow: var(--umds-semantic-shadow-md); /* era 0 4px 16px rgba(0,0,0,0.12) — mapeado para shadow-md 14/07 */
237
+ box-shadow: var(--umds-semantic-shadow-bottom-md); /* era 0 4px 16px rgba(0,0,0,0.12) — mapeado para shadow-md 14/07 */
238
238
  overflow: hidden;
239
239
  animation: umds-phone-dropdown-in var(--umds-semantic-motion-duration-fast) var(--umds-semantic-motion-easing-standard) both;
240
240
  }
@@ -37,7 +37,7 @@
37
37
  background: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no claro, mais clara no escuro */
38
38
  border: 1px solid var(--umds-semantic-color-neutral-light-down);
39
39
  border-radius: var(--umds-primitive-border-radius-sm);
40
- box-shadow: var(--umds-semantic-shadow-md);
40
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
41
41
  font-family: var(--umds-semantic-font-family-base);
42
42
  transition: opacity var(--umds-semantic-motion-duration-fast)
43
43
  var(--umds-semantic-motion-easing-standard);
@@ -234,7 +234,7 @@
234
234
  background-color: var(--umds-semantic-color-background-white);
235
235
  color: var(--umds-semantic-color-neutral-dark-pure);
236
236
  font-weight: var(--umds-primitive-font-weight-bold);
237
- box-shadow: var(--umds-semantic-shadow-md);
237
+ box-shadow: var(--umds-semantic-shadow-bottom-md);
238
238
  }
239
239
 
240
240
  .umds-segmented--surface .umds-segmented__input:disabled + .umds-segmented__item:hover {
@@ -149,7 +149,7 @@
149
149
  background-color: var(--umds-semantic-color-background-elevated); /* superfície elevada: igual ao white no light; mais clara no dark (decisão 25/07) */
150
150
  border: 1px solid var(--umds-semantic-color-neutral-light-down);
151
151
  border-radius: var(--umds-primitive-border-radius-sm);
152
- box-shadow: var(--umds-semantic-shadow-md); /* protótipo --shadow-md */
152
+ box-shadow: var(--umds-semantic-shadow-bottom-md); /* protótipo --shadow-md */
153
153
  z-index: var(--umds-semantic-layer-popover); /* 1400 - acima de modal */
154
154
  max-height: 300px;
155
155
  display: flex;