@snksergio/design-system 0.58.0 → 0.60.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 (92) hide show
  1. package/dist-lib/index.cjs +4461 -16
  2. package/dist-lib/index.cjs.map +1 -1
  3. package/dist-lib/index.mjs +4477 -32
  4. package/dist-lib/index.mjs.map +1 -1
  5. package/dist-lib/src/components/index.d.ts +1 -0
  6. package/dist-lib/src/components/index.d.ts.map +1 -1
  7. package/dist-lib/src/components/ui/Gantt/gantt.d.ts +21 -0
  8. package/dist-lib/src/components/ui/Gantt/gantt.d.ts.map +1 -0
  9. package/dist-lib/src/components/ui/Gantt/gantt.styles.d.ts +2985 -0
  10. package/dist-lib/src/components/ui/Gantt/gantt.styles.d.ts.map +1 -0
  11. package/dist-lib/src/components/ui/Gantt/gantt.types.d.ts +445 -0
  12. package/dist-lib/src/components/ui/Gantt/gantt.types.d.ts.map +1 -0
  13. package/dist-lib/src/components/ui/Gantt/hooks/drag.d.ts +71 -0
  14. package/dist-lib/src/components/ui/Gantt/hooks/drag.d.ts.map +1 -0
  15. package/dist-lib/src/components/ui/Gantt/hooks/filters.d.ts +79 -0
  16. package/dist-lib/src/components/ui/Gantt/hooks/filters.d.ts.map +1 -0
  17. package/dist-lib/src/components/ui/Gantt/hooks/layout.d.ts +232 -0
  18. package/dist-lib/src/components/ui/Gantt/hooks/layout.d.ts.map +1 -0
  19. package/dist-lib/src/components/ui/Gantt/hooks/links.d.ts +120 -0
  20. package/dist-lib/src/components/ui/Gantt/hooks/links.d.ts.map +1 -0
  21. package/dist-lib/src/components/ui/Gantt/hooks/week-segments.d.ts +69 -0
  22. package/dist-lib/src/components/ui/Gantt/hooks/week-segments.d.ts.map +1 -0
  23. package/dist-lib/src/components/ui/Gantt/index.d.ts +46 -0
  24. package/dist-lib/src/components/ui/Gantt/index.d.ts.map +1 -0
  25. package/dist-lib/src/components/ui/Gantt/parts/gantt-applied-filters.d.ts +20 -0
  26. package/dist-lib/src/components/ui/Gantt/parts/gantt-applied-filters.d.ts.map +1 -0
  27. package/dist-lib/src/components/ui/Gantt/parts/gantt-bar.d.ts +68 -0
  28. package/dist-lib/src/components/ui/Gantt/parts/gantt-bar.d.ts.map +1 -0
  29. package/dist-lib/src/components/ui/Gantt/parts/gantt-filter-panel.d.ts +16 -0
  30. package/dist-lib/src/components/ui/Gantt/parts/gantt-filter-panel.d.ts.map +1 -0
  31. package/dist-lib/src/components/ui/Gantt/parts/gantt-grid.d.ts +55 -0
  32. package/dist-lib/src/components/ui/Gantt/parts/gantt-grid.d.ts.map +1 -0
  33. package/dist-lib/src/components/ui/Gantt/parts/gantt-links-layer.d.ts +46 -0
  34. package/dist-lib/src/components/ui/Gantt/parts/gantt-links-layer.d.ts.map +1 -0
  35. package/dist-lib/src/components/ui/Gantt/parts/gantt-skeleton.d.ts +36 -0
  36. package/dist-lib/src/components/ui/Gantt/parts/gantt-skeleton.d.ts.map +1 -0
  37. package/dist-lib/src/components/ui/Gantt/parts/gantt-toolbar.d.ts +46 -0
  38. package/dist-lib/src/components/ui/Gantt/parts/gantt-toolbar.d.ts.map +1 -0
  39. package/dist-lib/src/components/ui/Gantt/views/calendar.d.ts +64 -0
  40. package/dist-lib/src/components/ui/Gantt/views/calendar.d.ts.map +1 -0
  41. package/dist-lib/src/components/ui/Gantt/views/list.d.ts +53 -0
  42. package/dist-lib/src/components/ui/Gantt/views/list.d.ts.map +1 -0
  43. package/dist-lib/src/components/ui/Gantt/views/timeline.d.ts +85 -0
  44. package/dist-lib/src/components/ui/Gantt/views/timeline.d.ts.map +1 -0
  45. package/dist-lib/src/components/ui/MessageBubble/index.d.ts +1 -1
  46. package/dist-lib/src/components/ui/MessageBubble/index.d.ts.map +1 -1
  47. package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts +1 -1
  48. package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts.map +1 -1
  49. package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts +22 -2
  50. package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts.map +1 -1
  51. package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts +8 -0
  52. package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts.map +1 -1
  53. package/dist-lib/theme/brand-pay.css +205 -189
  54. package/dist-lib/theme/brand-vibrant.css +162 -148
  55. package/dist-lib/theme.css +19 -0
  56. package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts +28 -0
  57. package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts.map +1 -1
  58. package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts +16 -0
  59. package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts.map +1 -1
  60. package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts +16 -0
  61. package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts.map +1 -1
  62. package/dist-lib/tokens/brands/default/primitives/color-palette.d.ts +29 -0
  63. package/dist-lib/tokens/brands/default/primitives/color-palette.d.ts.map +1 -1
  64. package/dist-lib/tokens/brands/default/semantic/color-dark.d.ts +16 -0
  65. package/dist-lib/tokens/brands/default/semantic/color-dark.d.ts.map +1 -1
  66. package/dist-lib/tokens/brands/default/semantic/color-light.d.ts +16 -0
  67. package/dist-lib/tokens/brands/default/semantic/color-light.d.ts.map +1 -1
  68. package/dist-lib/tokens/brands/default/semantic/elevation.d.ts +4 -0
  69. package/dist-lib/tokens/brands/default/semantic/elevation.d.ts.map +1 -1
  70. package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts +28 -0
  71. package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts.map +1 -1
  72. package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts +16 -0
  73. package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts.map +1 -1
  74. package/dist-lib/tokens/brands/green/semantic/color-light.d.ts +16 -0
  75. package/dist-lib/tokens/brands/green/semantic/color-light.d.ts.map +1 -1
  76. package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts +6 -0
  77. package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts.map +1 -1
  78. package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts +16 -0
  79. package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts.map +1 -1
  80. package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts +16 -0
  81. package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts.map +1 -1
  82. package/dist-lib/tokens/brands/vibrant/primitives/color-palette.d.ts +29 -1
  83. package/dist-lib/tokens/brands/vibrant/primitives/color-palette.d.ts.map +1 -1
  84. package/dist-lib/tokens/brands/vibrant/semantic/color-dark.d.ts +16 -0
  85. package/dist-lib/tokens/brands/vibrant/semantic/color-dark.d.ts.map +1 -1
  86. package/dist-lib/tokens/brands/vibrant/semantic/color-light.d.ts +16 -0
  87. package/dist-lib/tokens/brands/vibrant/semantic/color-light.d.ts.map +1 -1
  88. package/dist-lib/tokens.cjs +23 -2
  89. package/dist-lib/tokens.cjs.map +1 -1
  90. package/dist-lib/tokens.mjs +23 -2
  91. package/dist-lib/tokens.mjs.map +1 -1
  92. package/package.json +1 -1
@@ -0,0 +1,2985 @@
1
+ /**
2
+ * Estilos do `Gantt`.
3
+ *
4
+ * ## A pele é do DS, a estrutura é das referências
5
+ *
6
+ * As 13 referências visuais decidiram **estrutura**: grade à esquerda, eixo em
7
+ * dois níveis, divisor arrastável, setas ortogonais, losango pro marco. Nenhuma
8
+ * decidiu **pele** — fonte, cor, espaçamento, radius e foco vêm dos tokens,
9
+ * conforme `.ai/context/referencia-visual.md`.
10
+ *
11
+ * ⛔ Nenhum hex saiu de pixel de print. Os prints trazem roxo, laranja e
12
+ * azul-royal de outros produtos; o DS tem 5 chaves de chart e as famílias
13
+ * semânticas, e é só isso que existe aqui.
14
+ *
15
+ * ## Por que a barra é TINGIDA e não sólida com texto branco
16
+ *
17
+ * As referências mostram barra saturada com texto branco. O DS não faz isso, e a
18
+ * razão foi **medida** na v0.56.0 ao especificar o `Scheduler`: texto colorido
19
+ * ou branco sobre pílula tingida dá contraste de **1.72–4.49 no light** e
20
+ * 2.97–4.31 no dark — nenhuma família passa AA, e `warning` chega a 1.72:1.
21
+ *
22
+ * A receita do DS é: fundo tingido + `fg-default` no texto + a cor viva num
23
+ * **acento** (aqui, a borda esquerda de 3px) e no preenchimento de progresso.
24
+ * A cor segue dizendo qual frente é; ela só não carrega o texto.
25
+ *
26
+ * ⛔ Nada aqui é importado do `Scheduler` — só a gramática visual foi copiada,
27
+ * pelo mesmo motivo que ele copiou a do `TableToolbar` em vez de importar
28
+ * (L-049): cross-import entre pastas de `ui/` gera `registryDependency`
29
+ * pendente e o `igreen:add` estreia quebrado.
30
+ */
31
+ /**
32
+ * Altura da linha, em px — **fonte ÚNICA, consumida pelos dois painéis**.
33
+ *
34
+ * ⚠️ É constante e não classe utilitária de propósito. A grade da esquerda e o
35
+ * canvas da direita têm que concordar **ao pixel**: a barra é posicionada em
36
+ * `top` absoluto calculado a partir do índice da linha, e a célula da esquerda é
37
+ * um elemento de fluxo. Se as duas derivassem a altura de lugares diferentes —
38
+ * uma de `min-h-comp-2xl`, outra de um `--var` — bastaria um `line-height`
39
+ * herdado pra desalinhar, e o desalinho cresce linha a linha.
40
+ *
41
+ * É a classe de defeito da L-038: default resolvido em dois render-sites que
42
+ * divergem. Aqui há um número só, e um teste compara os dois `getBoundingClientRect`.
43
+ *
44
+ * 48px: os 44 de `comp-2xl` (alvo de toque WCAG) + 2px de respiro em cima e
45
+ * 2 embaixo. Em 44 exatos a linha ficava com o texto encostado nas divisórias.
46
+ */
47
+ export declare const GANTT_ROW_HEIGHT_PX = 48;
48
+ /**
49
+ * Altura da barra dentro da linha.
50
+ *
51
+ * 26 e não 18: em 44px de linha, 18px de barra deixava 13px de folga em cima e
52
+ * embaixo, e o card parecia flutuar solto na faixa. A barra é CENTRADA
53
+ * verticalmente — `(rowHeight - barHeight) / 2` —, não colada no topo.
54
+ */
55
+ export declare const GANTT_BAR_HEIGHT_PX = 26;
56
+ /** Barra-resumo: mais fina de propósito, ela agrega e não é trabalho. */
57
+ export declare const GANTT_SUMMARY_BAR_HEIGHT_PX = 12;
58
+ /** Altura de uma lane dentro de uma linha com N barras (`lanePacking: "stack"`). */
59
+ export declare const GANTT_LANE_HEIGHT_PX = 30;
60
+ /**
61
+ * Altura do cabeçalho — dois níveis empilhados.
62
+ *
63
+ * 68 e não 56: com 28+28 o rótulo do dia ficava colado na divisória, e o eixo
64
+ * lia como uma faixa comprimida ao lado de linhas de 44px. 30 no grupo (mês) +
65
+ * 38 na unidade (dia), que é onde mora o par `S 21`.
66
+ */
67
+ export declare const GANTT_HEAD_HEIGHT_PX = 84;
68
+ /**
69
+ * Faixa do mês/ano — **42px, igual à faixa da unidade**.
70
+ *
71
+ * Passou por 30 (o rótulo encostava na divisória) e 38 (melhor, mas a faixa
72
+ * ainda lia como subordinada à de baixo). Em 42 as duas têm o mesmo peso, que é
73
+ * o correto: são dois NÍVEIS do mesmo eixo, não um cabeçalho e um sub-cabeçalho.
74
+ *
75
+ * ⚠️ **Não há token de 42px, e isso é deliberado.** A escala `form` do DS pula
76
+ * de 40 (`form-lg`) pra 44 (`form-xl`, alvo WCAG); nenhum tier cai em 42. Toda a
77
+ * família `GANTT_HEAD_*`/`GANTT_ROW_HEIGHT_PX` é geometria DE COMPONENTE em px,
78
+ * pela mesma razão: são medidas que os dois painéis têm que casar ao pixel, não
79
+ * alturas de controle interativo. Criar token semântico pra a faixa de
80
+ * cabeçalho de UM componente violaria a Regra 1 (só criar se nenhum servir E
81
+ * for reutilizável).
82
+ *
83
+ * Se em algum momento isto tiver que virar token, o tier honesto é `form-xl`
84
+ * (44) — e aí as duas faixas vão junto, não só esta.
85
+ */
86
+ export declare const GANTT_HEAD_GROUP_PX = 42;
87
+ /** Faixa da unidade — empilha a abreviação do dia sobre o número (#10). */
88
+ export declare const GANTT_HEAD_UNIT_PX = 42;
89
+ /**
90
+ * Largura mínima de rótulo de GRUPO, em px.
91
+ *
92
+ * 96px porque o pior caso real é "novembro 2026" em `caption-md`, que mede
93
+ * ~85px de texto: em 92px ele encostava nas duas bordas.
94
+ *
95
+ * Abaixo disso o rótulo não é renderizado — a célula fica, pra o alinhamento
96
+ * não quebrar, mas vazia. Medido no exemplo de tela cheia: a janela começava em
97
+ * 31/ago e o grupo "agosto 2026" saía com **46px** (um dia só), com o texto
98
+ * transbordando por cima do vizinho.
99
+ *
100
+ * Esconder é melhor que abreviar: "ago" em 46px ainda encosta nas duas bordas,
101
+ * e o mês já está implícito no grupo seguinte, que é grande.
102
+ */
103
+ export declare const GANTT_GROUP_LABEL_MIN_PX = 96;
104
+ /** Largura de coluna por granularidade, em px por dia. */
105
+ /**
106
+ * Largura por dia, em px — derivada da largura-alvo da UNIDADE.
107
+ *
108
+ * ⚠️ A largura-alvo NÃO é "o que o rótulo precisa". Era, e foi o erro: "set"
109
+ * cabe em 60px, então o mês nasceu com 150 e o trimestre com 190 — larguras
110
+ * suficientes pro CABEÇALHO e insuficientes pro CONTEÚDO. Quem ocupa a coluna
111
+ * é a barra, e ela mede em dias:
112
+ *
113
+ * escala antes uma tarefa de 6 dias uma de 12
114
+ * month 150px (4.93/d) → 30px → 59px
115
+ * quarter 190px (2.09/d) → 13px → 25px
116
+ *
117
+ * Em 30px não cabe rótulo nem o acento de 3px lê como acento; em 13px a barra
118
+ * é um traço. O cronograma inteiro virava uma tira achatada, que é justamente
119
+ * o que se vai olhar quando se escolhe uma escala grossa.
120
+ *
121
+ * escala agora 6 dias 12 dias
122
+ * month 240px (7.89/d) → 47px → 95px
123
+ * quarter 320px (3.52/d) → 21px → 42px
124
+ *
125
+ * O custo é largura total do trilho — com `GANTT_WINDOW_DAYS`, mês vai a
126
+ * ~5.760px e trimestre a ~6.420px. É rolagem, e rolagem é o preço certo:
127
+ * conteúdo ilegível não tem preço de troco.
128
+ *
129
+ * `day` fica em 46 porque lá a coluna carrega duas informações empilhadas (a
130
+ * abreviação do dia e o número) e a barra já tem 46px por dia.
131
+ */
132
+ export declare const GANTT_PX_PER_DAY: {
133
+ readonly day: 46;
134
+ readonly week: number;
135
+ readonly month: number;
136
+ readonly quarter: number;
137
+ };
138
+ /**
139
+ * Quantos dias a janela cobre em cada escala, quando o consumidor NÃO controla.
140
+ *
141
+ * ⚠️ Sem isto, trocar pra trimestre mantinha a janela de ~60 dias e o
142
+ * cronograma inteiro colapsava numa tira de **128px** — medido. Escolher uma
143
+ * escala mais grossa é pedir pra ver MAIS TEMPO, não a mesma janela comprimida.
144
+ */
145
+ export declare const GANTT_WINDOW_DAYS: {
146
+ readonly day: 60;
147
+ readonly week: 180;
148
+ readonly month: 730;
149
+ readonly quarter: 1825;
150
+ };
151
+ /**
152
+ * A raiz — toolbar em cima, os dois painéis embaixo.
153
+ *
154
+ * ⚠️ `gap-gp-3xl` (20px) e não `gap-gp-xl` (12px): em 12px a toolbar encostava
155
+ * na moldura do cronograma e as duas liam como uma caixa só, com os controles
156
+ * parecendo parte do cabeçalho da grade. 20px é a distância que separa
157
+ * "controles DA tela" de "a tela".
158
+ */
159
+ export declare const ganttRoot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
160
+ /**
161
+ * Duas linhas abaixo de `lg`, uma a partir dele — mesma decisão que a toolbar do
162
+ * `Scheduler` tomou na v0.58.0, e pelo mesmo motivo medido: `flex-wrap` puro
163
+ * deixa a quebra a cargo do espaço que sobrar, e em 375px os controles disputam
164
+ * largura com a busca.
165
+ */
166
+ export declare const ganttToolbar: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
167
+ /**
168
+ * Os dois lados da toolbar.
169
+ *
170
+ * O lado esquerdo usa o gap do `toolbarLeft` do `TableToolbar` —
171
+ * `gap-gp-sm md:gap-gp-lg` (6px → 10px) —, e não um valor próprio. Ele tem a
172
+ * mesma anatomia da toolbar da tabela: seletor de visão, DIVISOR, e o que a
173
+ * visão governa. O divisor carrega `mx-sp-sm`, então o gap do grupo é metade do
174
+ * respiro que aparece em volta dele; com 16px ali o divisor ficava com 22px de
175
+ * cada lado contra os 16px da tabela, e era isso que fazia as abas, o divisor e
176
+ * a data parecerem soltos entre si. À direita o gap é 8px: lá é tudo controle,
177
+ * e agrupar é o que se quer.
178
+ *
179
+ * ⛔ Três classes da receita da tabela ficaram FORA de propósito:
180
+ * - `max-md:hidden` — na tabela o grupo esquerdo desaparece no mobile porque
181
+ * toggle, abas e "adicionar" colapsam pro menu de Configurações. Aqui o
182
+ * grupo carrega o título do mês e o `‹ Hoje ›`, que são a ÚNICA navegação do
183
+ * componente; não há menu pra onde colapsar, então esconder equivale a
184
+ * travar o Gantt no mês em que abriu.
185
+ * - `[&>*]:shrink-0` — o título é TEXTO, e o `ganttTitleText` trunca de
186
+ * propósito ("31 ago – 2 nov 2026" é longo). `shrink-0` no filho impede o
187
+ * truncate e o texto vaza a toolbar. Na tabela todos os filhos são
188
+ * controles de largura própria, e ali a classe está certa.
189
+ * - `flex-1` — a raiz (`ganttToolbar`) já é `justify-between`, então o lado
190
+ * esquerdo já recebe a sobra sem precisar disputá-la.
191
+ *
192
+ * ⚠️ O `gap` está NAS VARIANTES e não na base, e isso não é estilo — é
193
+ * necessidade. MEDIDO: `tailwind-merge` **não colapsa** `gap-gp-*`. Um elemento
194
+ * com `gap-gp-md gap-gp-2xl` mantém as DUAS classes e quem decide é a ordem no
195
+ * CSS gerado — que entregou 8px, o valor da base. Sozinha, `gap-gp-2xl` dá 16.
196
+ *
197
+ * O motivo: o grupo `gap` do tailwind-merge valida o sufixo como número ou
198
+ * valor arbitrário, e `gp-md` não é nem um nem outro — então ele nem reconhece
199
+ * as duas como conflitantes. É a mesma armadilha da L-016 (preset tipográfico
200
+ * invisível pro merge), na família de espaçamento: falha em silêncio, com `tsc`
201
+ * e testes verdes.
202
+ *
203
+ * ⛔ Regra prática: com prefixo DS (`gp-`, `sp-`, `pad-`, `form-`, `icon-`),
204
+ * NÃO conte com variante sobrescrevendo a base. Declare o valor em UM lugar só.
205
+ */
206
+ export declare const ganttToolbarSide: import('tailwind-variants').TVReturnType<{
207
+ slot: {
208
+ leading: string[];
209
+ trailing: string;
210
+ };
211
+ }, undefined, "flex min-w-0 items-center", {
212
+ slot: {
213
+ leading: string[];
214
+ trailing: string;
215
+ };
216
+ }, undefined, import('tailwind-variants').TVReturnType<{
217
+ slot: {
218
+ leading: string[];
219
+ trailing: string;
220
+ };
221
+ }, undefined, "flex min-w-0 items-center", unknown, unknown, undefined>>;
222
+ /**
223
+ * Título do período. `<span>` e não heading — ele rotula a toolbar, não abre
224
+ * seção de documento; como `h2` entraria no índice da página no mesmo nível das
225
+ * seções (medido na doc page do `Scheduler`).
226
+ */
227
+ export declare const ganttTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
228
+ /**
229
+ * O texto do período. `truncate` mora AQUI e não na raiz do título.
230
+ *
231
+ * Na raiz, o `truncate` (que é `overflow:hidden` + `text-overflow`) se aplicava
232
+ * ao flex container e cortava o ícone junto quando o espaço apertava — o ícone
233
+ * é o primeiro filho, então sumia primeiro. No texto, quem encurta é só o texto.
234
+ */
235
+ export declare const ganttTitleText: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-w-0 truncate first-letter:uppercase", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-w-0 truncate first-letter:uppercase", unknown, unknown, undefined>>;
236
+ /**
237
+ * Controle segmentado de VISÃO — trilho com pílula ativa.
238
+ *
239
+ * ⚠️ Isto é o `toolbarSegmented`/`toolbarSegmentedButton` do `TableToolbar`,
240
+ * token por token. É o mesmo controle que troca Tabela/Lista/Kanban na
241
+ * `DataTable`, e trocar de visão é a mesma ação nas duas telas — o usuário não
242
+ * deve aprender dois controles pro mesmo gesto.
243
+ *
244
+ * ⛔ Minha primeira versão eram dois `Button` de texto unidos pelo
245
+ * `ganttNavGroup`. Funcionava e estava ERRADO: eu disse que ia seguir o modelo
246
+ * do DS e inventei um controle, quando o modelo existia a um arquivo de
247
+ * distância. Trilho `bg-bg-muted` com pílula `bg-bg-accent` é uma gramática
248
+ * diferente de dois botões `outline` colados — não é detalhe de estilo, é outro
249
+ * componente visual.
250
+ *
251
+ * ⛔ Copiado e não importado: `ToolbarSegmented` vive em `ui/TableToolbar/`, e
252
+ * cross-import entre pastas de `ui/` gera `registryDependency` pendente (L-049).
253
+ */
254
+ export declare const ganttViewSwitch: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
255
+ export declare const ganttViewSwitchButton: import('tailwind-variants').TVReturnType<{
256
+ isActive: {
257
+ true: string;
258
+ false: string;
259
+ };
260
+ }, undefined, string[], {
261
+ isActive: {
262
+ true: string;
263
+ false: string;
264
+ };
265
+ }, undefined, import('tailwind-variants').TVReturnType<{
266
+ isActive: {
267
+ true: string;
268
+ false: string;
269
+ };
270
+ }, undefined, string[], unknown, unknown, undefined>>;
271
+ /**
272
+ * Divisor vertical entre grupos da toolbar.
273
+ *
274
+ * ⛔ Cópia do `toolbarDivider` do `TableToolbar` (1px × 24px, `border-default`,
275
+ * 6px de respiro, centrado). Mesma medida e mesmo token: é o mesmo separador
276
+ * lógico — "acabou um grupo de controles, começa outro" — e duas espessuras
277
+ * diferentes pra isso no mesmo produto é ruído.
278
+ */
279
+ export declare const ganttToolbarDivider: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "max-md:hidden mx-sp-sm h-[24px] w-sp-px shrink-0 self-center bg-border-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "max-md:hidden mx-sp-sm h-[24px] w-sp-px shrink-0 self-center bg-border-default", unknown, unknown, undefined>>;
280
+ /**
281
+ * `‹ Hoje ›` — três botões `soft` colados, com moldura e divisórias de 1px.
282
+ *
283
+ * ## A borda é pintada por LADO, não por botão
284
+ *
285
+ * O `Button` já nasce com `border border-transparent` (padrão do DS, pra
286
+ * transição suave). Então não se acrescenta borda aqui — só se dá COR: topo e
287
+ * base em todos, ESQUERDA em todos, direita só no último. Lendo da esquerda pra
288
+ * direita isso desenha moldura e divisórias de uma vez — a esquerda do primeiro
289
+ * é o lado do quadro, a dos outros dois é a divisória com o vizinho.
290
+ *
291
+ * Três consequências de fazer assim, e as três importam:
292
+ * - **A altura não muda.** O 1px já estava reservado nos quatro lados de cada
293
+ * botão; colorir não empurra layout. Uma borda no CONTAINER somaria 2px e o
294
+ * grupo ficaria mais alto que o seletor de visão (40px) ao lado.
295
+ * - **Toda linha tem a MESMA espessura e a mesma cor.** Cada junção recebe
296
+ * exatamente uma face colorida (a esquerda do botão da direita); a face que
297
+ * encosta nela fica transparente. Sem isso, duas bordas de 1px encostadas
298
+ * desenhariam uma divisória de 2px, o dobro da moldura.
299
+ * - **Sem `-ml-px`.** No segmentado clássico ele existe pra colapsar essas duas
300
+ * bordas em uma; aqui não há o que colapsar, e o overlap seria ATIVAMENTE
301
+ * ruim: `border-input` é `oklch(1 0 0 / 0.08)` e `bg-bg-muted` é
302
+ * `oklch(1 0 0 / 0.03)` — cores com ALPHA. Sobrepor 1px empilharia as duas
303
+ * camadas e a divisória sairia ~2× mais forte que a moldura.
304
+ *
305
+ * Os cantos retos no miolo (`!rounded-none`, meio-raio nas pontas) completam o
306
+ * efeito: sem eles, três retângulos arredondados encostados desenham entalhes.
307
+ *
308
+ * A cor é a do botão secundário `outline` — `border-subtle` no light,
309
+ * `border-input` no dark —, porque é o mesmo papel: moldura de controle neutro.
310
+ *
311
+ * O `z-[1]` no foco fica: o `ring-4` de um botão do meio seria coberto pelos
312
+ * vizinhos, que encostam nele.
313
+ */
314
+ export declare const ganttNavGroup: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
315
+ /**
316
+ * Menu de opções da toolbar — o `md:hidden` do Gantt.
317
+ *
318
+ * ## Por que existe
319
+ *
320
+ * Medido a 375px ANTES dele: a barra ocupava duas linhas de 40px, o campo de
321
+ * busca era espremido a **51px** (o ícone e nada mais, impossível digitar) e o
322
+ * título do período saía cortado no meio ("3…"). Cinco controles disputando
323
+ * 335px não cabem, e `flex-wrap` só empilha o problema.
324
+ *
325
+ * ## A regra é a da `TableToolbar`, não uma invenção
326
+ *
327
+ * Lá o grupo esquerdo inteiro sai em <md (`max-md:hidden`) e o que ele
328
+ * continha reaparece no menu de Configurações, em seções inline marcadas
329
+ * `md:hidden`; a barra fica com **busca + ícones**. Aqui é o mesmo: seletor de
330
+ * visão, `‹ Hoje ›`, escala e caminho crítico saem da barra e viram seções
331
+ * deste menu.
332
+ *
333
+ * ⛔ **O título do período FICA.** É a única diferença, e é de conteúdo: a
334
+ * toolbar da tabela não tem rótulo de contexto pra preservar — a do Gantt tem,
335
+ * e "outubro 2026" é o que diz o que a tela está mostrando. Escondê-lo pra
336
+ * seguir a regra ao pé da letra deixaria o usuário sem saber que mês vê.
337
+ *
338
+ * A gramática visual é cópia do `toolbar-settings-menu`: `p-pad-sm` com
339
+ * `gap-px`, rótulo `caption-sm` maiúsculo em `fg-subtle`, separador `h-px`,
340
+ * item `px-pad-lg py-pad-md` de `fg-muted` pra `fg-default` no hover.
341
+ */
342
+ export declare const ganttMobileMenu: import('tailwind-variants').TVReturnType<{
343
+ active: {
344
+ true: {
345
+ item: string;
346
+ };
347
+ false: {};
348
+ };
349
+ }, {
350
+ trigger: string;
351
+ content: string;
352
+ label: string;
353
+ separator: string;
354
+ field: string;
355
+ item: string[];
356
+ }, undefined, {
357
+ active: {
358
+ true: {
359
+ item: string;
360
+ };
361
+ false: {};
362
+ };
363
+ }, {
364
+ trigger: string;
365
+ content: string;
366
+ label: string;
367
+ separator: string;
368
+ field: string;
369
+ item: string[];
370
+ }, import('tailwind-variants').TVReturnType<{
371
+ active: {
372
+ true: {
373
+ item: string;
374
+ };
375
+ false: {};
376
+ };
377
+ }, {
378
+ trigger: string;
379
+ content: string;
380
+ label: string;
381
+ separator: string;
382
+ field: string;
383
+ item: string[];
384
+ }, undefined, unknown, unknown, undefined>>;
385
+ /**
386
+ * Dentro do menu, os dois grupos de controle ocupam a LARGURA CHEIA.
387
+ *
388
+ * Na barra eles são `shrink-0` e do tamanho do conteúdo; num painel de 280px
389
+ * isso os deixaria encolhidos à esquerda com um vazio à direita. `fluid` é a
390
+ * mesma ideia do `ToolbarSegmented fluid` que a tabela passa pro menu dela.
391
+ */
392
+ export declare const ganttMenuGroupFluid: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex w-full [&>*]:flex-1", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex w-full [&>*]:flex-1", unknown, unknown, undefined>>;
393
+ /**
394
+ * Esqueleto de carregamento.
395
+ *
396
+ * ## A silhueta é a mesma do conteúdo, e isso é a regra
397
+ *
398
+ * Copiada do `DataTableLoading`: o esqueleto usa o MESMO container do estado
399
+ * carregado (mesma borda, mesmo raio, mesma altura de linha) pra que a
400
+ * chegada do dado não desloque nada. Esqueleto de silhueta diferente troca
401
+ * "espera" por um salto de layout, que é pior que a espera.
402
+ *
403
+ * Por isso há três variantes, uma por visão: as três têm geometrias
404
+ * diferentes, e um esqueleto genérico saltaria em duas delas.
405
+ *
406
+ * `animate-pulse` é do Tailwind e não a `ds-pulse` da L-067 — esta última é a
407
+ * animação de ATENÇÃO do DS (um realce que chama), e aqui o pulso é de
408
+ * espera. São dois significados, e usar o de atenção pra espera faria o
409
+ * carregamento gritar.
410
+ */
411
+ export declare const ganttSkeleton: import('tailwind-variants').TVReturnType<{
412
+ [key: string]: {
413
+ [key: string]: import('tailwind-merge').ClassNameValue | {
414
+ canvas?: import('tailwind-merge').ClassNameValue;
415
+ head?: import('tailwind-merge').ClassNameValue;
416
+ cell?: import('tailwind-merge').ClassNameValue;
417
+ grid?: import('tailwind-merge').ClassNameValue;
418
+ row?: import('tailwind-merge').ClassNameValue;
419
+ root?: import('tailwind-merge').ClassNameValue;
420
+ bar?: import('tailwind-merge').ClassNameValue;
421
+ pane?: import('tailwind-merge').ClassNameValue;
422
+ };
423
+ };
424
+ } | {
425
+ [x: string]: {
426
+ [x: string]: import('tailwind-merge').ClassNameValue | {
427
+ canvas?: import('tailwind-merge').ClassNameValue;
428
+ head?: import('tailwind-merge').ClassNameValue;
429
+ cell?: import('tailwind-merge').ClassNameValue;
430
+ grid?: import('tailwind-merge').ClassNameValue;
431
+ row?: import('tailwind-merge').ClassNameValue;
432
+ root?: import('tailwind-merge').ClassNameValue;
433
+ bar?: import('tailwind-merge').ClassNameValue;
434
+ pane?: import('tailwind-merge').ClassNameValue;
435
+ };
436
+ };
437
+ } | {}, {
438
+ root: string;
439
+ /** A faixa do cabeçalho do eixo — mesma altura do `ganttHead`. */
440
+ head: string;
441
+ /** Linha do corpo — a MESMA altura de `GANTT_ROW_HEIGHT_PX`. */
442
+ row: string;
443
+ /** O retângulo cinza que faz as vezes de texto ou de barra. */
444
+ bar: string;
445
+ /** Painel esquerdo da timeline — só ele tem borda de separação. */
446
+ pane: string;
447
+ canvas: string;
448
+ /** Célula da grade de mês. */
449
+ cell: string;
450
+ grid: string;
451
+ }, undefined, {
452
+ [key: string]: {
453
+ [key: string]: import('tailwind-merge').ClassNameValue | {
454
+ canvas?: import('tailwind-merge').ClassNameValue;
455
+ head?: import('tailwind-merge').ClassNameValue;
456
+ cell?: import('tailwind-merge').ClassNameValue;
457
+ grid?: import('tailwind-merge').ClassNameValue;
458
+ row?: import('tailwind-merge').ClassNameValue;
459
+ root?: import('tailwind-merge').ClassNameValue;
460
+ bar?: import('tailwind-merge').ClassNameValue;
461
+ pane?: import('tailwind-merge').ClassNameValue;
462
+ };
463
+ };
464
+ } | {}, {
465
+ root: string;
466
+ /** A faixa do cabeçalho do eixo — mesma altura do `ganttHead`. */
467
+ head: string;
468
+ /** Linha do corpo — a MESMA altura de `GANTT_ROW_HEIGHT_PX`. */
469
+ row: string;
470
+ /** O retângulo cinza que faz as vezes de texto ou de barra. */
471
+ bar: string;
472
+ /** Painel esquerdo da timeline — só ele tem borda de separação. */
473
+ pane: string;
474
+ canvas: string;
475
+ /** Célula da grade de mês. */
476
+ cell: string;
477
+ grid: string;
478
+ }, import('tailwind-variants').TVReturnType<unknown, {
479
+ root: string;
480
+ /** A faixa do cabeçalho do eixo — mesma altura do `ganttHead`. */
481
+ head: string;
482
+ /** Linha do corpo — a MESMA altura de `GANTT_ROW_HEIGHT_PX`. */
483
+ row: string;
484
+ /** O retângulo cinza que faz as vezes de texto ou de barra. */
485
+ bar: string;
486
+ /** Painel esquerdo da timeline — só ele tem borda de separação. */
487
+ pane: string;
488
+ canvas: string;
489
+ /** Célula da grade de mês. */
490
+ cell: string;
491
+ grid: string;
492
+ }, undefined, unknown, unknown, undefined>>;
493
+ export declare const ganttSearch: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
494
+ export declare const ganttSearchInput: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
495
+ /**
496
+ * Linha dos filtros APLICADOS, abaixo da toolbar.
497
+ *
498
+ * ⚠️ Estes estilos são uma reprodução do `toolbarApplied*` do `TableToolbar`,
499
+ * token por token. A anatomia do chip da tabela não é preferência estética —
500
+ * é a experiência que o usuário já aprendeu em outra tela do mesmo produto.
501
+ * A minha primeira versão divergia em três pontos (× à direita, borda sólida
502
+ * brand, sem operador) e cada divergência era uma coisa a reaprender.
503
+ *
504
+ * O que documenta CADA decisão é o JSDoc de `gantt-applied-filters.tsx`.
505
+ *
506
+ * ## O divisor
507
+ *
508
+ * `16px → border-top → 16px → chips`, igual ao `toolbarApplied`. A linha
509
+ * importa porque a fileira de chips não é um controle da toolbar — é o resumo
510
+ * de um estado que ela produziu. Sem o divisor os chips liam como uma segunda
511
+ * fileira de botões.
512
+ *
513
+ * ⚠️ O espaçamento mora AQUI (`mt`/`pt`) e não como `gap` do pai: a linha só
514
+ * existe quando há filtro aplicado, e um `gap` no pai cobraria margem por uma
515
+ * linha ausente na maior parte do tempo.
516
+ *
517
+ * Rola na horizontal no mobile em vez de quebrar linha: no celular, 4 chips
518
+ * empilhados empurrariam a grade pra fora da tela.
519
+ *
520
+ * ⛔ Gramática copiada, não importada — cross-import entre pastas de `ui/` gera
521
+ * `registryDependency` pendente (L-049).
522
+ */
523
+ export declare const ganttAppliedRow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
524
+ /**
525
+ * O chip. Borda **tracejada e neutra**, como na tabela.
526
+ *
527
+ * ⚠️ Era `border-solid border-border-brand bg-bg-brand-subtle` na minha versão,
528
+ * e estava errado: chip aplicado não precisa gritar — ele já É a prova de que
529
+ * algo está ligado. Sólido em brand fazia a linha competir com a grade, que é o
530
+ * conteúdo, e ainda colidia com o verde que aqui significa "hoje"/"selecionado".
531
+ *
532
+ * `shrink-0` porque no scroll horizontal do mobile (`flex-nowrap`) os chips não
533
+ * podem comprimir.
534
+ */
535
+ export declare const ganttAppliedChip: import('tailwind-variants').TVReturnType<{
536
+ /** Clicável (abre as opções do campo). Sempre `true` hoje; ver o part. */
537
+ interactive: {
538
+ true: string[];
539
+ false: string;
540
+ };
541
+ }, undefined, string[], {
542
+ /** Clicável (abre as opções do campo). Sempre `true` hoje; ver o part. */
543
+ interactive: {
544
+ true: string[];
545
+ false: string;
546
+ };
547
+ }, undefined, import('tailwind-variants').TVReturnType<{
548
+ /** Clicável (abre as opções do campo). Sempre `true` hoje; ver o part. */
549
+ interactive: {
550
+ true: string[];
551
+ false: string;
552
+ };
553
+ }, undefined, string[], unknown, unknown, undefined>>;
554
+ /**
555
+ * O `⊗` de remover — à ESQUERDA do chip.
556
+ *
557
+ * ⚠️ Posição copiada da tabela, e ela tem razão de ser: à direita o alvo fica
558
+ * depois de um valor de largura variável e "dança" de posição entre chips; à
559
+ * esquerda todos ficam alinhados numa coluna, e limpar três filtros são três
560
+ * cliques sem reposicionar a mira.
561
+ */
562
+ export declare const ganttAppliedChipRemove: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
563
+ /** O nome do campo — "Frente", "Responsável". */
564
+ export declare const ganttAppliedChipName: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "font-semibold text-fg-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "font-semibold text-fg-default", unknown, unknown, undefined>>;
565
+ /**
566
+ * O operador — "é".
567
+ *
568
+ * ⚠️ Minha versão não tinha. Sem ele o chip lê "Status Ativo", uma justaposição
569
+ * ambígua; com ele lê "Status é Ativo", que é a frase que o filtro executa.
570
+ */
571
+ export declare const ganttAppliedChipOp: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "text-caption-sm text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "text-caption-sm text-fg-muted", unknown, unknown, undefined>>;
572
+ /** Cada valor, em pílula própria. Um por valor até o limite do part. */
573
+ export declare const ganttAppliedChipValue: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
574
+ /**
575
+ * "Limpar todos" no fim da linha.
576
+ *
577
+ * Link e não `Button`: é a saída de um estado, não ação de primeira ordem — um
578
+ * botão de 40px ali competiria com os próprios chips.
579
+ */
580
+ export declare const ganttClearLink: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
581
+ /** Ponto no canto do botão de filtro — portador NÃO-cromático de "tem filtro". */
582
+ export declare const ganttFilterDot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
583
+ /**
584
+ * Grupo de opções — um por campo, COLAPSÁVEL.
585
+ *
586
+ * Seção inteiriça com padding próprio e divisória de ponta a ponta: o painel
587
+ * não tem padding, quem paga o respiro é o grupo. É o que faz a linha chegar
588
+ * até as bordas, do jeito que se espera de uma lista de categorias — mesma
589
+ * anatomia do `schedulerAsideSection`.
590
+ */
591
+ export declare const ganttFilterGroup: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
592
+ /** Cabeçalho clicável do grupo — o alvo é a linha inteira, não só o chevron. */
593
+ export declare const ganttFilterGroupHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
594
+ export declare const ganttFilterGroupTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
595
+ /**
596
+ * Chevron do grupo. Rotação e não dois ícones: com dois, o nó troca no DOM e a
597
+ * transição não acontece — o chevron pisca em vez de girar.
598
+ */
599
+ export declare const ganttFilterGroupChevron: import('tailwind-variants').TVReturnType<{
600
+ open: {
601
+ true: string;
602
+ false: string;
603
+ };
604
+ }, undefined, "size-icon-sm shrink-0 text-fg-subtle transition-transform duration-200", {
605
+ open: {
606
+ true: string;
607
+ false: string;
608
+ };
609
+ }, undefined, import('tailwind-variants').TVReturnType<{
610
+ open: {
611
+ true: string;
612
+ false: string;
613
+ };
614
+ }, undefined, "size-icon-sm shrink-0 text-fg-subtle transition-transform duration-200", unknown, unknown, undefined>>;
615
+ /**
616
+ * "Selecionar todas" / "Limpar" do grupo.
617
+ *
618
+ * Link e não `Button`: são ações de ajuste fino dentro de um grupo, e dois
619
+ * botões de 32px empilhados sobre a lista competiriam com as próprias opções
620
+ * pela atenção. Mesma decisão do `schedulerClearLink`.
621
+ */
622
+ export declare const ganttFilterGroupActions: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
623
+ /** Busca dentro do grupo — mesma gramática da busca da toolbar, menor. */
624
+ export declare const ganttFilterSearch: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
625
+ export declare const ganttFilterSearchInput: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
626
+ /**
627
+ * Input de filtro de VALOR — `text`, `number`, `date`.
628
+ *
629
+ * Mesma gramática de campo do `ganttFilterSearch` (altura `form-md`, borda
630
+ * `border-subtle`/`border-input` no dark, anel de foco do DS), mas sem o ícone
631
+ * de lupa: aqui não se busca na lista, se declara um valor.
632
+ *
633
+ * ⛔ Não é `<Input>` do DS importado: `ui/Input` é outra pasta de `ui/`, e
634
+ * cross-import entre elas gera `registryDependency` pendente (L-049). O
635
+ * `FormField`/`Input` do DS entrariam se este fosse um formulário — é um
636
+ * controle de filtro dentro do próprio componente.
637
+ */
638
+ export declare const ganttFilterInput: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
639
+ /**
640
+ * A dupla de campos de uma FAIXA (`number`, `date`).
641
+ *
642
+ * Dois campos e não um só com máscara: "entre 3 e 10" tem dois valores
643
+ * independentes, e um deles pode ficar vazio (">= 3", "até 10"). Máscara única
644
+ * obrigaria a preencher os dois pra o filtro valer.
645
+ */
646
+ export declare const ganttFilterRange: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex items-center gap-gp-sm px-pad-xl pb-pad-sm", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex items-center gap-gp-sm px-pad-xl pb-pad-sm", unknown, unknown, undefined>>;
647
+ /** O "e" entre os dois campos da faixa. */
648
+ export declare const ganttFilterRangeSep: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "shrink-0 text-caption-sm text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "shrink-0 text-caption-sm text-fg-muted", unknown, unknown, undefined>>;
649
+ /** Nenhuma opção casou com a busca do grupo. */
650
+ export declare const ganttFilterEmpty: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "px-pad-xl py-pad-md text-body-sm text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "px-pad-xl py-pad-md text-body-sm text-fg-muted", unknown, unknown, undefined>>;
651
+ /**
652
+ * Linha de opção do painel.
653
+ *
654
+ * `<label htmlFor>` nativo (L-025) — o alvo é o rótulo inteiro, e o clique
655
+ * propaga pro `Checkbox` real sem `onClick` intermediário.
656
+ */
657
+ export declare const ganttFilterOption: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
658
+ /**
659
+ * `className` aplicada no `Checkbox` REAL do DS — não uma caixa desenhada.
660
+ *
661
+ * ⚠️ A primeira versão pintava um `<span>` com um ícone de check dentro. Saía
662
+ * fora do padrão: sem o anel de foco do DS, sem os `data-state` do Radix, sem
663
+ * indeterminate, e com a marcação num tom que não era o do componente real.
664
+ *
665
+ * Aqui a cor da opção entra só na BORDA e no fundo do estado marcado, e o
666
+ * comportamento continua sendo o do `Checkbox`. É o mesmo recurso que o
667
+ * `schedulerOptionBox` usa, e a razão de o `Checkbox` aceitar `className`.
668
+ *
669
+ * A cor da caixa é a cor com que a barra aparece na grade — dispensa legenda.
670
+ */
671
+ export declare const ganttFilterOptionBox: import('tailwind-variants').TVReturnType<{
672
+ colorKey: {
673
+ "chart-1": string;
674
+ "chart-2": string;
675
+ "chart-3": string;
676
+ "chart-4": string;
677
+ "chart-5": string;
678
+ brand: string;
679
+ success: string;
680
+ warning: string;
681
+ danger: string;
682
+ info: string;
683
+ neutral: string;
684
+ };
685
+ }, undefined, "shrink-0 transition-colors duration-150", {
686
+ colorKey: {
687
+ "chart-1": string;
688
+ "chart-2": string;
689
+ "chart-3": string;
690
+ "chart-4": string;
691
+ "chart-5": string;
692
+ brand: string;
693
+ success: string;
694
+ warning: string;
695
+ danger: string;
696
+ info: string;
697
+ neutral: string;
698
+ };
699
+ }, undefined, import('tailwind-variants').TVReturnType<{
700
+ colorKey: {
701
+ "chart-1": string;
702
+ "chart-2": string;
703
+ "chart-3": string;
704
+ "chart-4": string;
705
+ "chart-5": string;
706
+ brand: string;
707
+ success: string;
708
+ warning: string;
709
+ danger: string;
710
+ info: string;
711
+ neutral: string;
712
+ };
713
+ }, undefined, "shrink-0 transition-colors duration-150", unknown, unknown, undefined>>;
714
+ export declare const ganttFilterOptionLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-w-0 flex-1 truncate text-body-sm text-fg-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-w-0 flex-1 truncate text-body-sm text-fg-default", unknown, unknown, undefined>>;
715
+ /** Contagem por opção, e o "Todas" do título do grupo. */
716
+ export declare const ganttFilterOptionCount: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "shrink-0 text-caption-sm tabular-nums text-fg-subtle", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "shrink-0 text-caption-sm tabular-nums text-fg-subtle", unknown, unknown, undefined>>;
717
+ /**
718
+ * A área abaixo da toolbar.
719
+ *
720
+ * ⚠️ A moldura é VARIANTE porque as duas visões a resolvem em lugares
721
+ * diferentes. Na `timeline` quem molda é este contêiner (os dois painéis vivem
722
+ * dentro dele e o divisor os separa). Na `calendar` quem molda é o
723
+ * `ganttMonthFrame`, que traz borda e radius próprios — deixar as duas ligadas
724
+ * desenhava **duas bordas concêntricas** separadas por 1px.
725
+ */
726
+ export declare const ganttBody: import('tailwind-variants').TVReturnType<{
727
+ framed: {
728
+ true: string;
729
+ false: string;
730
+ };
731
+ }, undefined, "flex min-h-0 flex-1 overflow-hidden", {
732
+ framed: {
733
+ true: string;
734
+ false: string;
735
+ };
736
+ }, undefined, import('tailwind-variants').TVReturnType<{
737
+ framed: {
738
+ true: string;
739
+ false: string;
740
+ };
741
+ }, undefined, "flex min-h-0 flex-1 overflow-hidden", unknown, unknown, undefined>>;
742
+ /** Painel esquerdo: a grade de linhas. */
743
+ export declare const ganttGridPane: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
744
+ /**
745
+ * Divisor arrastável entre os painéis.
746
+ *
747
+ * ## `w-[3px]`, e o alvo do ponteiro é maior que a linha
748
+ *
749
+ * Esta é a ÚNICA linha entre os dois painéis — o `ganttGridPane` não tem borda
750
+ * direita de propósito (ver a nota lá). Então a espessura dela é a espessura da
751
+ * separação.
752
+ *
753
+ * ⚠️ 3px, e a ordem em que chegamos aqui importa: passamos por 5px enquanto a
754
+ * cor ainda era `border-default`. Com a cor certa, 5px viraram excesso — era
755
+ * **contraste** que faltava, e espessura tinha sido usada como substituto. Se
756
+ * alguém for engrossar esta linha de novo, cheque primeiro se o problema não é
757
+ * a cor: foi duas vezes.
758
+ *
759
+ * O `after` estende o alvo do ponteiro 4px pra cada lado — 11px de área contra
760
+ * 3px de linha. Alvo do tamanho da linha é frustrante mesmo com mouse, e aqui a
761
+ * linha é fina por decisão visual, não por ser pequena de propósito.
762
+ *
763
+ * ## `bg-scrollbar-thumb` e não `border-default`
764
+ *
765
+ * Este componente tem TRÊS degraus de linha, e eles precisam ser distinguíveis
766
+ * por cor, não só por espessura. ΔL contra a superfície onde cada uma vive:
767
+ *
768
+ * papel token dark light
769
+ * coluna do dia (1px) border-subtle 0.031 0.069
770
+ * virada de mês (2px) border-input 0.062 0.124
771
+ * os dois painéis (3px) bg-scrollbar-thumb/70 0.132 0.171
772
+ *
773
+ * ⚠️ O `/70` é diluição DELIBERADA, não descuido. Em 24% cheios (0.186/0.240) a
774
+ * linha ficou forte demais — ela é estrutura de fundo, e competia com a barra,
775
+ * que é conteúdo. E não há degrau intermediário no vocabulário neutro: entre
776
+ * `scrollbar-thumb` (24%) e `border-input` (8%) só existe `bg-accent-hover`
777
+ * (16%), cujo nome é de ESTADO — usar um token `-hover` como preenchimento em
778
+ * repouso engana quem lê depois.
779
+ *
780
+ * Diluir o token certo é mais honesto que apropriar o token errado, e o DS já
781
+ * faz isso em `bg-bg-subtle/50` e `bg-bg-brand/30` neste mesmo arquivo. ⛔ Não
782
+ * confundir com a L-001, que proíbe alpha em token de **ring** (lá o alpha já
783
+ * vem embutido).
784
+ *
785
+ * Era `border-default`, que dá **0.040 no dark** — praticamente a linha de
786
+ * coluna (0.031). Um separador de painel que some é pior que uma linha de 1px
787
+ * que se vê: a espessura promete estrutura e a cor não entrega.
788
+ *
789
+ * ⚠️ `bg-scrollbar-thumb` NÃO é oportunismo de valor — é o token cujo papel
790
+ * casa: "barra neutra fina que o usuário agarra". É literalmente o que este
791
+ * divisor é. Descartei `border-input` (viraria a MESMA cor da virada de mês,
792
+ * achatando o sistema em dois degraus) e `bg-accent-hover` (número bom, mas
793
+ * usar um token `-hover` como preenchimento em repouso engana quem lê depois).
794
+ *
795
+ * ⚠️ Não existe degrau neutro mais forte que sirva nos dois modos: os tokens de
796
+ * `bg-emphasis`/`bg-accent` sobem no dark e DESCEM no light (0.060 contra os
797
+ * 0.092 de hoje). Se precisar de mais, o próximo passo é `fg-disabled`
798
+ * (0.135/0.298) — e aí já é uma barra cinza, não uma divisória.
799
+ */
800
+ export declare const ganttSplitter: import('tailwind-variants').TVReturnType<{
801
+ active: {
802
+ true: string;
803
+ false: string;
804
+ };
805
+ }, undefined, string[], {
806
+ active: {
807
+ true: string;
808
+ false: string;
809
+ };
810
+ }, undefined, import('tailwind-variants').TVReturnType<{
811
+ active: {
812
+ true: string;
813
+ false: string;
814
+ };
815
+ }, undefined, string[], unknown, unknown, undefined>>;
816
+ /** Painel direito: cabeçalho fixo + canvas rolável. */
817
+ export declare const ganttTimelinePane: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex min-w-0 min-h-0 flex-1 flex-col", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex min-w-0 min-h-0 flex-1 flex-col", unknown, unknown, undefined>>;
818
+ /**
819
+ * Cabeçalho do eixo.
820
+ *
821
+ * ⚠️ **Vive DENTRO do scroller horizontal**, não fora dele.
822
+ *
823
+ * Fora, ele ficava imóvel enquanto o canvas rolava para o lado — as colunas do
824
+ * eixo desalinhavam das colunas da grade, e o rótulo "12" passava a ficar em
825
+ * cima do dia 20. Foi o defeito #5 reportado.
826
+ *
827
+ * `sticky top-0` prende só na VERTICAL: rolando pra baixo o cabeçalho fica,
828
+ * rolando pra o lado ele acompanha. É o comportamento que as 13 referências
829
+ * têm, e ele só é possível com o cabeçalho e o canvas no mesmo contêiner
830
+ * rolável.
831
+ */
832
+ export declare const ganttHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
833
+ /**
834
+ * Faixa do cabeçalho — `relative`, e as células dentro são ABSOLUTAS.
835
+ *
836
+ * ⚠️ Era `flex`, e é o defeito #5b: com `pxPerDay` fracionário (trimestre =
837
+ * 190/91 ≈ 2.088px/dia) o fluxo do flex acumula a largura item a item e o
838
+ * navegador arredonda cada caixa ao pixel do dispositivo, enquanto as colunas
839
+ * do canvas são posicionadas por `left` absoluto. As duas contas dão o mesmo
840
+ * número em ponto flutuante e pixels DIFERENTES na tela — as divisórias do
841
+ * grupo, da unidade e do conteúdo saíam desalinhadas ao longo do eixo.
842
+ *
843
+ * Em `day` o efeito não aparecia porque 46px/dia é inteiro. É a L-038 outra
844
+ * vez: a mesma posição derivada em dois lugares. Agora as TRÊS camadas leem
845
+ * `dateToX`.
846
+ */
847
+ export declare const ganttHeadRow: import('tailwind-variants').TVReturnType<{
848
+ level: {
849
+ /** Nível de cima: mês/ano. Divisória mais forte entre grupos. */
850
+ group: string;
851
+ /** Nível de baixo: a unidade da grade. */
852
+ unit: string;
853
+ };
854
+ }, undefined, "relative", {
855
+ level: {
856
+ /** Nível de cima: mês/ano. Divisória mais forte entre grupos. */
857
+ group: string;
858
+ /** Nível de baixo: a unidade da grade. */
859
+ unit: string;
860
+ };
861
+ }, undefined, import('tailwind-variants').TVReturnType<{
862
+ level: {
863
+ /** Nível de cima: mês/ano. Divisória mais forte entre grupos. */
864
+ group: string;
865
+ /** Nível de baixo: a unidade da grade. */
866
+ unit: string;
867
+ };
868
+ }, undefined, "relative", unknown, unknown, undefined>>;
869
+ export declare const ganttHeadCell: import('tailwind-variants').TVReturnType<{
870
+ level: {
871
+ group: string;
872
+ /**
873
+ * #10 — a unidade EMPILHA: abreviação do dia em cima, número embaixo e
874
+ * maior. Lado a lado (`S 21`), o par competia por largura com a
875
+ * divisória; empilhado, a data ganha peso e a abreviação vira legenda.
876
+ */
877
+ unit: string;
878
+ };
879
+ /** Fim de semana: coluna sombreada, e o rótulo desce um tom. */
880
+ weekend: {
881
+ true: string;
882
+ false: string;
883
+ };
884
+ today: {
885
+ true: string;
886
+ false: string;
887
+ };
888
+ /** #2 — coluna selecionada por clique: cabeçalho no verde da marca. */
889
+ selected: {
890
+ true: string;
891
+ false: string;
892
+ };
893
+ /**
894
+ * #1 — última unidade de um grupo (o último dia do mês, em `day`).
895
+ *
896
+ * Divisória mais grossa e mais clara, atravessando o cabeçalho inteiro e o
897
+ * conteúdo: é o que faz o mês ler como um BLOCO em vez de uma fileira
898
+ * contínua de dias. O limite vem de `axis.groups`, então acompanha a escala
899
+ * — vira mês em `day`/`week` e ano em `month`/`quarter`.
900
+ *
901
+ * ⚠️ `border-input` foi ESCOLHIDO por medição, não por nome. ΔL de cada
902
+ * candidato contra a superfície onde a linha vive:
903
+ *
904
+ * token dark (bg 0.225) light (bg 1.0) × a linha comum
905
+ * border-subtle (comum) 0.031 0.069 1.0×
906
+ * border-default 0.040 0.092 1.3× / 1.3×
907
+ * border-input 0.062 0.124 2.0× / 1.8×
908
+ * chart-grid 0.093 0.092 3.0× / 1.3×
909
+ *
910
+ * Três voltas até aqui, e cada uma ensinou algo:
911
+ *
912
+ * 1. `border-default` a 2px ficou **invisível** — 0.040 contra 0.031 é a MESMA
913
+ * linha. Eu tinha medido que o valor do token mudou, não que a mudança se
914
+ * vê; espessura não compra o que falta em contraste.
915
+ * 2. `chart-grid` a 3px resolveu o contraste e passou do ponto nos dois
916
+ * eixos: 3px vira moldura, e 3× a linha comum vira estrutura competindo
917
+ * com a barra.
918
+ * 3. `border-input` a 2px é o degrau do meio, e é o único candidato que fica
919
+ * em ~2× nos DOIS modos — por isso não precisa de par `dark:`. Menos
920
+ * classe e sem risco de os dois modos divergirem na próxima edição.
921
+ *
922
+ * ⛔ Não meça isto durante a transição: a coluna tem `transition-colors`, e
923
+ * ler no meio dela devolve o valor interpolado (serializado em `oklab`, que é
924
+ * a pista). Já me enganou uma vez nesta mesma linha.
925
+ *
926
+ * ⛔ Não troque por um token de marca: o verde já significa "hoje" e
927
+ * "selecionado" aqui, e a virada de mês não é nem uma nem outra.
928
+ */
929
+ boundary: {
930
+ true: string;
931
+ false: string;
932
+ };
933
+ }, undefined, string[], {
934
+ level: {
935
+ group: string;
936
+ /**
937
+ * #10 — a unidade EMPILHA: abreviação do dia em cima, número embaixo e
938
+ * maior. Lado a lado (`S 21`), o par competia por largura com a
939
+ * divisória; empilhado, a data ganha peso e a abreviação vira legenda.
940
+ */
941
+ unit: string;
942
+ };
943
+ /** Fim de semana: coluna sombreada, e o rótulo desce um tom. */
944
+ weekend: {
945
+ true: string;
946
+ false: string;
947
+ };
948
+ today: {
949
+ true: string;
950
+ false: string;
951
+ };
952
+ /** #2 — coluna selecionada por clique: cabeçalho no verde da marca. */
953
+ selected: {
954
+ true: string;
955
+ false: string;
956
+ };
957
+ /**
958
+ * #1 — última unidade de um grupo (o último dia do mês, em `day`).
959
+ *
960
+ * Divisória mais grossa e mais clara, atravessando o cabeçalho inteiro e o
961
+ * conteúdo: é o que faz o mês ler como um BLOCO em vez de uma fileira
962
+ * contínua de dias. O limite vem de `axis.groups`, então acompanha a escala
963
+ * — vira mês em `day`/`week` e ano em `month`/`quarter`.
964
+ *
965
+ * ⚠️ `border-input` foi ESCOLHIDO por medição, não por nome. ΔL de cada
966
+ * candidato contra a superfície onde a linha vive:
967
+ *
968
+ * token dark (bg 0.225) light (bg 1.0) × a linha comum
969
+ * border-subtle (comum) 0.031 0.069 1.0×
970
+ * border-default 0.040 0.092 1.3× / 1.3×
971
+ * border-input 0.062 0.124 2.0× / 1.8×
972
+ * chart-grid 0.093 0.092 3.0× / 1.3×
973
+ *
974
+ * Três voltas até aqui, e cada uma ensinou algo:
975
+ *
976
+ * 1. `border-default` a 2px ficou **invisível** — 0.040 contra 0.031 é a MESMA
977
+ * linha. Eu tinha medido que o valor do token mudou, não que a mudança se
978
+ * vê; espessura não compra o que falta em contraste.
979
+ * 2. `chart-grid` a 3px resolveu o contraste e passou do ponto nos dois
980
+ * eixos: 3px vira moldura, e 3× a linha comum vira estrutura competindo
981
+ * com a barra.
982
+ * 3. `border-input` a 2px é o degrau do meio, e é o único candidato que fica
983
+ * em ~2× nos DOIS modos — por isso não precisa de par `dark:`. Menos
984
+ * classe e sem risco de os dois modos divergirem na próxima edição.
985
+ *
986
+ * ⛔ Não meça isto durante a transição: a coluna tem `transition-colors`, e
987
+ * ler no meio dela devolve o valor interpolado (serializado em `oklab`, que é
988
+ * a pista). Já me enganou uma vez nesta mesma linha.
989
+ *
990
+ * ⛔ Não troque por um token de marca: o verde já significa "hoje" e
991
+ * "selecionado" aqui, e a virada de mês não é nem uma nem outra.
992
+ */
993
+ boundary: {
994
+ true: string;
995
+ false: string;
996
+ };
997
+ }, undefined, import('tailwind-variants').TVReturnType<{
998
+ level: {
999
+ group: string;
1000
+ /**
1001
+ * #10 — a unidade EMPILHA: abreviação do dia em cima, número embaixo e
1002
+ * maior. Lado a lado (`S 21`), o par competia por largura com a
1003
+ * divisória; empilhado, a data ganha peso e a abreviação vira legenda.
1004
+ */
1005
+ unit: string;
1006
+ };
1007
+ /** Fim de semana: coluna sombreada, e o rótulo desce um tom. */
1008
+ weekend: {
1009
+ true: string;
1010
+ false: string;
1011
+ };
1012
+ today: {
1013
+ true: string;
1014
+ false: string;
1015
+ };
1016
+ /** #2 — coluna selecionada por clique: cabeçalho no verde da marca. */
1017
+ selected: {
1018
+ true: string;
1019
+ false: string;
1020
+ };
1021
+ /**
1022
+ * #1 — última unidade de um grupo (o último dia do mês, em `day`).
1023
+ *
1024
+ * Divisória mais grossa e mais clara, atravessando o cabeçalho inteiro e o
1025
+ * conteúdo: é o que faz o mês ler como um BLOCO em vez de uma fileira
1026
+ * contínua de dias. O limite vem de `axis.groups`, então acompanha a escala
1027
+ * — vira mês em `day`/`week` e ano em `month`/`quarter`.
1028
+ *
1029
+ * ⚠️ `border-input` foi ESCOLHIDO por medição, não por nome. ΔL de cada
1030
+ * candidato contra a superfície onde a linha vive:
1031
+ *
1032
+ * token dark (bg 0.225) light (bg 1.0) × a linha comum
1033
+ * border-subtle (comum) 0.031 0.069 1.0×
1034
+ * border-default 0.040 0.092 1.3× / 1.3×
1035
+ * border-input 0.062 0.124 2.0× / 1.8×
1036
+ * chart-grid 0.093 0.092 3.0× / 1.3×
1037
+ *
1038
+ * Três voltas até aqui, e cada uma ensinou algo:
1039
+ *
1040
+ * 1. `border-default` a 2px ficou **invisível** — 0.040 contra 0.031 é a MESMA
1041
+ * linha. Eu tinha medido que o valor do token mudou, não que a mudança se
1042
+ * vê; espessura não compra o que falta em contraste.
1043
+ * 2. `chart-grid` a 3px resolveu o contraste e passou do ponto nos dois
1044
+ * eixos: 3px vira moldura, e 3× a linha comum vira estrutura competindo
1045
+ * com a barra.
1046
+ * 3. `border-input` a 2px é o degrau do meio, e é o único candidato que fica
1047
+ * em ~2× nos DOIS modos — por isso não precisa de par `dark:`. Menos
1048
+ * classe e sem risco de os dois modos divergirem na próxima edição.
1049
+ *
1050
+ * ⛔ Não meça isto durante a transição: a coluna tem `transition-colors`, e
1051
+ * ler no meio dela devolve o valor interpolado (serializado em `oklab`, que é
1052
+ * a pista). Já me enganou uma vez nesta mesma linha.
1053
+ *
1054
+ * ⛔ Não troque por um token de marca: o verde já significa "hoje" e
1055
+ * "selecionado" aqui, e a virada de mês não é nem uma nem outra.
1056
+ */
1057
+ boundary: {
1058
+ true: string;
1059
+ false: string;
1060
+ };
1061
+ }, undefined, string[], unknown, unknown, undefined>>;
1062
+ /**
1063
+ * Abreviação do dia da semana — a linha de cima da célula.
1064
+ *
1065
+ * `caption-xs` e cor `subtle`: é legenda da data, não a informação. Com o mesmo
1066
+ * peso do número, os dois competiam e a coluna virava um bloco de texto.
1067
+ */
1068
+ export declare const ganttHeadWeekday: import('tailwind-variants').TVReturnType<{
1069
+ weekend: {
1070
+ true: string;
1071
+ false: string;
1072
+ };
1073
+ }, undefined, "text-caption-xs leading-none text-fg-subtle", {
1074
+ weekend: {
1075
+ true: string;
1076
+ false: string;
1077
+ };
1078
+ }, undefined, import('tailwind-variants').TVReturnType<{
1079
+ weekend: {
1080
+ true: string;
1081
+ false: string;
1082
+ };
1083
+ }, undefined, "text-caption-xs leading-none text-fg-subtle", unknown, unknown, undefined>>;
1084
+ /** O número do dia. `tabular-nums` pra a coluna não dançar entre 9 e 10. */
1085
+ export declare const ganttHeadDayNumber: import('tailwind-variants').TVReturnType<{
1086
+ today: {
1087
+ true: string;
1088
+ false: string;
1089
+ };
1090
+ }, undefined, "mt-[2px] text-body-sm leading-none tabular-nums", {
1091
+ today: {
1092
+ true: string;
1093
+ false: string;
1094
+ };
1095
+ }, undefined, import('tailwind-variants').TVReturnType<{
1096
+ today: {
1097
+ true: string;
1098
+ false: string;
1099
+ };
1100
+ }, undefined, "mt-[2px] text-body-sm leading-none tabular-nums", unknown, unknown, undefined>>;
1101
+ /** Cabeçalho da grade esquerda — alinha com os dois níveis da direita. */
1102
+ /**
1103
+ * Cabeçalho da grade esquerda.
1104
+ *
1105
+ * ⚠️ `items-center` e não `items-end`.
1106
+ *
1107
+ * O cabeçalho tem a altura dos DOIS níveis do eixo da direita (68px), mas do
1108
+ * lado esquerdo existe um nível só. Alinhado embaixo, ele deixava ~38px de área
1109
+ * branca acima dos rótulos, e a grade parecia começar torta em relação ao eixo.
1110
+ * Centrado, o espaço se distribui e os dois lados leem como o mesmo cabeçalho.
1111
+ */
1112
+ export declare const ganttGridHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1113
+ export declare const ganttGridHeadCell: import('tailwind-variants').TVReturnType<{
1114
+ align: {
1115
+ left: string;
1116
+ center: string;
1117
+ right: string;
1118
+ };
1119
+ }, undefined, string[], {
1120
+ align: {
1121
+ left: string;
1122
+ center: string;
1123
+ right: string;
1124
+ };
1125
+ }, undefined, import('tailwind-variants').TVReturnType<{
1126
+ align: {
1127
+ left: string;
1128
+ center: string;
1129
+ right: string;
1130
+ };
1131
+ }, undefined, string[], unknown, unknown, undefined>>;
1132
+ /** Linha da grade esquerda. */
1133
+ export declare const ganttGridRow: import('tailwind-variants').TVReturnType<{
1134
+ type: {
1135
+ task: string;
1136
+ /** `summary` é agrupador: peso maior e fundo levemente destacado. */
1137
+ summary: string;
1138
+ milestone: string;
1139
+ };
1140
+ /**
1141
+ * #7 — linha selecionada, no verde da marca.
1142
+ *
1143
+ * Mesma leitura da linha selecionada do `DataTable`: a cor da marca diz "é
1144
+ * esta que estou olhando". Vence o hover no `compoundVariant` abaixo —
1145
+ * senão passar o mouse sobre a linha selecionada a apagava.
1146
+ */
1147
+ selected: {
1148
+ true: string;
1149
+ false: string;
1150
+ };
1151
+ /**
1152
+ * #3 — hover CRUZADO, controlado por estado e não por `:hover` do CSS.
1153
+ *
1154
+ * `:hover` só acende o elemento sob o cursor, e aqui a linha vive em DOIS
1155
+ * painéis irmãos: passar o mouse no nome tem que acender a faixa da barra e
1156
+ * vice-versa. Nenhum seletor CSS alcança um irmão de outro contêiner, então
1157
+ * o índice da linha sob o cursor é estado do React.
1158
+ *
1159
+ * ⚠️ `bg-bg-muted` e não `bg-bg-subtle`: no dark, `subtle` é
1160
+ * `oklch(1 0 0 / 0.01)` — 1% de branco, que é **invisível** na prática.
1161
+ * Medi o hover e o antes/depois diferiam em 1 centésimo de alfa. `muted` é
1162
+ * 3%, e ainda foi preciso somar a borda pra o realce se ler.
1163
+ */
1164
+ hovered: {
1165
+ true: string;
1166
+ false: string;
1167
+ };
1168
+ }, undefined, string[], {
1169
+ type: {
1170
+ task: string;
1171
+ /** `summary` é agrupador: peso maior e fundo levemente destacado. */
1172
+ summary: string;
1173
+ milestone: string;
1174
+ };
1175
+ /**
1176
+ * #7 — linha selecionada, no verde da marca.
1177
+ *
1178
+ * Mesma leitura da linha selecionada do `DataTable`: a cor da marca diz "é
1179
+ * esta que estou olhando". Vence o hover no `compoundVariant` abaixo —
1180
+ * senão passar o mouse sobre a linha selecionada a apagava.
1181
+ */
1182
+ selected: {
1183
+ true: string;
1184
+ false: string;
1185
+ };
1186
+ /**
1187
+ * #3 — hover CRUZADO, controlado por estado e não por `:hover` do CSS.
1188
+ *
1189
+ * `:hover` só acende o elemento sob o cursor, e aqui a linha vive em DOIS
1190
+ * painéis irmãos: passar o mouse no nome tem que acender a faixa da barra e
1191
+ * vice-versa. Nenhum seletor CSS alcança um irmão de outro contêiner, então
1192
+ * o índice da linha sob o cursor é estado do React.
1193
+ *
1194
+ * ⚠️ `bg-bg-muted` e não `bg-bg-subtle`: no dark, `subtle` é
1195
+ * `oklch(1 0 0 / 0.01)` — 1% de branco, que é **invisível** na prática.
1196
+ * Medi o hover e o antes/depois diferiam em 1 centésimo de alfa. `muted` é
1197
+ * 3%, e ainda foi preciso somar a borda pra o realce se ler.
1198
+ */
1199
+ hovered: {
1200
+ true: string;
1201
+ false: string;
1202
+ };
1203
+ }, undefined, import('tailwind-variants').TVReturnType<{
1204
+ type: {
1205
+ task: string;
1206
+ /** `summary` é agrupador: peso maior e fundo levemente destacado. */
1207
+ summary: string;
1208
+ milestone: string;
1209
+ };
1210
+ /**
1211
+ * #7 — linha selecionada, no verde da marca.
1212
+ *
1213
+ * Mesma leitura da linha selecionada do `DataTable`: a cor da marca diz "é
1214
+ * esta que estou olhando". Vence o hover no `compoundVariant` abaixo —
1215
+ * senão passar o mouse sobre a linha selecionada a apagava.
1216
+ */
1217
+ selected: {
1218
+ true: string;
1219
+ false: string;
1220
+ };
1221
+ /**
1222
+ * #3 — hover CRUZADO, controlado por estado e não por `:hover` do CSS.
1223
+ *
1224
+ * `:hover` só acende o elemento sob o cursor, e aqui a linha vive em DOIS
1225
+ * painéis irmãos: passar o mouse no nome tem que acender a faixa da barra e
1226
+ * vice-versa. Nenhum seletor CSS alcança um irmão de outro contêiner, então
1227
+ * o índice da linha sob o cursor é estado do React.
1228
+ *
1229
+ * ⚠️ `bg-bg-muted` e não `bg-bg-subtle`: no dark, `subtle` é
1230
+ * `oklch(1 0 0 / 0.01)` — 1% de branco, que é **invisível** na prática.
1231
+ * Medi o hover e o antes/depois diferiam em 1 centésimo de alfa. `muted` é
1232
+ * 3%, e ainda foi preciso somar a borda pra o realce se ler.
1233
+ */
1234
+ hovered: {
1235
+ true: string;
1236
+ false: string;
1237
+ };
1238
+ }, undefined, string[], unknown, unknown, undefined>>;
1239
+ /**
1240
+ * Célula da grade.
1241
+ *
1242
+ * ⚠️ `text-body-sm` na base NÃO é redundante com o `ganttGridLabelText`.
1243
+ *
1244
+ * Só a PRIMEIRA célula usa aquele estilo; as outras (data, duração, %) não
1245
+ * tinham preset nenhum e herdavam os **16px do body** — medido: numa linha de
1246
+ * 44px a data renderizava em 16px, quase o dobro do vizinho, e a coluna parecia
1247
+ * outro componente. É a L-007 na prática: tipografia avulsa por omissão.
1248
+ */
1249
+ export declare const ganttGridCell: import('tailwind-variants').TVReturnType<{
1250
+ align: {
1251
+ left: string;
1252
+ center: string;
1253
+ right: string;
1254
+ };
1255
+ /** Coluna de número/data: `tabular-nums` pra alinhar dígito com dígito. */
1256
+ numeric: {
1257
+ true: string;
1258
+ false: string;
1259
+ };
1260
+ /**
1261
+ * #6 — hierarquia dentro da linha.
1262
+ *
1263
+ * O nome da tarefa é a informação; data, duração e responsável são apoio.
1264
+ * Com todos em `fg-default` e o mesmo peso, as quatro colunas disputavam a
1265
+ * atenção e a grade lia como um bloco de texto. `muted` + `font-normal`
1266
+ * recua o apoio sem escondê-lo.
1267
+ */
1268
+ tone: {
1269
+ default: string;
1270
+ muted: string;
1271
+ };
1272
+ }, undefined, string[], {
1273
+ align: {
1274
+ left: string;
1275
+ center: string;
1276
+ right: string;
1277
+ };
1278
+ /** Coluna de número/data: `tabular-nums` pra alinhar dígito com dígito. */
1279
+ numeric: {
1280
+ true: string;
1281
+ false: string;
1282
+ };
1283
+ /**
1284
+ * #6 — hierarquia dentro da linha.
1285
+ *
1286
+ * O nome da tarefa é a informação; data, duração e responsável são apoio.
1287
+ * Com todos em `fg-default` e o mesmo peso, as quatro colunas disputavam a
1288
+ * atenção e a grade lia como um bloco de texto. `muted` + `font-normal`
1289
+ * recua o apoio sem escondê-lo.
1290
+ */
1291
+ tone: {
1292
+ default: string;
1293
+ muted: string;
1294
+ };
1295
+ }, undefined, import('tailwind-variants').TVReturnType<{
1296
+ align: {
1297
+ left: string;
1298
+ center: string;
1299
+ right: string;
1300
+ };
1301
+ /** Coluna de número/data: `tabular-nums` pra alinhar dígito com dígito. */
1302
+ numeric: {
1303
+ true: string;
1304
+ false: string;
1305
+ };
1306
+ /**
1307
+ * #6 — hierarquia dentro da linha.
1308
+ *
1309
+ * O nome da tarefa é a informação; data, duração e responsável são apoio.
1310
+ * Com todos em `fg-default` e o mesmo peso, as quatro colunas disputavam a
1311
+ * atenção e a grade lia como um bloco de texto. `muted` + `font-normal`
1312
+ * recua o apoio sem escondê-lo.
1313
+ */
1314
+ tone: {
1315
+ default: string;
1316
+ muted: string;
1317
+ };
1318
+ }, undefined, string[], unknown, unknown, undefined>>;
1319
+ /**
1320
+ * #1 — a linha `summary` é um CABEÇALHO de grupo, não uma linha de dados.
1321
+ *
1322
+ * Ela atravessa a grade inteira em vez de caber na primeira coluna. Confinada,
1323
+ * "1. Descoberta e escopo" truncava em "1. Desco…" com as colunas de Duração e
1324
+ * Resp. vazias ao lado — texto cortado por causa de espaço que estava logo ali,
1325
+ * sem uso. É o mesmo tratamento que linha de grupo recebe em data grid.
1326
+ */
1327
+ export declare const ganttGridGroupCell: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1328
+ /**
1329
+ * Conectores de árvore — o "├" e o "└" que ligam a linha ao pai.
1330
+ *
1331
+ * ## Por que virou conector e não guia
1332
+ *
1333
+ * A primeira versão desenhava só a vertical por nível ("guia"), e ficou ruim:
1334
+ * a linha passava ao lado do nome sem tocá-lo, então lia como divisória de
1335
+ * coluna, não como vínculo. O que diz "sou filho DESTE" é o **cotovelo** — a
1336
+ * vertical que desce do pai e vira à direita na altura do meu texto.
1337
+ *
1338
+ * ## Anatomia de uma coluna de recuo
1339
+ *
1340
+ * Cada nível de profundidade tem uma coluna de 16px. Numa linha em `depth d`:
1341
+ *
1342
+ * colunas 0 .. d-2 → PASS-THROUGH: só a vertical, e só se o ancestral
1343
+ * daquele nível ainda tiver irmão abaixo
1344
+ * coluna d-1 → o COTOVELO desta linha:
1345
+ * vertical do topo até o meio (sempre)
1346
+ * + vertical do meio até a base (só se NÃO for o último)
1347
+ * + horizontal do meio até a direita (sempre)
1348
+ *
1349
+ * Anatomia copiada do `hierarchicalLayout` do `List`, que é a implementação
1350
+ * que já pagou o preço de acertar o índice (L-045).
1351
+ */
1352
+ export declare const ganttTreeRail: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "pointer-events-none absolute inset-y-0 left-pad-2xl", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "pointer-events-none absolute inset-y-0 left-pad-2xl", unknown, unknown, undefined>>;
1353
+ /**
1354
+ * Uma coluna de recuo. `relative` porque os segmentos se posicionam dentro dela.
1355
+ *
1356
+ * ⚠️ A largura tem que ser a MESMA do `paddingLeft: depth * 16` do rótulo. As
1357
+ * duas medidas são a mesma coisa em lugares diferentes — se divergirem, o
1358
+ * cotovelo aponta pro vazio ao lado do texto (L-038).
1359
+ */
1360
+ export declare const ganttTreeColumn: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "absolute inset-y-0 w-[16px]", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "absolute inset-y-0 w-[16px]", unknown, unknown, undefined>>;
1361
+ /**
1362
+ * Um segmento de linha do conector.
1363
+ *
1364
+ * ⚠️ `border-input`, e cheguei nele **errando duas vezes o mesmo raciocínio**.
1365
+ * ΔL sobre a superfície da grade, no dark:
1366
+ *
1367
+ * border-subtle 0.031 = a divisória de linha. O conector se dissolvia
1368
+ * DENTRO da grade — virava mais uma linha da malha.
1369
+ * border-default 0.040 1ª tentativa. Escrevi aqui que "a linha é curta e o
1370
+ * olho segue o desenho, o degrau basta" — afirmação
1371
+ * que eu NÃO verifiquei. Na tela não se via nada.
1372
+ * border-input 0.062 2× a divisória. O conector é um GRAFO deliberado,
1373
+ * não fundo: tem que ganhar da malha que atravessa.
1374
+ *
1375
+ * A lição é a mesma que já me pegou na virada de mês e no divisor dos painéis:
1376
+ * trocar de token e conferir que o VALOR mudou não é conferir que a mudança se
1377
+ * VÊ. Aqui eu ainda por cima escrevi a garantia no comentário (L-060).
1378
+ */
1379
+ export declare const ganttTreeSegment: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "absolute bg-border-input", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "absolute bg-border-input", unknown, unknown, undefined>>;
1380
+ export declare const ganttGridLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex min-w-0 flex-col justify-center", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex min-w-0 flex-col justify-center", unknown, unknown, undefined>>;
1381
+ export declare const ganttGridLabelText: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "truncate text-body-sm text-fg-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "truncate text-body-sm text-fg-default", unknown, unknown, undefined>>;
1382
+ export declare const ganttGridSublabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "truncate text-caption-sm font-normal text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "truncate text-caption-sm font-normal text-fg-muted", unknown, unknown, undefined>>;
1383
+ /**
1384
+ * Chevron do collapse.
1385
+ *
1386
+ * Rotação e não dois ícones: com dois ícones o nó troca no DOM e a transição
1387
+ * não acontece — o chevron "pisca" em vez de girar.
1388
+ */
1389
+ export declare const ganttChevron: import('tailwind-variants').TVReturnType<{
1390
+ open: {
1391
+ true: string;
1392
+ false: string;
1393
+ };
1394
+ /** Folha: reserva o espaço sem desenhar o chevron, pra o rótulo alinhar. */
1395
+ hidden: {
1396
+ true: string;
1397
+ false: string;
1398
+ };
1399
+ }, undefined, string[], {
1400
+ open: {
1401
+ true: string;
1402
+ false: string;
1403
+ };
1404
+ /** Folha: reserva o espaço sem desenhar o chevron, pra o rótulo alinhar. */
1405
+ hidden: {
1406
+ true: string;
1407
+ false: string;
1408
+ };
1409
+ }, undefined, import('tailwind-variants').TVReturnType<{
1410
+ open: {
1411
+ true: string;
1412
+ false: string;
1413
+ };
1414
+ /** Folha: reserva o espaço sem desenhar o chevron, pra o rótulo alinhar. */
1415
+ hidden: {
1416
+ true: string;
1417
+ false: string;
1418
+ };
1419
+ }, undefined, string[], unknown, unknown, undefined>>;
1420
+ export declare const ganttCanvasScroll: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
1421
+ /** Camada de posicionamento — `relative`, e é a origem de todo `top`/`left`. */
1422
+ export declare const ganttCanvas: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "relative", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "relative", unknown, unknown, undefined>>;
1423
+ /** Linha de fundo do canvas — o par visual da linha da grade esquerda. */
1424
+ export declare const ganttCanvasRow: import('tailwind-variants').TVReturnType<{
1425
+ type: {
1426
+ task: string;
1427
+ summary: string;
1428
+ milestone: string;
1429
+ };
1430
+ hovered: {
1431
+ true: string;
1432
+ false: string;
1433
+ };
1434
+ selected: {
1435
+ true: string;
1436
+ false: string;
1437
+ };
1438
+ }, undefined, string[], {
1439
+ type: {
1440
+ task: string;
1441
+ summary: string;
1442
+ milestone: string;
1443
+ };
1444
+ hovered: {
1445
+ true: string;
1446
+ false: string;
1447
+ };
1448
+ selected: {
1449
+ true: string;
1450
+ false: string;
1451
+ };
1452
+ }, undefined, import('tailwind-variants').TVReturnType<{
1453
+ type: {
1454
+ task: string;
1455
+ summary: string;
1456
+ milestone: string;
1457
+ };
1458
+ hovered: {
1459
+ true: string;
1460
+ false: string;
1461
+ };
1462
+ selected: {
1463
+ true: string;
1464
+ false: string;
1465
+ };
1466
+ }, undefined, string[], unknown, unknown, undefined>>;
1467
+ /** Coluna vertical de grade, sombreando fim de semana. */
1468
+ export declare const ganttGridColumn: import('tailwind-variants').TVReturnType<{
1469
+ weekend: {
1470
+ true: string;
1471
+ false: string;
1472
+ };
1473
+ /** Coluna sob o cursor — a outra metade da mira. */
1474
+ hovered: {
1475
+ true: string;
1476
+ false: string;
1477
+ };
1478
+ /** #7 — coluna da linha selecionada, no verde da marca. */
1479
+ selected: {
1480
+ true: string;
1481
+ false: string;
1482
+ };
1483
+ /**
1484
+ * #1 — virada de mês/ano: o par da divisória do cabeçalho, MESMAS classes.
1485
+ * A tabela de ΔL que justifica a escolha do token está no `ganttHeadCell`.
1486
+ */
1487
+ boundary: {
1488
+ true: string;
1489
+ false: string;
1490
+ };
1491
+ }, undefined, string[], {
1492
+ weekend: {
1493
+ true: string;
1494
+ false: string;
1495
+ };
1496
+ /** Coluna sob o cursor — a outra metade da mira. */
1497
+ hovered: {
1498
+ true: string;
1499
+ false: string;
1500
+ };
1501
+ /** #7 — coluna da linha selecionada, no verde da marca. */
1502
+ selected: {
1503
+ true: string;
1504
+ false: string;
1505
+ };
1506
+ /**
1507
+ * #1 — virada de mês/ano: o par da divisória do cabeçalho, MESMAS classes.
1508
+ * A tabela de ΔL que justifica a escolha do token está no `ganttHeadCell`.
1509
+ */
1510
+ boundary: {
1511
+ true: string;
1512
+ false: string;
1513
+ };
1514
+ }, undefined, import('tailwind-variants').TVReturnType<{
1515
+ weekend: {
1516
+ true: string;
1517
+ false: string;
1518
+ };
1519
+ /** Coluna sob o cursor — a outra metade da mira. */
1520
+ hovered: {
1521
+ true: string;
1522
+ false: string;
1523
+ };
1524
+ /** #7 — coluna da linha selecionada, no verde da marca. */
1525
+ selected: {
1526
+ true: string;
1527
+ false: string;
1528
+ };
1529
+ /**
1530
+ * #1 — virada de mês/ano: o par da divisória do cabeçalho, MESMAS classes.
1531
+ * A tabela de ΔL que justifica a escolha do token está no `ganttHeadCell`.
1532
+ */
1533
+ boundary: {
1534
+ true: string;
1535
+ false: string;
1536
+ };
1537
+ }, undefined, string[], unknown, unknown, undefined>>;
1538
+ /**
1539
+ * A barra.
1540
+ *
1541
+ * `absolute` porque a posição vem de `left`/`width` calculados em px a partir da
1542
+ * data — não de grid nem de flex. Grid de N colunas parece mais limpo até a
1543
+ * primeira barra que começa às 14h de um dia: ela não cai em limite de coluna.
1544
+ */
1545
+ export declare const ganttBar: import('tailwind-variants').TVReturnType<{
1546
+ /**
1547
+ * ⚠️ A cor entra no fundo TINGIDO e no acento, nunca no texto — ver a nota
1548
+ * do topo. As chaves de chart usam `/14`, que é a mesma proporção do
1549
+ * `color-mix(… 14%, transparent)` com que o DS deriva os `-subtle`.
1550
+ */
1551
+ colorKey: {
1552
+ "chart-1": {
1553
+ root: string;
1554
+ accent: string;
1555
+ progress: string;
1556
+ };
1557
+ "chart-2": {
1558
+ root: string;
1559
+ accent: string;
1560
+ progress: string;
1561
+ };
1562
+ "chart-3": {
1563
+ root: string;
1564
+ accent: string;
1565
+ progress: string;
1566
+ };
1567
+ "chart-4": {
1568
+ root: string;
1569
+ accent: string;
1570
+ progress: string;
1571
+ };
1572
+ "chart-5": {
1573
+ root: string;
1574
+ accent: string;
1575
+ progress: string;
1576
+ };
1577
+ brand: {
1578
+ root: string;
1579
+ accent: string;
1580
+ progress: string;
1581
+ };
1582
+ success: {
1583
+ root: string;
1584
+ accent: string;
1585
+ progress: string;
1586
+ };
1587
+ warning: {
1588
+ root: string;
1589
+ accent: string;
1590
+ progress: string;
1591
+ };
1592
+ danger: {
1593
+ root: string;
1594
+ accent: string;
1595
+ progress: string;
1596
+ };
1597
+ info: {
1598
+ root: string;
1599
+ accent: string;
1600
+ progress: string;
1601
+ };
1602
+ neutral: {
1603
+ root: string;
1604
+ accent: string;
1605
+ progress: string;
1606
+ };
1607
+ };
1608
+ /**
1609
+ * `summary` é mais baixa e sem acento: ela agrega, não é trabalho. As
1610
+ * referências desenham as pontas viradas pra baixo; aqui o sinal é a altura
1611
+ * reduzida e o radius menor, que sobrevive em 4px de largura por dia.
1612
+ */
1613
+ type: {
1614
+ task: {
1615
+ root: string;
1616
+ };
1617
+ summary: {
1618
+ root: string;
1619
+ accent: string;
1620
+ };
1621
+ milestone: {
1622
+ root: string;
1623
+ accent: string;
1624
+ label: string;
1625
+ };
1626
+ };
1627
+ /** Barra que atravessa a janela: perde o canto e a borda daquele lado. */
1628
+ continuesBefore: {
1629
+ true: {
1630
+ root: string;
1631
+ };
1632
+ false: {};
1633
+ };
1634
+ continuesAfter: {
1635
+ true: {
1636
+ root: string;
1637
+ };
1638
+ false: {};
1639
+ };
1640
+ /** Vínculo violado — marcação não-cromática somada à cor. */
1641
+ conflict: {
1642
+ true: {
1643
+ root: string;
1644
+ };
1645
+ false: {};
1646
+ };
1647
+ /** No caminho crítico: anel externo, sem trocar a cor da categoria. */
1648
+ critical: {
1649
+ true: {
1650
+ root: string;
1651
+ };
1652
+ false: {};
1653
+ };
1654
+ dragging: {
1655
+ true: {
1656
+ root: string;
1657
+ };
1658
+ false: {};
1659
+ };
1660
+ movable: {
1661
+ true: {
1662
+ root: string;
1663
+ };
1664
+ false: {
1665
+ root: string;
1666
+ };
1667
+ };
1668
+ }, {
1669
+ root: string[];
1670
+ /** Acento sólido na borda esquerda — é AQUI que a cor viva mora. */
1671
+ accent: string;
1672
+ /** Preenchimento de progresso, sobre o tingido. */
1673
+ progress: string;
1674
+ label: string;
1675
+ }, undefined, {
1676
+ /**
1677
+ * ⚠️ A cor entra no fundo TINGIDO e no acento, nunca no texto — ver a nota
1678
+ * do topo. As chaves de chart usam `/14`, que é a mesma proporção do
1679
+ * `color-mix(… 14%, transparent)` com que o DS deriva os `-subtle`.
1680
+ */
1681
+ colorKey: {
1682
+ "chart-1": {
1683
+ root: string;
1684
+ accent: string;
1685
+ progress: string;
1686
+ };
1687
+ "chart-2": {
1688
+ root: string;
1689
+ accent: string;
1690
+ progress: string;
1691
+ };
1692
+ "chart-3": {
1693
+ root: string;
1694
+ accent: string;
1695
+ progress: string;
1696
+ };
1697
+ "chart-4": {
1698
+ root: string;
1699
+ accent: string;
1700
+ progress: string;
1701
+ };
1702
+ "chart-5": {
1703
+ root: string;
1704
+ accent: string;
1705
+ progress: string;
1706
+ };
1707
+ brand: {
1708
+ root: string;
1709
+ accent: string;
1710
+ progress: string;
1711
+ };
1712
+ success: {
1713
+ root: string;
1714
+ accent: string;
1715
+ progress: string;
1716
+ };
1717
+ warning: {
1718
+ root: string;
1719
+ accent: string;
1720
+ progress: string;
1721
+ };
1722
+ danger: {
1723
+ root: string;
1724
+ accent: string;
1725
+ progress: string;
1726
+ };
1727
+ info: {
1728
+ root: string;
1729
+ accent: string;
1730
+ progress: string;
1731
+ };
1732
+ neutral: {
1733
+ root: string;
1734
+ accent: string;
1735
+ progress: string;
1736
+ };
1737
+ };
1738
+ /**
1739
+ * `summary` é mais baixa e sem acento: ela agrega, não é trabalho. As
1740
+ * referências desenham as pontas viradas pra baixo; aqui o sinal é a altura
1741
+ * reduzida e o radius menor, que sobrevive em 4px de largura por dia.
1742
+ */
1743
+ type: {
1744
+ task: {
1745
+ root: string;
1746
+ };
1747
+ summary: {
1748
+ root: string;
1749
+ accent: string;
1750
+ };
1751
+ milestone: {
1752
+ root: string;
1753
+ accent: string;
1754
+ label: string;
1755
+ };
1756
+ };
1757
+ /** Barra que atravessa a janela: perde o canto e a borda daquele lado. */
1758
+ continuesBefore: {
1759
+ true: {
1760
+ root: string;
1761
+ };
1762
+ false: {};
1763
+ };
1764
+ continuesAfter: {
1765
+ true: {
1766
+ root: string;
1767
+ };
1768
+ false: {};
1769
+ };
1770
+ /** Vínculo violado — marcação não-cromática somada à cor. */
1771
+ conflict: {
1772
+ true: {
1773
+ root: string;
1774
+ };
1775
+ false: {};
1776
+ };
1777
+ /** No caminho crítico: anel externo, sem trocar a cor da categoria. */
1778
+ critical: {
1779
+ true: {
1780
+ root: string;
1781
+ };
1782
+ false: {};
1783
+ };
1784
+ dragging: {
1785
+ true: {
1786
+ root: string;
1787
+ };
1788
+ false: {};
1789
+ };
1790
+ movable: {
1791
+ true: {
1792
+ root: string;
1793
+ };
1794
+ false: {
1795
+ root: string;
1796
+ };
1797
+ };
1798
+ }, {
1799
+ root: string[];
1800
+ /** Acento sólido na borda esquerda — é AQUI que a cor viva mora. */
1801
+ accent: string;
1802
+ /** Preenchimento de progresso, sobre o tingido. */
1803
+ progress: string;
1804
+ label: string;
1805
+ }, import('tailwind-variants').TVReturnType<{
1806
+ /**
1807
+ * ⚠️ A cor entra no fundo TINGIDO e no acento, nunca no texto — ver a nota
1808
+ * do topo. As chaves de chart usam `/14`, que é a mesma proporção do
1809
+ * `color-mix(… 14%, transparent)` com que o DS deriva os `-subtle`.
1810
+ */
1811
+ colorKey: {
1812
+ "chart-1": {
1813
+ root: string;
1814
+ accent: string;
1815
+ progress: string;
1816
+ };
1817
+ "chart-2": {
1818
+ root: string;
1819
+ accent: string;
1820
+ progress: string;
1821
+ };
1822
+ "chart-3": {
1823
+ root: string;
1824
+ accent: string;
1825
+ progress: string;
1826
+ };
1827
+ "chart-4": {
1828
+ root: string;
1829
+ accent: string;
1830
+ progress: string;
1831
+ };
1832
+ "chart-5": {
1833
+ root: string;
1834
+ accent: string;
1835
+ progress: string;
1836
+ };
1837
+ brand: {
1838
+ root: string;
1839
+ accent: string;
1840
+ progress: string;
1841
+ };
1842
+ success: {
1843
+ root: string;
1844
+ accent: string;
1845
+ progress: string;
1846
+ };
1847
+ warning: {
1848
+ root: string;
1849
+ accent: string;
1850
+ progress: string;
1851
+ };
1852
+ danger: {
1853
+ root: string;
1854
+ accent: string;
1855
+ progress: string;
1856
+ };
1857
+ info: {
1858
+ root: string;
1859
+ accent: string;
1860
+ progress: string;
1861
+ };
1862
+ neutral: {
1863
+ root: string;
1864
+ accent: string;
1865
+ progress: string;
1866
+ };
1867
+ };
1868
+ /**
1869
+ * `summary` é mais baixa e sem acento: ela agrega, não é trabalho. As
1870
+ * referências desenham as pontas viradas pra baixo; aqui o sinal é a altura
1871
+ * reduzida e o radius menor, que sobrevive em 4px de largura por dia.
1872
+ */
1873
+ type: {
1874
+ task: {
1875
+ root: string;
1876
+ };
1877
+ summary: {
1878
+ root: string;
1879
+ accent: string;
1880
+ };
1881
+ milestone: {
1882
+ root: string;
1883
+ accent: string;
1884
+ label: string;
1885
+ };
1886
+ };
1887
+ /** Barra que atravessa a janela: perde o canto e a borda daquele lado. */
1888
+ continuesBefore: {
1889
+ true: {
1890
+ root: string;
1891
+ };
1892
+ false: {};
1893
+ };
1894
+ continuesAfter: {
1895
+ true: {
1896
+ root: string;
1897
+ };
1898
+ false: {};
1899
+ };
1900
+ /** Vínculo violado — marcação não-cromática somada à cor. */
1901
+ conflict: {
1902
+ true: {
1903
+ root: string;
1904
+ };
1905
+ false: {};
1906
+ };
1907
+ /** No caminho crítico: anel externo, sem trocar a cor da categoria. */
1908
+ critical: {
1909
+ true: {
1910
+ root: string;
1911
+ };
1912
+ false: {};
1913
+ };
1914
+ dragging: {
1915
+ true: {
1916
+ root: string;
1917
+ };
1918
+ false: {};
1919
+ };
1920
+ movable: {
1921
+ true: {
1922
+ root: string;
1923
+ };
1924
+ false: {
1925
+ root: string;
1926
+ };
1927
+ };
1928
+ }, {
1929
+ root: string[];
1930
+ /** Acento sólido na borda esquerda — é AQUI que a cor viva mora. */
1931
+ accent: string;
1932
+ /** Preenchimento de progresso, sobre o tingido. */
1933
+ progress: string;
1934
+ label: string;
1935
+ }, undefined, unknown, unknown, undefined>>;
1936
+ /** Losango do marco. Ponto no tempo, não intervalo — duração é ignorada. */
1937
+ export declare const ganttMilestone: import('tailwind-variants').TVReturnType<{
1938
+ colorKey: {
1939
+ "chart-1": string;
1940
+ "chart-2": string;
1941
+ "chart-3": string;
1942
+ "chart-4": string;
1943
+ "chart-5": string;
1944
+ brand: string;
1945
+ success: string;
1946
+ warning: string;
1947
+ danger: string;
1948
+ info: string;
1949
+ neutral: string;
1950
+ };
1951
+ }, undefined, string[], {
1952
+ colorKey: {
1953
+ "chart-1": string;
1954
+ "chart-2": string;
1955
+ "chart-3": string;
1956
+ "chart-4": string;
1957
+ "chart-5": string;
1958
+ brand: string;
1959
+ success: string;
1960
+ warning: string;
1961
+ danger: string;
1962
+ info: string;
1963
+ neutral: string;
1964
+ };
1965
+ }, undefined, import('tailwind-variants').TVReturnType<{
1966
+ colorKey: {
1967
+ "chart-1": string;
1968
+ "chart-2": string;
1969
+ "chart-3": string;
1970
+ "chart-4": string;
1971
+ "chart-5": string;
1972
+ brand: string;
1973
+ success: string;
1974
+ warning: string;
1975
+ danger: string;
1976
+ info: string;
1977
+ neutral: string;
1978
+ };
1979
+ }, undefined, string[], unknown, unknown, undefined>>;
1980
+ /** Punho de resize nas pontas. Revelado no hover da barra. */
1981
+ export declare const ganttResizeHandle: import('tailwind-variants').TVReturnType<{
1982
+ side: {
1983
+ start: string;
1984
+ end: string;
1985
+ };
1986
+ }, undefined, string[], {
1987
+ side: {
1988
+ start: string;
1989
+ end: string;
1990
+ };
1991
+ }, undefined, import('tailwind-variants').TVReturnType<{
1992
+ side: {
1993
+ start: string;
1994
+ end: string;
1995
+ };
1996
+ }, undefined, string[], unknown, unknown, undefined>>;
1997
+ /**
1998
+ * Conector de vínculo — o pontinho de onde se arrasta pra criar a seta.
1999
+ *
2000
+ * Fora da barra (`-left-*`/`-right-*`) e não dentro: dentro, ele competiria com
2001
+ * o punho de resize pelo mesmo pixel, e o usuário acertaria o errado.
2002
+ */
2003
+ export declare const ganttLinkPort: import('tailwind-variants').TVReturnType<{
2004
+ side: {
2005
+ start: string;
2006
+ end: string;
2007
+ };
2008
+ }, undefined, string[], {
2009
+ side: {
2010
+ start: string;
2011
+ end: string;
2012
+ };
2013
+ }, undefined, import('tailwind-variants').TVReturnType<{
2014
+ side: {
2015
+ start: string;
2016
+ end: string;
2017
+ };
2018
+ }, undefined, string[], unknown, unknown, undefined>>;
2019
+ /**
2020
+ * Camada SVG dos vínculos.
2021
+ *
2022
+ * ⚠️ **Irmã do canvas, não filha da célula** — e `pointer-events-none` na
2023
+ * camada, reativado só nos paths.
2024
+ *
2025
+ * Filha da célula, ela seria recortada pelo `overflow` de qualquer ancestral, e
2026
+ * a seta desapareceria ao sair da linha de origem. É o mesmo defeito que o
2027
+ * `DragOverlay` resolveu no `Scheduler` — lá o bloco arrastado sumia atrás das
2028
+ * grades, por clipping de 3 ancestrais.
2029
+ */
2030
+ export declare const ganttLinksLayer: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "pointer-events-none absolute inset-0 z-[3] overflow-visible", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "pointer-events-none absolute inset-0 z-[3] overflow-visible", unknown, unknown, undefined>>;
2031
+ /**
2032
+ * A linha-fantasma enquanto o usuário arrasta pra criar um vínculo.
2033
+ *
2034
+ * Tracejada e na cor da marca: tracejado diz "ainda não existe" (vínculo real
2035
+ * é sólido) e a marca diz "isto é o seu gesto", separando-a das setas já
2036
+ * desenhadas. Sem ela o usuário arrasta no vazio e não sabe se o gesto pegou.
2037
+ */
2038
+ export declare const ganttLinkGhost: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2039
+ export declare const ganttLinkPath: import('tailwind-variants').TVReturnType<{
2040
+ state: {
2041
+ default: string;
2042
+ /** Violado: tracejado + cor de perigo. Duplo canal, não só cor. */
2043
+ conflict: string;
2044
+ critical: string;
2045
+ };
2046
+ }, undefined, string[], {
2047
+ state: {
2048
+ default: string;
2049
+ /** Violado: tracejado + cor de perigo. Duplo canal, não só cor. */
2050
+ conflict: string;
2051
+ critical: string;
2052
+ };
2053
+ }, undefined, import('tailwind-variants').TVReturnType<{
2054
+ state: {
2055
+ default: string;
2056
+ /** Violado: tracejado + cor de perigo. Duplo canal, não só cor. */
2057
+ conflict: string;
2058
+ critical: string;
2059
+ };
2060
+ }, undefined, string[], unknown, unknown, undefined>>;
2061
+ /** Ponta de seta. `context-stroke` herda a cor do path sem duplicar variante. */
2062
+ export declare const ganttLinkArrow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "fill-[context-stroke]", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "fill-[context-stroke]", unknown, unknown, undefined>>;
2063
+ export declare const ganttNowLine: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "pointer-events-none absolute inset-y-0 z-[2] w-0", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "pointer-events-none absolute inset-y-0 z-[2] w-0", unknown, unknown, undefined>>;
2064
+ export declare const ganttNowStroke: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "absolute inset-y-0 left-0 w-px -translate-x-1/2 bg-bg-danger", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "absolute inset-y-0 left-0 w-px -translate-x-1/2 bg-bg-danger", unknown, unknown, undefined>>;
2065
+ /**
2066
+ * Ponta da linha do "hoje".
2067
+ *
2068
+ * ⚠️ Sem `-translate-y-1/2`. A primeira versão tinha, e a bolinha saía
2069
+ * **cortada pela metade**: a metade de cima caía fora do contêiner, que tem
2070
+ * `overflow`. Não era z-index — era recorte, o mesmo diagnóstico que eu errei
2071
+ * primeiro no `DragOverlay` do Scheduler.
2072
+ *
2073
+ * ⛔ Houve aqui uma etiqueta com a data ("17 set") ancorada no cabeçalho.
2074
+ * REMOVIDA a pedido (#2): no cabeçalho ela cobria justamente o par
2075
+ * abreviação+número da coluna de hoje — trocava uma informação por outra em
2076
+ * cima da mesma. A linha vermelha basta pra localizar o dia, e a data já está
2077
+ * na própria coluna do eixo, embaixo dela.
2078
+ */
2079
+ export declare const ganttNowDot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2080
+ /**
2081
+ * ⚠️ Grade de mês PRÓPRIA do `Gantt`, não a do `Scheduler`.
2082
+ *
2083
+ * A spec §5 registra a decisão e o preço: delegar criaria acoplamento por
2084
+ * herança de propósito — necessidade nova do Gantt viraria mudança numa API
2085
+ * publicada que serve outros consumidores. O preço é haver duas grades no repo,
2086
+ * com consistência garantida por revisão e não por construção.
2087
+ */
2088
+ export declare const ganttMonthFrame: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2089
+ export declare const ganttWeekdayRow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "grid shrink-0 grid-cols-7 border-b border-border-default bg-bg-table-head", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "grid shrink-0 grid-cols-7 border-b border-border-default bg-bg-table-head", unknown, unknown, undefined>>;
2090
+ export declare const ganttWeekdayCell: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2091
+ /**
2092
+ * A grade do mês — 6 linhas, com **altura mínima por linha e rolagem**.
2093
+ *
2094
+ * ⚠️ Era `grid-rows-6` puro, e o defeito foi medido: com 409px disponíveis a
2095
+ * linha saía com **68px**, que depois do número do dia (14) e dos paddings (12)
2096
+ * deixa 42px — **2 fatias de chip**. Numa célula com 4 tarefas o resultado era 1
2097
+ * chip visível e um "+3 mais".
2098
+ *
2099
+ * `minmax(88px, 1fr)`: 88 é 26 de cabeçalho + 3 fatias de 20 + folga, o mínimo
2100
+ * pra a célula responder "o que acontece neste dia" em vez de "tem coisa aqui".
2101
+ * Em viewport alta as linhas crescem com o `1fr`; em viewport curta a grade
2102
+ * **rola**, que é o que um calendário de mês faz.
2103
+ *
2104
+ * ⛔ Não troque por `grid-rows-6` "pra caber sem rolar": caber sem rolar aqui
2105
+ * significa não mostrar o conteúdo.
2106
+ */
2107
+ export declare const ganttMonthGrid: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2108
+ /**
2109
+ * Uma LINHA de semana — o contêiner que tornou o segmento contínuo possível.
2110
+ *
2111
+ * ⚠️ Antes a grade era 42 células soltas num `grid-cols-7 auto-rows-*`, e nessa
2112
+ * estrutura uma barra de 6 dias **não tem como** ser um elemento só: ela viraria
2113
+ * 6 chips, um por célula, cada um repetindo o nome. Lê como seis tarefas de um
2114
+ * dia em vez de uma de seis — o oposto do que um cronograma diz.
2115
+ *
2116
+ * Agora cada semana é uma linha `relative` com DUAS camadas:
2117
+ *
2118
+ * ganttWeekDays → as 7 células (fundo, número do dia, "+N mais", o "+")
2119
+ * ganttWeekSegments → camada absoluta com as barras atravessando colunas
2120
+ *
2121
+ * O `minmax(88px,1fr)` virou `min-h`: 88 é o mínimo pra a célula responder "o
2122
+ * que acontece neste dia" em vez de "tem coisa aqui", e em viewport alta a linha
2123
+ * cresce com o `flex-1`.
2124
+ */
2125
+ export declare const ganttWeekRow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "relative flex min-h-[88px] shrink-0 flex-1 flex-col", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "relative flex min-h-[88px] shrink-0 flex-1 flex-col", unknown, unknown, undefined>>;
2126
+ /** As 7 células de fundo da semana. */
2127
+ export declare const ganttWeekDays: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "grid min-h-0 flex-1 grid-cols-7", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "grid min-h-0 flex-1 grid-cols-7", unknown, unknown, undefined>>;
2128
+ /**
2129
+ * Camada dos segmentos.
2130
+ *
2131
+ * `pointer-events-none` na camada e reativado em cada segmento: senão ela
2132
+ * cobriria as células e o hover do "+" nunca disparava. Mesmo padrão do
2133
+ * `ganttLinksLayer` na timeline, e pela mesma razão.
2134
+ */
2135
+ export declare const ganttWeekSegments: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "pointer-events-none absolute inset-x-0", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "pointer-events-none absolute inset-x-0", unknown, unknown, undefined>>;
2136
+ /**
2137
+ * Um segmento — a barra atravessando as colunas que ocupa.
2138
+ *
2139
+ * As pontas cortadas usam o MESMO vocabulário da timeline
2140
+ * (`continuesBefore`/`continuesAfter`): perdem o canto e a borda daquele lado,
2141
+ * pra o corte na virada de semana parecer intencional em vez de bug.
2142
+ */
2143
+ export declare const ganttDaySegment: import('tailwind-variants').TVReturnType<{
2144
+ colorKey: {
2145
+ "chart-1": {
2146
+ root: string;
2147
+ dot: string;
2148
+ };
2149
+ "chart-2": {
2150
+ root: string;
2151
+ dot: string;
2152
+ };
2153
+ "chart-3": {
2154
+ root: string;
2155
+ dot: string;
2156
+ };
2157
+ "chart-4": {
2158
+ root: string;
2159
+ dot: string;
2160
+ };
2161
+ "chart-5": {
2162
+ root: string;
2163
+ dot: string;
2164
+ };
2165
+ brand: {
2166
+ root: string;
2167
+ dot: string;
2168
+ };
2169
+ success: {
2170
+ root: string;
2171
+ dot: string;
2172
+ };
2173
+ warning: {
2174
+ root: string;
2175
+ dot: string;
2176
+ };
2177
+ danger: {
2178
+ root: string;
2179
+ dot: string;
2180
+ };
2181
+ info: {
2182
+ root: string;
2183
+ dot: string;
2184
+ };
2185
+ neutral: {
2186
+ root: string;
2187
+ dot: string;
2188
+ };
2189
+ };
2190
+ continuesBefore: {
2191
+ true: {
2192
+ root: string;
2193
+ };
2194
+ false: {};
2195
+ };
2196
+ continuesAfter: {
2197
+ true: {
2198
+ root: string;
2199
+ };
2200
+ false: {};
2201
+ };
2202
+ conflict: {
2203
+ true: {
2204
+ root: string;
2205
+ };
2206
+ false: {};
2207
+ };
2208
+ critical: {
2209
+ true: {
2210
+ root: string;
2211
+ };
2212
+ false: {};
2213
+ };
2214
+ }, {
2215
+ root: string[];
2216
+ dot: string;
2217
+ label: string;
2218
+ }, undefined, {
2219
+ colorKey: {
2220
+ "chart-1": {
2221
+ root: string;
2222
+ dot: string;
2223
+ };
2224
+ "chart-2": {
2225
+ root: string;
2226
+ dot: string;
2227
+ };
2228
+ "chart-3": {
2229
+ root: string;
2230
+ dot: string;
2231
+ };
2232
+ "chart-4": {
2233
+ root: string;
2234
+ dot: string;
2235
+ };
2236
+ "chart-5": {
2237
+ root: string;
2238
+ dot: string;
2239
+ };
2240
+ brand: {
2241
+ root: string;
2242
+ dot: string;
2243
+ };
2244
+ success: {
2245
+ root: string;
2246
+ dot: string;
2247
+ };
2248
+ warning: {
2249
+ root: string;
2250
+ dot: string;
2251
+ };
2252
+ danger: {
2253
+ root: string;
2254
+ dot: string;
2255
+ };
2256
+ info: {
2257
+ root: string;
2258
+ dot: string;
2259
+ };
2260
+ neutral: {
2261
+ root: string;
2262
+ dot: string;
2263
+ };
2264
+ };
2265
+ continuesBefore: {
2266
+ true: {
2267
+ root: string;
2268
+ };
2269
+ false: {};
2270
+ };
2271
+ continuesAfter: {
2272
+ true: {
2273
+ root: string;
2274
+ };
2275
+ false: {};
2276
+ };
2277
+ conflict: {
2278
+ true: {
2279
+ root: string;
2280
+ };
2281
+ false: {};
2282
+ };
2283
+ critical: {
2284
+ true: {
2285
+ root: string;
2286
+ };
2287
+ false: {};
2288
+ };
2289
+ }, {
2290
+ root: string[];
2291
+ dot: string;
2292
+ label: string;
2293
+ }, import('tailwind-variants').TVReturnType<{
2294
+ colorKey: {
2295
+ "chart-1": {
2296
+ root: string;
2297
+ dot: string;
2298
+ };
2299
+ "chart-2": {
2300
+ root: string;
2301
+ dot: string;
2302
+ };
2303
+ "chart-3": {
2304
+ root: string;
2305
+ dot: string;
2306
+ };
2307
+ "chart-4": {
2308
+ root: string;
2309
+ dot: string;
2310
+ };
2311
+ "chart-5": {
2312
+ root: string;
2313
+ dot: string;
2314
+ };
2315
+ brand: {
2316
+ root: string;
2317
+ dot: string;
2318
+ };
2319
+ success: {
2320
+ root: string;
2321
+ dot: string;
2322
+ };
2323
+ warning: {
2324
+ root: string;
2325
+ dot: string;
2326
+ };
2327
+ danger: {
2328
+ root: string;
2329
+ dot: string;
2330
+ };
2331
+ info: {
2332
+ root: string;
2333
+ dot: string;
2334
+ };
2335
+ neutral: {
2336
+ root: string;
2337
+ dot: string;
2338
+ };
2339
+ };
2340
+ continuesBefore: {
2341
+ true: {
2342
+ root: string;
2343
+ };
2344
+ false: {};
2345
+ };
2346
+ continuesAfter: {
2347
+ true: {
2348
+ root: string;
2349
+ };
2350
+ false: {};
2351
+ };
2352
+ conflict: {
2353
+ true: {
2354
+ root: string;
2355
+ };
2356
+ false: {};
2357
+ };
2358
+ critical: {
2359
+ true: {
2360
+ root: string;
2361
+ };
2362
+ false: {};
2363
+ };
2364
+ }, {
2365
+ root: string[];
2366
+ dot: string;
2367
+ label: string;
2368
+ }, undefined, unknown, unknown, undefined>>;
2369
+ /**
2370
+ * O "+" de adicionar, revelado no hover da célula.
2371
+ *
2372
+ * ⚠️ Só renderiza quando o consumidor passa `onDayAdd`. Um "+" que não
2373
+ * adiciona nada é pior que a ausência dele — é a mesma regra do toggle de
2374
+ * caminho crítico sem vínculo.
2375
+ *
2376
+ * `opacity-0` + `group-hover` e não `hidden`: com `hidden` o nó entra e sai do
2377
+ * fluxo no hover, e a célula muda de altura embaixo do cursor.
2378
+ */
2379
+ export declare const ganttDayAdd: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2380
+ export declare const ganttMonthCell: import('tailwind-variants').TVReturnType<{
2381
+ /** Dia de fora do mês âncora: presente, mas recuado. */
2382
+ /**
2383
+ * ## O mês é UNIFORME. O que se destaca é o que não é dele.
2384
+ *
2385
+ * Todo dia do mês âncora tem o mesmo fundo — útil ou fim de semana, tanto
2386
+ * faz. Só as células de OUTRO mês recebem `bg-canvas`, e a grade passa a
2387
+ * responder uma pergunta só: onde este mês começa e onde acaba.
2388
+ *
2389
+ * ⛔ **Não existe variante de fim de semana aqui, e isso é decisão.**
2390
+ * Sombrear sábado e domingo divide o mês em blocos verticais e compete com
2391
+ * a única distinção que a grade precisa fazer. Num calendário de agenda o
2392
+ * fim de semana importa (não se marca reunião); num CRONOGRAMA a barra
2393
+ * atravessa o fim de semana de qualquer jeito, e listrar as colunas só
2394
+ * atrapalha a leitura do segmento contínuo que passa por cima.
2395
+ *
2396
+ * ## Por que `bg-canvas` e não escurecer com `/NN`
2397
+ *
2398
+ * O dia de outro mês não é uma SOBREPOSIÇÃO sobre a grade: é o buraco por
2399
+ * onde se vê o fundo da página. O token que significa isso é `bg-canvas`
2400
+ * (0.205), e contra a superfície da grade (`bg-surface`, 0.225) ele dá
2401
+ * ΔL 0.020.
2402
+ *
2403
+ * ⚠️ 0.020 é pouco pra uma LINHA e suficiente pra uma ÁREA — contraste de
2404
+ * área grande é muito mais perceptível que de traço fino. É por isso que
2405
+ * aqui 0.020 lê enquanto na virada de mês do eixo 0.040 não lia.
2406
+ *
2407
+ * ## O histórico, porque ele explica as duas variantes que sumiram
2408
+ *
2409
+ * outside `bg-bg-subtle/40` → branco 1% × 40% = 0.004 de alfa
2410
+ * weekend `bg-bg-subtle/30` → branco 1% × 30% = 0.003 de alfa
2411
+ *
2412
+ * As duas abaixo do limiar de percepção: existiam no CSS e não pintavam
2413
+ * nada — 20 das 42 células com estilo que ninguém via. Ao consertar, eu
2414
+ * tornei o fim de semana visível TAMBÉM, e aí ele virou o defeito oposto:
2415
+ * as colunas de sábado e domingo escuras de ponta a ponta, com o mês
2416
+ * parecendo quatro blocos. O conserto certo era **remover**, não calibrar.
2417
+ *
2418
+ * ⛔ E o `text-fg-subtle` que morava na variante `outside` era CÓDIGO MORTO:
2419
+ * medido, o `ganttDayNumber` põe a própria cor no `<span>` e vence a
2420
+ * herança. Quem dim o número do dia de fora é a variante `outside` DELE.
2421
+ */
2422
+ outside: {
2423
+ true: string;
2424
+ false: string;
2425
+ };
2426
+ today: {
2427
+ true: string;
2428
+ false: string;
2429
+ };
2430
+ }, undefined, string[], {
2431
+ /** Dia de fora do mês âncora: presente, mas recuado. */
2432
+ /**
2433
+ * ## O mês é UNIFORME. O que se destaca é o que não é dele.
2434
+ *
2435
+ * Todo dia do mês âncora tem o mesmo fundo — útil ou fim de semana, tanto
2436
+ * faz. Só as células de OUTRO mês recebem `bg-canvas`, e a grade passa a
2437
+ * responder uma pergunta só: onde este mês começa e onde acaba.
2438
+ *
2439
+ * ⛔ **Não existe variante de fim de semana aqui, e isso é decisão.**
2440
+ * Sombrear sábado e domingo divide o mês em blocos verticais e compete com
2441
+ * a única distinção que a grade precisa fazer. Num calendário de agenda o
2442
+ * fim de semana importa (não se marca reunião); num CRONOGRAMA a barra
2443
+ * atravessa o fim de semana de qualquer jeito, e listrar as colunas só
2444
+ * atrapalha a leitura do segmento contínuo que passa por cima.
2445
+ *
2446
+ * ## Por que `bg-canvas` e não escurecer com `/NN`
2447
+ *
2448
+ * O dia de outro mês não é uma SOBREPOSIÇÃO sobre a grade: é o buraco por
2449
+ * onde se vê o fundo da página. O token que significa isso é `bg-canvas`
2450
+ * (0.205), e contra a superfície da grade (`bg-surface`, 0.225) ele dá
2451
+ * ΔL 0.020.
2452
+ *
2453
+ * ⚠️ 0.020 é pouco pra uma LINHA e suficiente pra uma ÁREA — contraste de
2454
+ * área grande é muito mais perceptível que de traço fino. É por isso que
2455
+ * aqui 0.020 lê enquanto na virada de mês do eixo 0.040 não lia.
2456
+ *
2457
+ * ## O histórico, porque ele explica as duas variantes que sumiram
2458
+ *
2459
+ * outside `bg-bg-subtle/40` → branco 1% × 40% = 0.004 de alfa
2460
+ * weekend `bg-bg-subtle/30` → branco 1% × 30% = 0.003 de alfa
2461
+ *
2462
+ * As duas abaixo do limiar de percepção: existiam no CSS e não pintavam
2463
+ * nada — 20 das 42 células com estilo que ninguém via. Ao consertar, eu
2464
+ * tornei o fim de semana visível TAMBÉM, e aí ele virou o defeito oposto:
2465
+ * as colunas de sábado e domingo escuras de ponta a ponta, com o mês
2466
+ * parecendo quatro blocos. O conserto certo era **remover**, não calibrar.
2467
+ *
2468
+ * ⛔ E o `text-fg-subtle` que morava na variante `outside` era CÓDIGO MORTO:
2469
+ * medido, o `ganttDayNumber` põe a própria cor no `<span>` e vence a
2470
+ * herança. Quem dim o número do dia de fora é a variante `outside` DELE.
2471
+ */
2472
+ outside: {
2473
+ true: string;
2474
+ false: string;
2475
+ };
2476
+ today: {
2477
+ true: string;
2478
+ false: string;
2479
+ };
2480
+ }, undefined, import('tailwind-variants').TVReturnType<{
2481
+ /** Dia de fora do mês âncora: presente, mas recuado. */
2482
+ /**
2483
+ * ## O mês é UNIFORME. O que se destaca é o que não é dele.
2484
+ *
2485
+ * Todo dia do mês âncora tem o mesmo fundo — útil ou fim de semana, tanto
2486
+ * faz. Só as células de OUTRO mês recebem `bg-canvas`, e a grade passa a
2487
+ * responder uma pergunta só: onde este mês começa e onde acaba.
2488
+ *
2489
+ * ⛔ **Não existe variante de fim de semana aqui, e isso é decisão.**
2490
+ * Sombrear sábado e domingo divide o mês em blocos verticais e compete com
2491
+ * a única distinção que a grade precisa fazer. Num calendário de agenda o
2492
+ * fim de semana importa (não se marca reunião); num CRONOGRAMA a barra
2493
+ * atravessa o fim de semana de qualquer jeito, e listrar as colunas só
2494
+ * atrapalha a leitura do segmento contínuo que passa por cima.
2495
+ *
2496
+ * ## Por que `bg-canvas` e não escurecer com `/NN`
2497
+ *
2498
+ * O dia de outro mês não é uma SOBREPOSIÇÃO sobre a grade: é o buraco por
2499
+ * onde se vê o fundo da página. O token que significa isso é `bg-canvas`
2500
+ * (0.205), e contra a superfície da grade (`bg-surface`, 0.225) ele dá
2501
+ * ΔL 0.020.
2502
+ *
2503
+ * ⚠️ 0.020 é pouco pra uma LINHA e suficiente pra uma ÁREA — contraste de
2504
+ * área grande é muito mais perceptível que de traço fino. É por isso que
2505
+ * aqui 0.020 lê enquanto na virada de mês do eixo 0.040 não lia.
2506
+ *
2507
+ * ## O histórico, porque ele explica as duas variantes que sumiram
2508
+ *
2509
+ * outside `bg-bg-subtle/40` → branco 1% × 40% = 0.004 de alfa
2510
+ * weekend `bg-bg-subtle/30` → branco 1% × 30% = 0.003 de alfa
2511
+ *
2512
+ * As duas abaixo do limiar de percepção: existiam no CSS e não pintavam
2513
+ * nada — 20 das 42 células com estilo que ninguém via. Ao consertar, eu
2514
+ * tornei o fim de semana visível TAMBÉM, e aí ele virou o defeito oposto:
2515
+ * as colunas de sábado e domingo escuras de ponta a ponta, com o mês
2516
+ * parecendo quatro blocos. O conserto certo era **remover**, não calibrar.
2517
+ *
2518
+ * ⛔ E o `text-fg-subtle` que morava na variante `outside` era CÓDIGO MORTO:
2519
+ * medido, o `ganttDayNumber` põe a própria cor no `<span>` e vence a
2520
+ * herança. Quem dim o número do dia de fora é a variante `outside` DELE.
2521
+ */
2522
+ outside: {
2523
+ true: string;
2524
+ false: string;
2525
+ };
2526
+ today: {
2527
+ true: string;
2528
+ false: string;
2529
+ };
2530
+ }, undefined, string[], unknown, unknown, undefined>>;
2531
+ /**
2532
+ * O número do dia na célula do mês.
2533
+ *
2534
+ * ⚠️ A variante `outside` existe porque o FUNDO deixou de distinguir dia de
2535
+ * outro mês de fim de semana deste — os dois são `bg-canvas` agora. Quem carrega
2536
+ * essa diferença é o número: `fg-disabled` (0.36 no dark) contra `fg-muted`
2537
+ * (0.7025) é meio tom de luminosidade, e lê imediatamente.
2538
+ *
2539
+ * `fg-disabled` e não um `fg-subtle` qualquer: um dia de outro mês não é
2540
+ * acionável nesta grade — não recebe `+`, não recebe segmento próprio, e clicar
2541
+ * nele não faz nada. O token que significa isso é o de desabilitado.
2542
+ */
2543
+ export declare const ganttDayNumber: import('tailwind-variants').TVReturnType<{
2544
+ outside: {
2545
+ true: string;
2546
+ false: string;
2547
+ };
2548
+ today: {
2549
+ true: string[];
2550
+ false: string;
2551
+ };
2552
+ }, undefined, "text-caption-sm tabular-nums text-fg-muted", {
2553
+ outside: {
2554
+ true: string;
2555
+ false: string;
2556
+ };
2557
+ today: {
2558
+ true: string[];
2559
+ false: string;
2560
+ };
2561
+ }, undefined, import('tailwind-variants').TVReturnType<{
2562
+ outside: {
2563
+ true: string;
2564
+ false: string;
2565
+ };
2566
+ today: {
2567
+ true: string[];
2568
+ false: string;
2569
+ };
2570
+ }, undefined, "text-caption-sm tabular-nums text-fg-muted", unknown, unknown, undefined>>;
2571
+ /** Chip de barra dentro da célula do mês. */
2572
+ export declare const ganttDayChip: import('tailwind-variants').TVReturnType<{
2573
+ colorKey: {
2574
+ "chart-1": {
2575
+ root: string;
2576
+ dot: string;
2577
+ };
2578
+ "chart-2": {
2579
+ root: string;
2580
+ dot: string;
2581
+ };
2582
+ "chart-3": {
2583
+ root: string;
2584
+ dot: string;
2585
+ };
2586
+ "chart-4": {
2587
+ root: string;
2588
+ dot: string;
2589
+ };
2590
+ "chart-5": {
2591
+ root: string;
2592
+ dot: string;
2593
+ };
2594
+ brand: {
2595
+ root: string;
2596
+ dot: string;
2597
+ };
2598
+ success: {
2599
+ root: string;
2600
+ dot: string;
2601
+ };
2602
+ warning: {
2603
+ root: string;
2604
+ dot: string;
2605
+ };
2606
+ danger: {
2607
+ root: string;
2608
+ dot: string;
2609
+ };
2610
+ info: {
2611
+ root: string;
2612
+ dot: string;
2613
+ };
2614
+ neutral: {
2615
+ root: string;
2616
+ dot: string;
2617
+ };
2618
+ };
2619
+ }, {
2620
+ root: string[];
2621
+ dot: string;
2622
+ label: string;
2623
+ }, undefined, {
2624
+ colorKey: {
2625
+ "chart-1": {
2626
+ root: string;
2627
+ dot: string;
2628
+ };
2629
+ "chart-2": {
2630
+ root: string;
2631
+ dot: string;
2632
+ };
2633
+ "chart-3": {
2634
+ root: string;
2635
+ dot: string;
2636
+ };
2637
+ "chart-4": {
2638
+ root: string;
2639
+ dot: string;
2640
+ };
2641
+ "chart-5": {
2642
+ root: string;
2643
+ dot: string;
2644
+ };
2645
+ brand: {
2646
+ root: string;
2647
+ dot: string;
2648
+ };
2649
+ success: {
2650
+ root: string;
2651
+ dot: string;
2652
+ };
2653
+ warning: {
2654
+ root: string;
2655
+ dot: string;
2656
+ };
2657
+ danger: {
2658
+ root: string;
2659
+ dot: string;
2660
+ };
2661
+ info: {
2662
+ root: string;
2663
+ dot: string;
2664
+ };
2665
+ neutral: {
2666
+ root: string;
2667
+ dot: string;
2668
+ };
2669
+ };
2670
+ }, {
2671
+ root: string[];
2672
+ dot: string;
2673
+ label: string;
2674
+ }, import('tailwind-variants').TVReturnType<{
2675
+ colorKey: {
2676
+ "chart-1": {
2677
+ root: string;
2678
+ dot: string;
2679
+ };
2680
+ "chart-2": {
2681
+ root: string;
2682
+ dot: string;
2683
+ };
2684
+ "chart-3": {
2685
+ root: string;
2686
+ dot: string;
2687
+ };
2688
+ "chart-4": {
2689
+ root: string;
2690
+ dot: string;
2691
+ };
2692
+ "chart-5": {
2693
+ root: string;
2694
+ dot: string;
2695
+ };
2696
+ brand: {
2697
+ root: string;
2698
+ dot: string;
2699
+ };
2700
+ success: {
2701
+ root: string;
2702
+ dot: string;
2703
+ };
2704
+ warning: {
2705
+ root: string;
2706
+ dot: string;
2707
+ };
2708
+ danger: {
2709
+ root: string;
2710
+ dot: string;
2711
+ };
2712
+ info: {
2713
+ root: string;
2714
+ dot: string;
2715
+ };
2716
+ neutral: {
2717
+ root: string;
2718
+ dot: string;
2719
+ };
2720
+ };
2721
+ }, {
2722
+ root: string[];
2723
+ dot: string;
2724
+ label: string;
2725
+ }, undefined, unknown, unknown, undefined>>;
2726
+ /**
2727
+ * O "+N mais" da célula do mês.
2728
+ *
2729
+ * ⚠️ `absolute`, e isto é conserto de um defeito medido: no fluxo do flex ele
2730
+ * caía logo depois do número do dia — **na mesma faixa vertical dos
2731
+ * segmentos** — e como os segmentos vivem numa camada absoluta por cima, o
2732
+ * botão aparecia atravessado pelas barras. Posicionado, ele fica exatamente
2733
+ * abaixo da última faixa visível (o `top` vem da view, que sabe quantas são).
2734
+ */
2735
+ export declare const ganttOverflowButton: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2736
+ /**
2737
+ * A agenda.
2738
+ *
2739
+ * ⛔ Gramática copiada do `schedulerList*`, não importada (L-049). A moldura é
2740
+ * própria e por isso o `ganttBody` entra sem `framed` nesta visão — duas
2741
+ * bordas concêntricas separadas por 1px é o que sai de deixar as duas.
2742
+ */
2743
+ export declare const ganttListFrame: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2744
+ export declare const ganttListDay: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex flex-col gap-gp-md border-b border-border-subtle p-sp-xl last:border-b-0", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex flex-col gap-gp-md border-b border-border-subtle p-sp-xl last:border-b-0", unknown, unknown, undefined>>;
2745
+ /**
2746
+ * Cabeçalho do dia.
2747
+ *
2748
+ * `sticky` com fundo OPACO: numa agenda longa, saber "que dia é este que estou
2749
+ * lendo" é justamente o que se perde ao rolar. Fundo translúcido deixaria o
2750
+ * conteúdo passar por baixo do rótulo.
2751
+ *
2752
+ * As margens negativas existem porque o `p-sp-xl` do dia já recuou o conteúdo:
2753
+ * sem elas o sticky grudaria 20px abaixo do topo do scroller.
2754
+ */
2755
+ export declare const ganttListDayHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2756
+ export declare const ganttListDayNumber: import('tailwind-variants').TVReturnType<{
2757
+ today: {
2758
+ true: string;
2759
+ false: string;
2760
+ };
2761
+ }, undefined, "text-title-sm font-semibold tabular-nums", {
2762
+ today: {
2763
+ true: string;
2764
+ false: string;
2765
+ };
2766
+ }, undefined, import('tailwind-variants').TVReturnType<{
2767
+ today: {
2768
+ true: string;
2769
+ false: string;
2770
+ };
2771
+ }, undefined, "text-title-sm font-semibold tabular-nums", unknown, unknown, undefined>>;
2772
+ export declare const ganttListDayName: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "text-body-sm text-fg-muted first-letter:uppercase", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "text-body-sm text-fg-muted first-letter:uppercase", unknown, unknown, undefined>>;
2773
+ export declare const ganttListItems: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex flex-col gap-gp-sm", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex flex-col gap-gp-sm", unknown, unknown, undefined>>;
2774
+ /**
2775
+ * Uma tarefa na agenda — linha larga com sublinha e metadado à direita.
2776
+ *
2777
+ * Mesma anatomia do `schedulerEvent` variante `row`, e a cor segue a receita
2778
+ * do resto deste componente: fundo TINGIDO + `fg-default` no texto + a cor viva
2779
+ * num ponto. Ver a nota do topo do arquivo — texto colorido sobre pílula
2780
+ * tingida dá 1.72–4.49 de contraste no light, e nenhuma família passa AA.
2781
+ */
2782
+ export declare const ganttListItem: import('tailwind-variants').TVReturnType<{
2783
+ colorKey: {
2784
+ "chart-1": {
2785
+ root: string;
2786
+ dot: string;
2787
+ };
2788
+ "chart-2": {
2789
+ root: string;
2790
+ dot: string;
2791
+ };
2792
+ "chart-3": {
2793
+ root: string;
2794
+ dot: string;
2795
+ };
2796
+ "chart-4": {
2797
+ root: string;
2798
+ dot: string;
2799
+ };
2800
+ "chart-5": {
2801
+ root: string;
2802
+ dot: string;
2803
+ };
2804
+ brand: {
2805
+ root: string;
2806
+ dot: string;
2807
+ };
2808
+ success: {
2809
+ root: string;
2810
+ dot: string;
2811
+ };
2812
+ warning: {
2813
+ root: string;
2814
+ dot: string;
2815
+ };
2816
+ danger: {
2817
+ root: string;
2818
+ dot: string;
2819
+ };
2820
+ info: {
2821
+ root: string;
2822
+ dot: string;
2823
+ };
2824
+ neutral: {
2825
+ root: string;
2826
+ dot: string;
2827
+ };
2828
+ };
2829
+ conflict: {
2830
+ true: {
2831
+ root: string;
2832
+ };
2833
+ false: {};
2834
+ };
2835
+ critical: {
2836
+ true: {
2837
+ root: string;
2838
+ };
2839
+ false: {};
2840
+ };
2841
+ }, {
2842
+ root: string[];
2843
+ dot: string;
2844
+ body: string;
2845
+ title: string;
2846
+ sub: string;
2847
+ meta: string;
2848
+ }, undefined, {
2849
+ colorKey: {
2850
+ "chart-1": {
2851
+ root: string;
2852
+ dot: string;
2853
+ };
2854
+ "chart-2": {
2855
+ root: string;
2856
+ dot: string;
2857
+ };
2858
+ "chart-3": {
2859
+ root: string;
2860
+ dot: string;
2861
+ };
2862
+ "chart-4": {
2863
+ root: string;
2864
+ dot: string;
2865
+ };
2866
+ "chart-5": {
2867
+ root: string;
2868
+ dot: string;
2869
+ };
2870
+ brand: {
2871
+ root: string;
2872
+ dot: string;
2873
+ };
2874
+ success: {
2875
+ root: string;
2876
+ dot: string;
2877
+ };
2878
+ warning: {
2879
+ root: string;
2880
+ dot: string;
2881
+ };
2882
+ danger: {
2883
+ root: string;
2884
+ dot: string;
2885
+ };
2886
+ info: {
2887
+ root: string;
2888
+ dot: string;
2889
+ };
2890
+ neutral: {
2891
+ root: string;
2892
+ dot: string;
2893
+ };
2894
+ };
2895
+ conflict: {
2896
+ true: {
2897
+ root: string;
2898
+ };
2899
+ false: {};
2900
+ };
2901
+ critical: {
2902
+ true: {
2903
+ root: string;
2904
+ };
2905
+ false: {};
2906
+ };
2907
+ }, {
2908
+ root: string[];
2909
+ dot: string;
2910
+ body: string;
2911
+ title: string;
2912
+ sub: string;
2913
+ meta: string;
2914
+ }, import('tailwind-variants').TVReturnType<{
2915
+ colorKey: {
2916
+ "chart-1": {
2917
+ root: string;
2918
+ dot: string;
2919
+ };
2920
+ "chart-2": {
2921
+ root: string;
2922
+ dot: string;
2923
+ };
2924
+ "chart-3": {
2925
+ root: string;
2926
+ dot: string;
2927
+ };
2928
+ "chart-4": {
2929
+ root: string;
2930
+ dot: string;
2931
+ };
2932
+ "chart-5": {
2933
+ root: string;
2934
+ dot: string;
2935
+ };
2936
+ brand: {
2937
+ root: string;
2938
+ dot: string;
2939
+ };
2940
+ success: {
2941
+ root: string;
2942
+ dot: string;
2943
+ };
2944
+ warning: {
2945
+ root: string;
2946
+ dot: string;
2947
+ };
2948
+ danger: {
2949
+ root: string;
2950
+ dot: string;
2951
+ };
2952
+ info: {
2953
+ root: string;
2954
+ dot: string;
2955
+ };
2956
+ neutral: {
2957
+ root: string;
2958
+ dot: string;
2959
+ };
2960
+ };
2961
+ conflict: {
2962
+ true: {
2963
+ root: string;
2964
+ };
2965
+ false: {};
2966
+ };
2967
+ critical: {
2968
+ true: {
2969
+ root: string;
2970
+ };
2971
+ false: {};
2972
+ };
2973
+ }, {
2974
+ root: string[];
2975
+ dot: string;
2976
+ body: string;
2977
+ title: string;
2978
+ sub: string;
2979
+ meta: string;
2980
+ }, undefined, unknown, unknown, undefined>>;
2981
+ export declare const ganttEmpty: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2982
+ export declare const ganttEmptyText: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "text-body-sm text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "text-body-sm text-fg-muted", unknown, unknown, undefined>>;
2983
+ /** Aviso de largura insuficiente — declarado, não escondido. */
2984
+ export declare const ganttNarrowNotice: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
2985
+ //# sourceMappingURL=gantt.styles.d.ts.map