@snksergio/design-system 0.55.0 → 0.57.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 (43) hide show
  1. package/dist-lib/index.cjs +2597 -3
  2. package/dist-lib/index.cjs.map +1 -1
  3. package/dist-lib/index.mjs +2631 -37
  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/Scheduler/hooks/layout.d.ts +165 -0
  8. package/dist-lib/src/components/ui/Scheduler/hooks/layout.d.ts.map +1 -0
  9. package/dist-lib/src/components/ui/Scheduler/hooks/use-media-query.d.ts +21 -0
  10. package/dist-lib/src/components/ui/Scheduler/hooks/use-media-query.d.ts.map +1 -0
  11. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-dnd.d.ts +41 -0
  12. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-dnd.d.ts.map +1 -0
  13. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-filter.d.ts +35 -0
  14. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-filter.d.ts.map +1 -0
  15. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-keyboard.d.ts +47 -0
  16. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-keyboard.d.ts.map +1 -0
  17. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-state.d.ts +44 -0
  18. package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-state.d.ts.map +1 -0
  19. package/dist-lib/src/components/ui/Scheduler/index.d.ts +14 -0
  20. package/dist-lib/src/components/ui/Scheduler/index.d.ts.map +1 -0
  21. package/dist-lib/src/components/ui/Scheduler/parts/draggable-event.d.ts +30 -0
  22. package/dist-lib/src/components/ui/Scheduler/parts/draggable-event.d.ts.map +1 -0
  23. package/dist-lib/src/components/ui/Scheduler/parts/mini-month.d.ts +28 -0
  24. package/dist-lib/src/components/ui/Scheduler/parts/mini-month.d.ts.map +1 -0
  25. package/dist-lib/src/components/ui/Scheduler/parts/scheduler-event.d.ts +53 -0
  26. package/dist-lib/src/components/ui/Scheduler/parts/scheduler-event.d.ts.map +1 -0
  27. package/dist-lib/src/components/ui/Scheduler/parts/scheduler-filter-panel.d.ts +54 -0
  28. package/dist-lib/src/components/ui/Scheduler/parts/scheduler-filter-panel.d.ts.map +1 -0
  29. package/dist-lib/src/components/ui/Scheduler/parts/scheduler-toolbar.d.ts +25 -0
  30. package/dist-lib/src/components/ui/Scheduler/parts/scheduler-toolbar.d.ts.map +1 -0
  31. package/dist-lib/src/components/ui/Scheduler/scheduler.d.ts +44 -0
  32. package/dist-lib/src/components/ui/Scheduler/scheduler.d.ts.map +1 -0
  33. package/dist-lib/src/components/ui/Scheduler/scheduler.styles.d.ts +911 -0
  34. package/dist-lib/src/components/ui/Scheduler/scheduler.styles.d.ts.map +1 -0
  35. package/dist-lib/src/components/ui/Scheduler/scheduler.types.d.ts +285 -0
  36. package/dist-lib/src/components/ui/Scheduler/scheduler.types.d.ts.map +1 -0
  37. package/dist-lib/src/components/ui/Scheduler/views/list.d.ts +33 -0
  38. package/dist-lib/src/components/ui/Scheduler/views/list.d.ts.map +1 -0
  39. package/dist-lib/src/components/ui/Scheduler/views/month.d.ts +47 -0
  40. package/dist-lib/src/components/ui/Scheduler/views/month.d.ts.map +1 -0
  41. package/dist-lib/src/components/ui/Scheduler/views/time-grid.d.ts +48 -0
  42. package/dist-lib/src/components/ui/Scheduler/views/time-grid.d.ts.map +1 -0
  43. package/package.json +1 -1
@@ -0,0 +1,911 @@
1
+ import { VariantProps } from '../../../utils/tv';
2
+ /**
3
+ * Fonte única do visual do `Scheduler`. Nenhum componente da pasta escreve
4
+ * classe de estilo inline — quem quiser mudar a pele muda AQUI (regra de ouro
5
+ * do DS).
6
+ *
7
+ * ⛔ Nada aqui importa de `../TableToolbar`. A gramática visual da toolbar
8
+ * (segmented, busca, chip aplicado) é **copiada** de
9
+ * `TableToolbar/table-toolbar.styles.ts`, não importada — cross-import entre
10
+ * pastas de `ui/` é o que gerou o `registryDependency` dangling da L-049 no
11
+ * `DataList`: `@igreen/table-toolbar` não existe como item de registry, então
12
+ * `igreen:add scheduler` estrearia quebrado no consumidor de copy-in enquanto
13
+ * `tsc` e showcase ficam verdes. O custo aceito é manter as duas cópias em
14
+ * sync na mão; a alternativa era um defeito invisível justamente onde a gente
15
+ * não olha (spec §4.1).
16
+ */
17
+ /**
18
+ * `h-full` (não só `min-h-0`) é o que impede o painel de filtro de esticar a
19
+ * altura da linha inteira.
20
+ *
21
+ * Sem ele o root dimensionava por CONTEÚDO: a coluna do painel, que é uma pilha
22
+ * de mini-calendário + grupos, ficava mais alta que a grade e passava a mandar
23
+ * na altura das duas — no exemplo do showcase isso vazava pra fora do
24
+ * `h-[720px]` e cortava. Com `h-full`, o root ocupa o pai, `schedulerBody` é
25
+ * `flex-1 min-h-0`, e o painel rola por dentro em vez de crescer.
26
+ *
27
+ * Em pai de altura automática, `height: 100%` resolve contra `auto` e se
28
+ * comporta como `auto` — ou seja, não piora o caso "esqueci de dar altura", que
29
+ * segue documentado como gotcha nº 1 do USAGE.
30
+ */
31
+ export declare const schedulerRoot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
32
+ /**
33
+ * Uma linha em desktop, quebra em duas abaixo de ~1024px. `flex-wrap` +
34
+ * `justify-between` em vez de grid de 2 colunas: os dois lados têm largura de
35
+ * conteúdo (o título muda de tamanho por mês e por view), e grid obrigaria a
36
+ * fixar uma fração que sobra ou falta.
37
+ */
38
+ /**
39
+ * Toolbar — DUAS LINHAS abaixo de `lg`, uma só a partir dele.
40
+ *
41
+ * Empilhado (<1024px): linha 1 é `[título] ······ [‹ Hoje ›]`, com a navegação
42
+ * empurrada pro fim; linha 2 é `[busca ·····] [📅] [⚙] [+]`, a busca comendo a
43
+ * sobra e os três controles como ícone puro.
44
+ *
45
+ * Antes era `flex-wrap` puro, e a quebra ficava a cargo do espaço disponível:
46
+ * em 375px saía título e navegação grudados à esquerda com um vão à direita, e
47
+ * os 4 controles da segunda linha disputando largura com os rótulos por
48
+ * extenso — "Mês", "Filtro" e "Novo evento" custam ~210px que a busca não
49
+ * tinha. Wrap resolve transbordo, não hierarquia.
50
+ */
51
+ export declare const schedulerToolbar: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
52
+ export declare const schedulerToolbarSide: import('tailwind-variants').TVReturnType<{
53
+ /**
54
+ * `leading` = título + navegação. Empilhado, ocupa a linha inteira e
55
+ * separa os dois extremos — é o que joga `‹ Hoje ›` pro fim.
56
+ * `trailing` = busca + controles. A busca é quem estica (`flex-1` nela),
57
+ * então aqui basta ocupar a linha.
58
+ */
59
+ slot: {
60
+ leading: string;
61
+ trailing: string;
62
+ };
63
+ }, undefined, "flex min-w-0 items-center gap-gp-md", {
64
+ /**
65
+ * `leading` = título + navegação. Empilhado, ocupa a linha inteira e
66
+ * separa os dois extremos — é o que joga `‹ Hoje ›` pro fim.
67
+ * `trailing` = busca + controles. A busca é quem estica (`flex-1` nela),
68
+ * então aqui basta ocupar a linha.
69
+ */
70
+ slot: {
71
+ leading: string;
72
+ trailing: string;
73
+ };
74
+ }, undefined, import('tailwind-variants').TVReturnType<{
75
+ /**
76
+ * `leading` = título + navegação. Empilhado, ocupa a linha inteira e
77
+ * separa os dois extremos — é o que joga `‹ Hoje ›` pro fim.
78
+ * `trailing` = busca + controles. A busca é quem estica (`flex-1` nela),
79
+ * então aqui basta ocupar a linha.
80
+ */
81
+ slot: {
82
+ leading: string;
83
+ trailing: string;
84
+ };
85
+ }, undefined, "flex min-w-0 items-center gap-gp-md", unknown, unknown, undefined>>;
86
+ /**
87
+ * Título do período ("setembro 2026"). `text-title-sm` e não `heading`: o
88
+ * calendário mora dentro de uma página que já tem `PageHeader` com o H1 — um
89
+ * heading aqui competiria com ele.
90
+ *
91
+ * `first-letter:uppercase` porque o date-fns com locale ptBR devolve o mês em
92
+ * minúscula ("setembro"), e no topo de um bloco isso lê como texto cortado.
93
+ * Capitalizar no CSS e não no JS mantém a string original acessível a quem
94
+ * usa `title` como override.
95
+ */
96
+ export declare const schedulerTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
97
+ /**
98
+ * Três segmentos colados num controle só. Não usa o `ButtonGroup` do DS de
99
+ * propósito: ele resolve o **split button** (2 slots, `Primary` + `Chevron`,
100
+ * com os cantos já decididos em `!rounded-r-none` / `!rounded-l-none`) e não
101
+ * tem como expressar um segmento do MEIO sem canto nenhum. Forçá-lo aqui
102
+ * exigiria brigar com os `!` dele.
103
+ *
104
+ * O que este grupo faz é só a junta: os três filhos continuam sendo `Button`
105
+ * do DS, então cor, foco, altura e estados vêm de lá.
106
+ *
107
+ * `-ml-px` no 2º em diante colapsa a borda dupla entre segmentos vizinhos.
108
+ */
109
+ export declare const schedulerNavGroup: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
110
+ /**
111
+ * Substituiu o segmented de 4 posições. O segmented mostrava as 4 opções de
112
+ * uma vez, o que é bom, mas custava ~230px numa toolbar que agora também tem
113
+ * botão de filtro — em 1280px ele empurrava a ação primária pra segunda linha.
114
+ * O dropdown custa ~110px e diz qual view está ativa no próprio rótulo.
115
+ */
116
+ export declare const schedulerViewTriggerLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "tabular-nums", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "tabular-nums", unknown, unknown, undefined>>;
117
+ export declare const schedulerViewMenuItem: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex items-center justify-between gap-gp-xl", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex items-center justify-between gap-gp-xl", unknown, unknown, undefined>>;
118
+ /**
119
+ * Ponto de "tem filtro aplicado" no canto do botão — mesma convenção do
120
+ * `toolbarToolDot` do `TableToolbar`. `border-2 border-bg-canvas` recorta o
121
+ * ponto do botão embaixo, senão ele parece um pixel sujo na borda.
122
+ */
123
+ export declare const schedulerFilterDot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
124
+ export declare const schedulerSearch: import('tailwind-variants').TVReturnType<{
125
+ /** Mantém expandido mesmo sem foco quando já há termo digitado. */
126
+ expanded: {
127
+ true: string;
128
+ false: string;
129
+ };
130
+ }, undefined, string[], {
131
+ /** Mantém expandido mesmo sem foco quando já há termo digitado. */
132
+ expanded: {
133
+ true: string;
134
+ false: string;
135
+ };
136
+ }, undefined, import('tailwind-variants').TVReturnType<{
137
+ /** Mantém expandido mesmo sem foco quando já há termo digitado. */
138
+ expanded: {
139
+ true: string;
140
+ false: string;
141
+ };
142
+ }, undefined, string[], unknown, unknown, undefined>>;
143
+ export declare const schedulerSearchInput: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
144
+ export declare const schedulerFilterRow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
145
+ /**
146
+ * Chip de filtro **aplicado**. Desde que o painel lateral passou a ser o lugar
147
+ * de escolher, esta linha não mostra mais chip vazio de borda tracejada: ela é
148
+ * só o resumo do que está ligado, com o `×` pra desligar sem reabrir o painel
149
+ * — que é o que a L-051 pede (o estado filtrado tem que ser visível e
150
+ * desfazível sem procurar o controle que o produziu).
151
+ *
152
+ * A variante `applied` continua no tv() porque o `false` ainda serve pro caso
153
+ * de um chip renderizado durante a animação de saída.
154
+ */
155
+ export declare const schedulerFilterChip: import('tailwind-variants').TVReturnType<{
156
+ applied: {
157
+ true: string;
158
+ false: string;
159
+ };
160
+ }, undefined, string[], {
161
+ applied: {
162
+ true: string;
163
+ false: string;
164
+ };
165
+ }, undefined, import('tailwind-variants').TVReturnType<{
166
+ applied: {
167
+ true: string;
168
+ false: string;
169
+ };
170
+ }, undefined, string[], unknown, unknown, undefined>>;
171
+ export declare const schedulerFilterChipName: 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>>;
172
+ export declare const schedulerFilterChipValue: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
173
+ export declare const schedulerClearLink: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
174
+ /**
175
+ * A área abaixo da toolbar. O painel de filtro é uma **coluna de verdade**, não
176
+ * um overlay: ele empurra a grade em vez de cobri-la.
177
+ *
178
+ * É a diferença que importa aqui. Um `Popover`/`Sheet` por cima obriga a
179
+ * fechar pra ver o efeito do filtro — e filtro é exatamente o controle cujo
180
+ * resultado você quer olhar enquanto mexe. Como coluna, marcar uma caixa e ver
181
+ * a grade reagir acontece no mesmo gesto.
182
+ *
183
+ * O custo é largura: a grade encolhe ~296px. Por isso o painel é fechado por
184
+ * default e some abaixo de `lg` (ver `schedulerFilterAside`).
185
+ */
186
+ export declare const schedulerBody: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex min-h-0 flex-1 gap-gp-2xl", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex min-h-0 flex-1 gap-gp-2xl", unknown, unknown, undefined>>;
187
+ export declare const schedulerMain: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex min-h-0 min-w-0 flex-1 flex-col", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex min-h-0 min-w-0 flex-1 flex-col", unknown, unknown, undefined>>;
188
+ /**
189
+ * `w-[280px] shrink-0` — largura fixa, não fração: o mini-calendário tem 7
190
+ * colunas de largura mínima e uma fração de viewport o quebraria em telas
191
+ * médias.
192
+ *
193
+ * ⚠️ **Não há media query aqui, de propósito.** A primeira versão tinha
194
+ * `hidden lg:flex`, e o `scheduler.tsx` gateava o botão de filtro com um
195
+ * `matchMedia("(min-width: 1024px)")` — o MESMO breakpoint escrito em dois
196
+ * lugares, com dois mecanismos diferentes. Medido no browser: dá pra chegar num
197
+ * estado em que o botão se diz aberto e o painel está `display: none`, ou seja
198
+ * um controle que não faz nada visível.
199
+ *
200
+ * Agora o breakpoint vive **só** no `useMediaQuery` do `scheduler.tsx`, que
201
+ * decide se o painel é montado. Uma fonte de verdade: painel no DOM ⟺ botão
202
+ * diz aberto. Se o hook estiver defasado, os dois estão defasados juntos —
203
+ * consistente, em vez de contraditório.
204
+ */
205
+ export declare const schedulerFilterAside: import('tailwind-variants').TVReturnType<{
206
+ /**
207
+ * `embedded` = o painel vive DENTRO de outro contêiner que já é a
208
+ * superfície — hoje o `FloatingPanel` do modo drawer (<1024px).
209
+ *
210
+ * Como coluna (`false`, o default) ele É o card: largura própria, borda,
211
+ * radius e fundo. Embutido, os quatro viram defeito — largura fixa deixa
212
+ * uma faixa morta à direita do drawer, e borda+radius+fundo repetem a
213
+ * superfície do painel que já o embrulha (card dentro de card, a mesma
214
+ * classe de erro da L-050).
215
+ */
216
+ embedded: {
217
+ false: string[];
218
+ true: string;
219
+ };
220
+ }, undefined, string[], {
221
+ /**
222
+ * `embedded` = o painel vive DENTRO de outro contêiner que já é a
223
+ * superfície — hoje o `FloatingPanel` do modo drawer (<1024px).
224
+ *
225
+ * Como coluna (`false`, o default) ele É o card: largura própria, borda,
226
+ * radius e fundo. Embutido, os quatro viram defeito — largura fixa deixa
227
+ * uma faixa morta à direita do drawer, e borda+radius+fundo repetem a
228
+ * superfície do painel que já o embrulha (card dentro de card, a mesma
229
+ * classe de erro da L-050).
230
+ */
231
+ embedded: {
232
+ false: string[];
233
+ true: string;
234
+ };
235
+ }, undefined, import('tailwind-variants').TVReturnType<{
236
+ /**
237
+ * `embedded` = o painel vive DENTRO de outro contêiner que já é a
238
+ * superfície — hoje o `FloatingPanel` do modo drawer (<1024px).
239
+ *
240
+ * Como coluna (`false`, o default) ele É o card: largura própria, borda,
241
+ * radius e fundo. Embutido, os quatro viram defeito — largura fixa deixa
242
+ * uma faixa morta à direita do drawer, e borda+radius+fundo repetem a
243
+ * superfície do painel que já o embrulha (card dentro de card, a mesma
244
+ * classe de erro da L-050).
245
+ */
246
+ embedded: {
247
+ false: string[];
248
+ true: string;
249
+ };
250
+ }, undefined, string[], unknown, unknown, undefined>>;
251
+ /**
252
+ * Seção do painel — **inteiriça**, com padding próprio, e a divisória de ponta
253
+ * a ponta entre uma e outra.
254
+ *
255
+ * O painel não tem padding nem gap: quem paga o respiro é a seção. É o que faz
256
+ * a linha divisória chegar até as bordas do card, do jeito que se espera de uma
257
+ * pilha de blocos. Com padding no container e `gap`, a divisória ficaria
258
+ * recuada dos dois lados e leria como sublinhado de um item, não como separação
259
+ * entre blocos.
260
+ *
261
+ * `last:border-b-0` fecha a última: a borda do card já encerra a pilha, e uma
262
+ * divisória imediatamente antes dela vira duas linhas paralelas a 1px.
263
+ */
264
+ export declare const schedulerAsideSection: import('tailwind-variants').TVReturnType<{
265
+ /** O cabeçalho é mais raso: só uma linha de título + ações. */
266
+ compact: {
267
+ true: string;
268
+ false: string;
269
+ };
270
+ /**
271
+ * Cabeçalho fixo no topo enquanto o resto rola.
272
+ *
273
+ * `bg-bg-surface` é **obrigatório** e não decoração: `sticky` não cria
274
+ * fundo, então sem ele o mini-calendário passaria por baixo do título. E
275
+ * `z-[1]` porque as caixas e o `Checkbox` do Radix criam contexto próprio
276
+ * de empilhamento — sem o z, o conteúdo que rola sobrepõe o cabeçalho.
277
+ */
278
+ sticky: {
279
+ true: string;
280
+ false: string;
281
+ };
282
+ }, undefined, string[], {
283
+ /** O cabeçalho é mais raso: só uma linha de título + ações. */
284
+ compact: {
285
+ true: string;
286
+ false: string;
287
+ };
288
+ /**
289
+ * Cabeçalho fixo no topo enquanto o resto rola.
290
+ *
291
+ * `bg-bg-surface` é **obrigatório** e não decoração: `sticky` não cria
292
+ * fundo, então sem ele o mini-calendário passaria por baixo do título. E
293
+ * `z-[1]` porque as caixas e o `Checkbox` do Radix criam contexto próprio
294
+ * de empilhamento — sem o z, o conteúdo que rola sobrepõe o cabeçalho.
295
+ */
296
+ sticky: {
297
+ true: string;
298
+ false: string;
299
+ };
300
+ }, undefined, import('tailwind-variants').TVReturnType<{
301
+ /** O cabeçalho é mais raso: só uma linha de título + ações. */
302
+ compact: {
303
+ true: string;
304
+ false: string;
305
+ };
306
+ /**
307
+ * Cabeçalho fixo no topo enquanto o resto rola.
308
+ *
309
+ * `bg-bg-surface` é **obrigatório** e não decoração: `sticky` não cria
310
+ * fundo, então sem ele o mini-calendário passaria por baixo do título. E
311
+ * `z-[1]` porque as caixas e o `Checkbox` do Radix criam contexto próprio
312
+ * de empilhamento — sem o z, o conteúdo que rola sobrepõe o cabeçalho.
313
+ */
314
+ sticky: {
315
+ true: string;
316
+ false: string;
317
+ };
318
+ }, undefined, string[], unknown, unknown, undefined>>;
319
+ export declare const schedulerAsideHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex items-center justify-between gap-gp-md", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex items-center justify-between gap-gp-md", unknown, unknown, undefined>>;
320
+ export declare const schedulerAsideTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "text-body-sm font-semibold text-fg-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "text-body-sm font-semibold text-fg-default", unknown, unknown, undefined>>;
321
+ export declare const schedulerMiniHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex items-center justify-between gap-gp-sm", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex items-center justify-between gap-gp-sm", unknown, unknown, undefined>>;
322
+ export declare const schedulerMiniTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-w-0 truncate text-body-sm font-semibold text-fg-default first-letter:uppercase", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-w-0 truncate text-body-sm font-semibold text-fg-default first-letter:uppercase", unknown, unknown, undefined>>;
323
+ export declare const schedulerMiniGrid: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "grid grid-cols-7 gap-gp-2xs", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "grid grid-cols-7 gap-gp-2xs", unknown, unknown, undefined>>;
324
+ export declare const schedulerMiniWeekday: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
325
+ /**
326
+ * Célula do mini-calendário. `today` é o anel; `selected` é o preenchido — os
327
+ * dois podem coexistir, e é por isso que são variantes separadas em vez de um
328
+ * único `state`. Quando coincidem, o preenchido vence e o anel some (senão
329
+ * viram dois círculos concêntricos de 24px, ilegíveis).
330
+ */
331
+ export declare const schedulerMiniDay: import('tailwind-variants').TVReturnType<{
332
+ outside: {
333
+ true: string;
334
+ false: string;
335
+ };
336
+ hasEvents: {
337
+ true: string;
338
+ false: string;
339
+ };
340
+ today: {
341
+ true: string;
342
+ false: string;
343
+ };
344
+ selected: {
345
+ true: string;
346
+ false: string;
347
+ };
348
+ }, undefined, string[], {
349
+ outside: {
350
+ true: string;
351
+ false: string;
352
+ };
353
+ hasEvents: {
354
+ true: string;
355
+ false: string;
356
+ };
357
+ today: {
358
+ true: string;
359
+ false: string;
360
+ };
361
+ selected: {
362
+ true: string;
363
+ false: string;
364
+ };
365
+ }, undefined, import('tailwind-variants').TVReturnType<{
366
+ outside: {
367
+ true: string;
368
+ false: string;
369
+ };
370
+ hasEvents: {
371
+ true: string;
372
+ false: string;
373
+ };
374
+ today: {
375
+ true: string;
376
+ false: string;
377
+ };
378
+ selected: {
379
+ true: string;
380
+ false: string;
381
+ };
382
+ }, undefined, string[], unknown, unknown, undefined>>;
383
+ export declare const schedulerGroup: 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>>;
384
+ /**
385
+ * `-mx-pad-sm px-pad-sm`: o fundo do hover sangra 6px pra fora, mas o TEXTO
386
+ * fica alinhado com o padding da seção. Sem o `-mx`, o rótulo do grupo ficaria
387
+ * 6px mais dentro que o título "Filtros" do cabeçalho — desalinho visível numa
388
+ * coluna estreita.
389
+ */
390
+ export declare const schedulerGroupHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
391
+ export declare const schedulerGroupChevron: import('tailwind-variants').TVReturnType<{
392
+ open: {
393
+ true: string;
394
+ false: string;
395
+ };
396
+ }, undefined, "transition-transform duration-150", {
397
+ open: {
398
+ true: string;
399
+ false: string;
400
+ };
401
+ }, undefined, import('tailwind-variants').TVReturnType<{
402
+ open: {
403
+ true: string;
404
+ false: string;
405
+ };
406
+ }, undefined, "transition-transform duration-150", unknown, unknown, undefined>>;
407
+ /**
408
+ * Linha de opção: `<label>` nativo embrulhando o `Checkbox`, **não**
409
+ * `<button>`. O label propaga o clique pro checkbox real, mantém a semântica
410
+ * de checkbox no leitor de tela e faz a linha inteira ser alvo de clique —
411
+ * é a mesma lição do `CardCheckbox` (L-025).
412
+ */
413
+ export declare const schedulerOption: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
414
+ export declare const schedulerOptionLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-w-0 flex-1 truncate", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-w-0 flex-1 truncate", unknown, unknown, undefined>>;
415
+ export declare const schedulerOptionCount: 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>>;
416
+ /**
417
+ * Cor da caixa quando marcada. Sobrescreve o `data-[state=checked]:bg-bg-brand`
418
+ * do `Checkbox` via `className` — `tailwind-merge` resolve o par (mesmo
419
+ * modificador, mesmo grupo de utilitário) mantendo o último.
420
+ *
421
+ * O `[&_svg]` é necessário porque o tique mora no `Indicator`, que é filho e
422
+ * não alcançável por className na raiz.
423
+ */
424
+ export declare const schedulerOptionBox: import('tailwind-variants').TVReturnType<{
425
+ color: {
426
+ brand: string;
427
+ info: string;
428
+ success: string;
429
+ warning: string;
430
+ danger: string;
431
+ neutral: string;
432
+ };
433
+ }, undefined, "shrink-0", {
434
+ color: {
435
+ brand: string;
436
+ info: string;
437
+ success: string;
438
+ warning: string;
439
+ danger: string;
440
+ neutral: string;
441
+ };
442
+ }, undefined, import('tailwind-variants').TVReturnType<{
443
+ color: {
444
+ brand: string;
445
+ info: string;
446
+ success: string;
447
+ warning: string;
448
+ danger: string;
449
+ neutral: string;
450
+ };
451
+ }, undefined, "shrink-0", unknown, unknown, undefined>>;
452
+ /**
453
+ * `overflow-hidden` + `rounded` no wrapper, e as células desenham só borda
454
+ * direita/inferior: é o que produz a régua interna sem borda dupla e sem
455
+ * precisar de `:last-child` em 42 células.
456
+ */
457
+ export declare const schedulerMonthFrame: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
458
+ export declare const schedulerWeekdayRow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
459
+ export declare const schedulerWeekdayCell: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
460
+ export declare const schedulerMonthGrid: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "grid min-h-0 flex-1 grid-cols-7 grid-rows-6", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "grid min-h-0 flex-1 grid-cols-7 grid-rows-6", unknown, unknown, undefined>>;
461
+ /**
462
+ * `[&:nth-child(7n)]:border-r-0` zera a borda direita da última coluna sem
463
+ * precisar passar índice pro componente da célula.
464
+ */
465
+ export declare const schedulerMonthCell: import('tailwind-variants').TVReturnType<{
466
+ /** Dia de mês vizinho — recuado, não escondido: a grade é sempre 6×7. */
467
+ outside: {
468
+ true: string;
469
+ false: string;
470
+ };
471
+ /** Última linha da grade não desenha borda inferior (o frame já fecha). */
472
+ lastRow: {
473
+ true: string;
474
+ false: string;
475
+ };
476
+ interactive: {
477
+ true: string;
478
+ false: string;
479
+ };
480
+ }, undefined, string[], {
481
+ /** Dia de mês vizinho — recuado, não escondido: a grade é sempre 6×7. */
482
+ outside: {
483
+ true: string;
484
+ false: string;
485
+ };
486
+ /** Última linha da grade não desenha borda inferior (o frame já fecha). */
487
+ lastRow: {
488
+ true: string;
489
+ false: string;
490
+ };
491
+ interactive: {
492
+ true: string;
493
+ false: string;
494
+ };
495
+ }, undefined, import('tailwind-variants').TVReturnType<{
496
+ /** Dia de mês vizinho — recuado, não escondido: a grade é sempre 6×7. */
497
+ outside: {
498
+ true: string;
499
+ false: string;
500
+ };
501
+ /** Última linha da grade não desenha borda inferior (o frame já fecha). */
502
+ lastRow: {
503
+ true: string;
504
+ false: string;
505
+ };
506
+ interactive: {
507
+ true: string;
508
+ false: string;
509
+ };
510
+ }, undefined, string[], unknown, unknown, undefined>>;
511
+ export declare const schedulerDayHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex shrink-0 items-center justify-between gap-gp-sm", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex shrink-0 items-center justify-between gap-gp-sm", unknown, unknown, undefined>>;
512
+ /**
513
+ * Número do dia. `tabular-nums` pra 1 e 11 ocuparem a mesma largura — sem
514
+ * isso a coluna de números "dança" entre as linhas.
515
+ */
516
+ export declare const schedulerDayNumber: import('tailwind-variants').TVReturnType<{
517
+ today: {
518
+ true: string;
519
+ false: string;
520
+ };
521
+ outside: {
522
+ true: string;
523
+ false: string;
524
+ };
525
+ }, undefined, string[], {
526
+ today: {
527
+ true: string;
528
+ false: string;
529
+ };
530
+ outside: {
531
+ true: string;
532
+ false: string;
533
+ };
534
+ }, undefined, import('tailwind-variants').TVReturnType<{
535
+ today: {
536
+ true: string;
537
+ false: string;
538
+ };
539
+ outside: {
540
+ true: string;
541
+ false: string;
542
+ };
543
+ }, undefined, string[], unknown, unknown, undefined>>;
544
+ /**
545
+ * O `+` de criar evento, revelado no hover ou no foco da célula. Fica em
546
+ * `opacity-0` e não em `hidden` pra manter o alvo de foco no fluxo do
547
+ * teclado — `hidden` o tiraria da ordem de tabulação (spec §6.2).
548
+ */
549
+ export declare const schedulerSlotAdd: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
550
+ export declare const schedulerCellEvents: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex min-h-0 flex-col gap-gp-2xs overflow-hidden", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex min-h-0 flex-col gap-gp-2xs overflow-hidden", unknown, unknown, undefined>>;
551
+ export declare const schedulerOverflowButton: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
552
+ export declare const schedulerOverflowPanel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex max-h-[320px] min-w-[240px] flex-col gap-gp-2xs overflow-y-auto p-sp-xs", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex max-h-[320px] min-w-[240px] flex-col gap-gp-2xs overflow-y-auto p-sp-xs", unknown, unknown, undefined>>;
553
+ export declare const schedulerOverflowPanelTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "px-pad-md pb-pad-sm text-caption-sm font-semibold text-fg-muted first-letter:uppercase", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "px-pad-md pb-pad-sm text-caption-sm font-semibold text-fg-muted first-letter:uppercase", unknown, unknown, undefined>>;
554
+ /**
555
+ * ⚠️ **`HOUR_HEIGHT_PX` em `views/time-grid.tsx` espelha `h-comp-3xl` (48px).**
556
+ * A altura da hora precisa existir como número em JS porque
557
+ * `minutesToOffset()` posiciona os eventos em px. Se este valor mudar aqui,
558
+ * mude lá — é o acoplamento inevitável de posicionamento absoluto sobre grade
559
+ * tokenizada, e está declarado dos dois lados.
560
+ */
561
+ export declare const schedulerTimeFrame: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
562
+ /** Cabeçalho de dias: o vão da esquerda alinha com o gutter de horas. */
563
+ export declare const schedulerTimeHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex shrink-0 border-b border-border-default bg-bg-subtle dark:bg-bg-canvas", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex shrink-0 border-b border-border-default bg-bg-subtle dark:bg-bg-canvas", unknown, unknown, undefined>>;
564
+ /**
565
+ * Largura do gutter de horas. `w-comp-4xl` (56px) cabe "12:00 AM" no formato
566
+ * 12h — o 24h caberia em menos, mas variar a largura por formato faria a grade
567
+ * "pular" ao trocar de idioma.
568
+ */
569
+ export declare const schedulerTimeGutter: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "w-comp-4xl shrink-0", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "w-comp-4xl shrink-0", unknown, unknown, undefined>>;
570
+ export declare const schedulerTimeHeadDay: import('tailwind-variants').TVReturnType<{
571
+ /** Sábado/domingo recuados — mesma leitura da grade do mês. */
572
+ weekend: {
573
+ true: string;
574
+ false: string;
575
+ };
576
+ }, undefined, string[], {
577
+ /** Sábado/domingo recuados — mesma leitura da grade do mês. */
578
+ weekend: {
579
+ true: string;
580
+ false: string;
581
+ };
582
+ }, undefined, import('tailwind-variants').TVReturnType<{
583
+ /** Sábado/domingo recuados — mesma leitura da grade do mês. */
584
+ weekend: {
585
+ true: string;
586
+ false: string;
587
+ };
588
+ }, undefined, string[], unknown, unknown, undefined>>;
589
+ export declare const schedulerTimeHeadWeekday: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "text-caption-md font-medium uppercase text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "text-caption-md font-medium uppercase text-fg-muted", unknown, unknown, undefined>>;
590
+ /** Banda de dia inteiro, entre o cabeçalho e a grade rolável. */
591
+ export declare const schedulerAllDayRow: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "flex shrink-0 border-b border-border-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "flex shrink-0 border-b border-border-default", unknown, unknown, undefined>>;
592
+ export declare const schedulerAllDayLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
593
+ export declare const schedulerAllDayCell: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
594
+ /**
595
+ * O corpo rolável. `scrollbar-thin` é a barra do DS; `overscroll-contain` evita
596
+ * que rolar até o fim da grade continue rolando a página atrás.
597
+ */
598
+ export declare const schedulerTimeBody: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-h-0 flex-1 overflow-y-auto overscroll-contain scrollbar-thin", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-h-0 flex-1 overflow-y-auto overscroll-contain scrollbar-thin", unknown, unknown, undefined>>;
599
+ export declare const schedulerTimeCanvas: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "relative flex", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "relative flex", unknown, unknown, undefined>>;
600
+ /**
601
+ * Rótulo da hora. Fica no TOPO da própria faixa, deslocado meia-linha pra cima
602
+ * (`-translate-y-1/2`), que é a convenção de calendário: o rótulo marca a linha,
603
+ * não a faixa. Sem o deslocamento, "09:00" aparece centralizado no bloco das 9h
604
+ * e o usuário lê a linha errada.
605
+ *
606
+ * O primeiro rótulo é ocultado (`first:opacity-0`) porque metade dele sairia
607
+ * acima da área visível.
608
+ */
609
+ export declare const schedulerHourLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
610
+ export declare const schedulerHourLabelText: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "-translate-y-1/2", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "-translate-y-1/2", unknown, unknown, undefined>>;
611
+ export declare const schedulerTimeColumn: import('tailwind-variants').TVReturnType<{
612
+ weekend: {
613
+ true: string;
614
+ false: string;
615
+ };
616
+ }, undefined, "relative min-w-0 flex-1 border-l border-border-subtle", {
617
+ weekend: {
618
+ true: string;
619
+ false: string;
620
+ };
621
+ }, undefined, import('tailwind-variants').TVReturnType<{
622
+ weekend: {
623
+ true: string;
624
+ false: string;
625
+ };
626
+ }, undefined, "relative min-w-0 flex-1 border-l border-border-subtle", unknown, unknown, undefined>>;
627
+ /**
628
+ * Uma faixa de hora dentro da coluna. É `button` porque é alvo de clique
629
+ * (criar evento naquela hora) — um `div` com `onClick` não é alcançável por
630
+ * teclado nem anunciado como acionável.
631
+ */
632
+ export declare const schedulerHourSlot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
633
+ /** Linha do "agora". `pointer-events-none` pra não roubar clique da faixa. */
634
+ export declare const schedulerNowLine: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "pointer-events-none absolute left-0 right-0 z-[2] flex items-center", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "pointer-events-none absolute left-0 right-0 z-[2] flex items-center", unknown, unknown, undefined>>;
635
+ export declare const schedulerNowDot: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "-ml-[4px] size-[8px] shrink-0 rounded-radius-full bg-bg-brand", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "-ml-[4px] size-[8px] shrink-0 rounded-radius-full bg-bg-brand", unknown, unknown, undefined>>;
636
+ export declare const schedulerNowStroke: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "h-px flex-1 bg-bg-brand", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "h-px flex-1 bg-bg-brand", unknown, unknown, undefined>>;
637
+ /** Rótulo "agora" no gutter, alinhado com a linha. */
638
+ export declare const schedulerNowLabel: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
639
+ export declare const schedulerListFrame: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
640
+ export declare const schedulerListDay: 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>>;
641
+ /**
642
+ * Cabeçalho do dia. `sticky` com fundo opaco: numa agenda longa, saber "que dia
643
+ * é este que estou lendo" é justamente o que se perde ao rolar.
644
+ */
645
+ export declare const schedulerListDayHead: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
646
+ export declare const schedulerListDayNumber: import('tailwind-variants').TVReturnType<{
647
+ today: {
648
+ true: string;
649
+ false: string;
650
+ };
651
+ }, undefined, "text-title-sm font-semibold tabular-nums", {
652
+ today: {
653
+ true: string;
654
+ false: string;
655
+ };
656
+ }, undefined, import('tailwind-variants').TVReturnType<{
657
+ today: {
658
+ true: string;
659
+ false: string;
660
+ };
661
+ }, undefined, "text-title-sm font-semibold tabular-nums", unknown, unknown, undefined>>;
662
+ export declare const schedulerListDayName: 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>>;
663
+ export declare const schedulerListEvents: 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>>;
664
+ /**
665
+ * ⚠️ **A cor NUNCA vai no texto.** Medido em WCAG antes de decidir (spec
666
+ * §2.1): `text-fg-{cor}` sobre a pílula tingida dá 1.72–4.49 no claro e
667
+ * 2.97–4.31 no escuro — nenhuma das 6 famílias passa AA, e `warning` chega a
668
+ * 1.72:1. O texto é sempre `fg-default` (17.46–18.42 / 7.45–10.95, AAA nos
669
+ * dois modos) e a cor mora no **tint de fundo, na borda e no dot/barra de
670
+ * acento**. Hierarquia dentro do pill se faz por peso e tamanho, não por cor.
671
+ *
672
+ * Corolário de acessibilidade: cor é reforço, nunca o único portador da
673
+ * informação — o título sempre diz o que o evento é.
674
+ */
675
+ export declare const schedulerEvent: import('tailwind-variants').TVReturnType<{
676
+ color: {
677
+ brand: string;
678
+ info: string;
679
+ success: string;
680
+ warning: string;
681
+ danger: string;
682
+ neutral: string;
683
+ };
684
+ variant: {
685
+ /** Mês: linha de 20px, uma só, sem quebra. */
686
+ pill: string;
687
+ /** Week/day: bloco absoluto que ocupa a duração. */
688
+ block: string;
689
+ /** List/agenda: linha larga com descrição. */
690
+ row: string;
691
+ };
692
+ /** Continuação de evento multi-dia: perde o canto do lado truncado. */
693
+ truncateStart: {
694
+ true: string;
695
+ false: string;
696
+ };
697
+ truncateEnd: {
698
+ true: string;
699
+ false: string;
700
+ };
701
+ /**
702
+ * Enquanto arrasta: sombra alta pra o bloco "sair da superfície", z acima
703
+ * dos vizinhos, e `cursor-grabbing`.
704
+ *
705
+ * ⚠️ **Sem `transition` neste estado.** O `transform` do dnd-kit é atualizado
706
+ * a cada movimento do ponteiro; uma transição em cima dele faz o bloco
707
+ * perseguir o cursor com atraso — o gesto fica elástico e impreciso. A
708
+ * transição vive no estado NÃO-arrastando (`movable`), que é onde ela serve:
709
+ * o assentamento depois do soltar.
710
+ */
711
+ dragging: {
712
+ true: string;
713
+ false: string;
714
+ };
715
+ /** Arrastável e em repouso: mão aberta + transição de assentamento. */
716
+ movable: {
717
+ true: string;
718
+ false: string;
719
+ };
720
+ disabled: {
721
+ true: string;
722
+ false: string;
723
+ };
724
+ }, undefined, string[], {
725
+ color: {
726
+ brand: string;
727
+ info: string;
728
+ success: string;
729
+ warning: string;
730
+ danger: string;
731
+ neutral: string;
732
+ };
733
+ variant: {
734
+ /** Mês: linha de 20px, uma só, sem quebra. */
735
+ pill: string;
736
+ /** Week/day: bloco absoluto que ocupa a duração. */
737
+ block: string;
738
+ /** List/agenda: linha larga com descrição. */
739
+ row: string;
740
+ };
741
+ /** Continuação de evento multi-dia: perde o canto do lado truncado. */
742
+ truncateStart: {
743
+ true: string;
744
+ false: string;
745
+ };
746
+ truncateEnd: {
747
+ true: string;
748
+ false: string;
749
+ };
750
+ /**
751
+ * Enquanto arrasta: sombra alta pra o bloco "sair da superfície", z acima
752
+ * dos vizinhos, e `cursor-grabbing`.
753
+ *
754
+ * ⚠️ **Sem `transition` neste estado.** O `transform` do dnd-kit é atualizado
755
+ * a cada movimento do ponteiro; uma transição em cima dele faz o bloco
756
+ * perseguir o cursor com atraso — o gesto fica elástico e impreciso. A
757
+ * transição vive no estado NÃO-arrastando (`movable`), que é onde ela serve:
758
+ * o assentamento depois do soltar.
759
+ */
760
+ dragging: {
761
+ true: string;
762
+ false: string;
763
+ };
764
+ /** Arrastável e em repouso: mão aberta + transição de assentamento. */
765
+ movable: {
766
+ true: string;
767
+ false: string;
768
+ };
769
+ disabled: {
770
+ true: string;
771
+ false: string;
772
+ };
773
+ }, undefined, import('tailwind-variants').TVReturnType<{
774
+ color: {
775
+ brand: string;
776
+ info: string;
777
+ success: string;
778
+ warning: string;
779
+ danger: string;
780
+ neutral: string;
781
+ };
782
+ variant: {
783
+ /** Mês: linha de 20px, uma só, sem quebra. */
784
+ pill: string;
785
+ /** Week/day: bloco absoluto que ocupa a duração. */
786
+ block: string;
787
+ /** List/agenda: linha larga com descrição. */
788
+ row: string;
789
+ };
790
+ /** Continuação de evento multi-dia: perde o canto do lado truncado. */
791
+ truncateStart: {
792
+ true: string;
793
+ false: string;
794
+ };
795
+ truncateEnd: {
796
+ true: string;
797
+ false: string;
798
+ };
799
+ /**
800
+ * Enquanto arrasta: sombra alta pra o bloco "sair da superfície", z acima
801
+ * dos vizinhos, e `cursor-grabbing`.
802
+ *
803
+ * ⚠️ **Sem `transition` neste estado.** O `transform` do dnd-kit é atualizado
804
+ * a cada movimento do ponteiro; uma transição em cima dele faz o bloco
805
+ * perseguir o cursor com atraso — o gesto fica elástico e impreciso. A
806
+ * transição vive no estado NÃO-arrastando (`movable`), que é onde ela serve:
807
+ * o assentamento depois do soltar.
808
+ */
809
+ dragging: {
810
+ true: string;
811
+ false: string;
812
+ };
813
+ /** Arrastável e em repouso: mão aberta + transição de assentamento. */
814
+ movable: {
815
+ true: string;
816
+ false: string;
817
+ };
818
+ disabled: {
819
+ true: string;
820
+ false: string;
821
+ };
822
+ }, undefined, string[], unknown, unknown, undefined>>;
823
+ /**
824
+ * Alça de resize — 6px na borda do bloco, revelada no hover/foco.
825
+ *
826
+ * `h-[6px]` e não um token: é área de AGARRE, não espaçamento. Não existe token
827
+ * de "alvo de arraste" no DS, e reusar `sp-2xs` (2px) aqui seria emprestar um
828
+ * nome de espaçamento pra dizer outra coisa — a L-060 avisa exatamente sobre
829
+ * isso. 6px é o mesmo threshold do sensor, então o alvo nunca é menor que o
830
+ * gesto que o ativa.
831
+ *
832
+ * `absolute inset-x-0` cobre a largura toda do bloco: alça estreita no meio
833
+ * seria um alvo que o usuário precisa procurar.
834
+ */
835
+ export declare const schedulerResizeHandle: import('tailwind-variants').TVReturnType<{
836
+ edge: {
837
+ start: string;
838
+ end: string;
839
+ };
840
+ }, undefined, string[], {
841
+ edge: {
842
+ start: string;
843
+ end: string;
844
+ };
845
+ }, undefined, import('tailwind-variants').TVReturnType<{
846
+ edge: {
847
+ start: string;
848
+ end: string;
849
+ };
850
+ }, undefined, string[], unknown, unknown, undefined>>;
851
+ /**
852
+ * Célula/coluna sob o cursor durante o arraste. Fundo de marca sutil + borda
853
+ * interna — é o "vai cair aqui" que o gesto precisa pra não ser adivinhação.
854
+ *
855
+ * `inset` em vez de `ring`: a célula do mês já tem borda de grade, e um ring por
856
+ * fora vazaria pra célula vizinha.
857
+ */
858
+ export declare const schedulerDropTarget: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "bg-bg-brand-subtle shadow-[inset_0_0_0_2px_var(--color-border-brand)]", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "bg-bg-brand-subtle shadow-[inset_0_0_0_2px_var(--color-border-brand)]", unknown, unknown, undefined>>;
859
+ /** Dot/barra de acento — é aqui que a cor da categoria realmente aparece. */
860
+ export declare const schedulerEventDot: import('tailwind-variants').TVReturnType<{
861
+ color: {
862
+ brand: string;
863
+ info: string;
864
+ success: string;
865
+ warning: string;
866
+ danger: string;
867
+ neutral: string;
868
+ };
869
+ size: {
870
+ sm: string;
871
+ md: string;
872
+ };
873
+ }, undefined, "shrink-0 rounded-radius-full", {
874
+ color: {
875
+ brand: string;
876
+ info: string;
877
+ success: string;
878
+ warning: string;
879
+ danger: string;
880
+ neutral: string;
881
+ };
882
+ size: {
883
+ sm: string;
884
+ md: string;
885
+ };
886
+ }, undefined, import('tailwind-variants').TVReturnType<{
887
+ color: {
888
+ brand: string;
889
+ info: string;
890
+ success: string;
891
+ warning: string;
892
+ danger: string;
893
+ neutral: string;
894
+ };
895
+ size: {
896
+ sm: string;
897
+ md: string;
898
+ };
899
+ }, undefined, "shrink-0 rounded-radius-full", unknown, unknown, undefined>>;
900
+ export declare const schedulerEventTitle: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-w-0 flex-1 truncate font-medium text-fg-default", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-w-0 flex-1 truncate font-medium text-fg-default", unknown, unknown, undefined>>;
901
+ export declare const schedulerEventTime: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "shrink-0 tabular-nums text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "shrink-0 tabular-nums text-fg-muted", unknown, unknown, undefined>>;
902
+ export declare const schedulerEventDescription: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "min-w-0 truncate text-caption-sm text-fg-muted", {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "min-w-0 truncate text-caption-sm text-fg-muted", unknown, unknown, undefined>>;
903
+ /**
904
+ * Existe de propósito e é temporário: `week`, `day` e `list` chegam nas
905
+ * fatias seguintes. Mostrar um aviso honesto é melhor do que esconder a
906
+ * opção no segmented (o usuário não descobriria que a view vai existir) ou
907
+ * do que renderizar uma grade vazia que parece defeito.
908
+ */
909
+ export declare const schedulerPlaceholder: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
910
+ export type SchedulerEventVariants = VariantProps<typeof schedulerEvent>;
911
+ //# sourceMappingURL=scheduler.styles.d.ts.map