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