@snksergio/design-system 0.58.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist-lib/index.cjs +4461 -16
  2. package/dist-lib/index.cjs.map +1 -1
  3. package/dist-lib/index.mjs +4477 -32
  4. package/dist-lib/index.mjs.map +1 -1
  5. package/dist-lib/src/components/index.d.ts +1 -0
  6. package/dist-lib/src/components/index.d.ts.map +1 -1
  7. package/dist-lib/src/components/ui/Gantt/gantt.d.ts +21 -0
  8. package/dist-lib/src/components/ui/Gantt/gantt.d.ts.map +1 -0
  9. package/dist-lib/src/components/ui/Gantt/gantt.styles.d.ts +2985 -0
  10. package/dist-lib/src/components/ui/Gantt/gantt.styles.d.ts.map +1 -0
  11. package/dist-lib/src/components/ui/Gantt/gantt.types.d.ts +445 -0
  12. package/dist-lib/src/components/ui/Gantt/gantt.types.d.ts.map +1 -0
  13. package/dist-lib/src/components/ui/Gantt/hooks/drag.d.ts +71 -0
  14. package/dist-lib/src/components/ui/Gantt/hooks/drag.d.ts.map +1 -0
  15. package/dist-lib/src/components/ui/Gantt/hooks/filters.d.ts +79 -0
  16. package/dist-lib/src/components/ui/Gantt/hooks/filters.d.ts.map +1 -0
  17. package/dist-lib/src/components/ui/Gantt/hooks/layout.d.ts +232 -0
  18. package/dist-lib/src/components/ui/Gantt/hooks/layout.d.ts.map +1 -0
  19. package/dist-lib/src/components/ui/Gantt/hooks/links.d.ts +120 -0
  20. package/dist-lib/src/components/ui/Gantt/hooks/links.d.ts.map +1 -0
  21. package/dist-lib/src/components/ui/Gantt/hooks/week-segments.d.ts +69 -0
  22. package/dist-lib/src/components/ui/Gantt/hooks/week-segments.d.ts.map +1 -0
  23. package/dist-lib/src/components/ui/Gantt/index.d.ts +46 -0
  24. package/dist-lib/src/components/ui/Gantt/index.d.ts.map +1 -0
  25. package/dist-lib/src/components/ui/Gantt/parts/gantt-applied-filters.d.ts +20 -0
  26. package/dist-lib/src/components/ui/Gantt/parts/gantt-applied-filters.d.ts.map +1 -0
  27. package/dist-lib/src/components/ui/Gantt/parts/gantt-bar.d.ts +68 -0
  28. package/dist-lib/src/components/ui/Gantt/parts/gantt-bar.d.ts.map +1 -0
  29. package/dist-lib/src/components/ui/Gantt/parts/gantt-filter-panel.d.ts +16 -0
  30. package/dist-lib/src/components/ui/Gantt/parts/gantt-filter-panel.d.ts.map +1 -0
  31. package/dist-lib/src/components/ui/Gantt/parts/gantt-grid.d.ts +55 -0
  32. package/dist-lib/src/components/ui/Gantt/parts/gantt-grid.d.ts.map +1 -0
  33. package/dist-lib/src/components/ui/Gantt/parts/gantt-links-layer.d.ts +46 -0
  34. package/dist-lib/src/components/ui/Gantt/parts/gantt-links-layer.d.ts.map +1 -0
  35. package/dist-lib/src/components/ui/Gantt/parts/gantt-skeleton.d.ts +36 -0
  36. package/dist-lib/src/components/ui/Gantt/parts/gantt-skeleton.d.ts.map +1 -0
  37. package/dist-lib/src/components/ui/Gantt/parts/gantt-toolbar.d.ts +46 -0
  38. package/dist-lib/src/components/ui/Gantt/parts/gantt-toolbar.d.ts.map +1 -0
  39. package/dist-lib/src/components/ui/Gantt/views/calendar.d.ts +64 -0
  40. package/dist-lib/src/components/ui/Gantt/views/calendar.d.ts.map +1 -0
  41. package/dist-lib/src/components/ui/Gantt/views/list.d.ts +53 -0
  42. package/dist-lib/src/components/ui/Gantt/views/list.d.ts.map +1 -0
  43. package/dist-lib/src/components/ui/Gantt/views/timeline.d.ts +85 -0
  44. package/dist-lib/src/components/ui/Gantt/views/timeline.d.ts.map +1 -0
  45. package/dist-lib/src/components/ui/MessageBubble/index.d.ts +1 -1
  46. package/dist-lib/src/components/ui/MessageBubble/index.d.ts.map +1 -1
  47. package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts +1 -1
  48. package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts.map +1 -1
  49. package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts +22 -2
  50. package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts.map +1 -1
  51. package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts +8 -0
  52. package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts.map +1 -1
  53. package/dist-lib/theme/brand-pay.css +205 -189
  54. package/dist-lib/theme/brand-vibrant.css +162 -148
  55. package/dist-lib/theme.css +19 -0
  56. package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts +28 -0
  57. package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts.map +1 -1
  58. package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts +16 -0
  59. package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts.map +1 -1
  60. package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts +16 -0
  61. package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts.map +1 -1
  62. package/dist-lib/tokens/brands/default/primitives/color-palette.d.ts +29 -0
  63. package/dist-lib/tokens/brands/default/primitives/color-palette.d.ts.map +1 -1
  64. package/dist-lib/tokens/brands/default/semantic/color-dark.d.ts +16 -0
  65. package/dist-lib/tokens/brands/default/semantic/color-dark.d.ts.map +1 -1
  66. package/dist-lib/tokens/brands/default/semantic/color-light.d.ts +16 -0
  67. package/dist-lib/tokens/brands/default/semantic/color-light.d.ts.map +1 -1
  68. package/dist-lib/tokens/brands/default/semantic/elevation.d.ts +4 -0
  69. package/dist-lib/tokens/brands/default/semantic/elevation.d.ts.map +1 -1
  70. package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts +28 -0
  71. package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts.map +1 -1
  72. package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts +16 -0
  73. package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts.map +1 -1
  74. package/dist-lib/tokens/brands/green/semantic/color-light.d.ts +16 -0
  75. package/dist-lib/tokens/brands/green/semantic/color-light.d.ts.map +1 -1
  76. package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts +6 -0
  77. package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts.map +1 -1
  78. package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts +16 -0
  79. package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts.map +1 -1
  80. package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts +16 -0
  81. package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts.map +1 -1
  82. package/dist-lib/tokens/brands/vibrant/primitives/color-palette.d.ts +29 -1
  83. package/dist-lib/tokens/brands/vibrant/primitives/color-palette.d.ts.map +1 -1
  84. package/dist-lib/tokens/brands/vibrant/semantic/color-dark.d.ts +16 -0
  85. package/dist-lib/tokens/brands/vibrant/semantic/color-dark.d.ts.map +1 -1
  86. package/dist-lib/tokens/brands/vibrant/semantic/color-light.d.ts +16 -0
  87. package/dist-lib/tokens/brands/vibrant/semantic/color-light.d.ts.map +1 -1
  88. package/dist-lib/tokens.cjs +23 -2
  89. package/dist-lib/tokens.cjs.map +1 -1
  90. package/dist-lib/tokens.mjs +23 -2
  91. package/dist-lib/tokens.mjs.map +1 -1
  92. package/package.json +1 -1
@@ -0,0 +1,232 @@
1
+ import { Locale } from 'date-fns';
2
+ import { GanttBar, GanttGranularity, GanttRow } from '../gantt.types';
3
+ /**
4
+ * Núcleo geométrico do `Gantt` — **puro**: sem React, sem DOM, sem estilo.
5
+ *
6
+ * É o que torna as bordas testáveis sem montar componente: virada de mês,
7
+ * barra que cruza a janela, lane packing com sobreposição parcial, `summary`
8
+ * derivado de filhos colapsados.
9
+ *
10
+ * ## A unidade é o DIA, e isso é decisão
11
+ *
12
+ * Todo cálculo interno converte data → **dias desde `windowStart`** e só depois
13
+ * multiplica por `pxPerDay`. A alternativa (converter direto pra pixel em cada
14
+ * lugar) espalha o arredondamento e faz duas barras com a mesma data cair em
15
+ * pixels diferentes dependendo de quem calculou.
16
+ *
17
+ * ⚠️ Usa `differenceInCalendarDays`, **não** subtração de timestamp: um
18
+ * intervalo que cruza mudança de horário de verão tem 23 ou 25 horas, e
19
+ * `(b - a) / 86400000` devolve 0,96 dia. O cálculo por calendário devolve 1.
20
+ */
21
+ export type GanttTick = {
22
+ /** Início do tick. */
23
+ date: Date;
24
+ /** Largura em dias — varia: mês tem 28–31, trimestre 90–92. */
25
+ spanDays: number;
26
+ label: string;
27
+ /** Fim de semana, pra sombrear a coluna. Só em `granularity: "day"`. */
28
+ isWeekend: boolean;
29
+ };
30
+ export type GanttAxis = {
31
+ /** Linha de cima — agrupa (mês sobre dias, ano sobre meses). */
32
+ groups: GanttTick[];
33
+ /** Linha de baixo — a unidade da grade. */
34
+ units: GanttTick[];
35
+ totalDays: number;
36
+ };
37
+ /**
38
+ * Eixo em DOIS níveis, porque uma linha só não situa.
39
+ *
40
+ * Todas as 13 referências fazem isso: "March | April | May" em cima e
41
+ * "01.03–07.03 | 08.03–14.03" embaixo. Sem o nível de cima, uma coluna "12" não
42
+ * diz de que mês — e o usuário precisa contar colunas pra descobrir.
43
+ */
44
+ export declare function buildTimeAxis(windowStart: Date, windowEnd: Date, granularity: GanttGranularity, locale?: Locale, weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6): GanttAxis;
45
+ /** Dias desde o início da janela. Fracionário: a hora do dia conta. */
46
+ export declare function dateToDayOffset(date: Date, windowStart: Date): number;
47
+ export declare function dateToX(date: Date, windowStart: Date, pxPerDay: number): number;
48
+ export declare function xToDate(x: number, windowStart: Date, pxPerDay: number): Date;
49
+ /**
50
+ * Arredonda pro início do período — o snap do arraste.
51
+ *
52
+ * Sem snap, arrastar 3px muda a data em 4 horas e a barra nunca alinha com a
53
+ * grade. Com snap por granularidade, ela cai sempre num limite visível.
54
+ */
55
+ export declare function snapDate(date: Date, granularity: GanttGranularity, weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6): Date;
56
+ export type GanttClippedBar = {
57
+ bar: GanttBar;
58
+ /** Início efetivo desenhado — pode ser a borda da janela. */
59
+ start: Date;
60
+ end: Date;
61
+ continuesBefore: boolean;
62
+ continuesAfter: boolean;
63
+ };
64
+ /**
65
+ * Recorta a barra na janela visível.
66
+ *
67
+ * Devolve `null` quando a barra está **inteiramente fora** — e é o que evita
68
+ * desenhar centenas de nós com `left` negativo fora da viewport.
69
+ *
70
+ * ⚠️ A comparação é por DIA, não por instante: uma barra que termina às 08:00 do
71
+ * `windowStart` ainda toca a janela e deve aparecer. Comparar timestamps a
72
+ * descartaria.
73
+ */
74
+ export declare function clipToWindow(bar: GanttBar, windowStart: Date, windowEnd: Date): GanttClippedBar | null;
75
+ /**
76
+ * Distribui barras em lanes dentro da MESMA linha.
77
+ *
78
+ * - `stack`: uma lane por barra, na ordem recebida. Todas visíveis — é o
79
+ * "arco-íris" do portfólio, onde o ponto é justamente ver as 5 frentes.
80
+ * - `compact`: barras que não se sobrepõem dividem lane. Linha mais baixa, e o
81
+ * preço é que duas frentes podem cair na mesma faixa horizontal.
82
+ *
83
+ * ⚠️ Sobreposição é `<` e não `<=`: uma barra que termina no dia 5 e outra que
84
+ * começa no dia 5 **não** se sobrepõem — são consecutivas. Usar `<=` empurraria
85
+ * toda cadeia sequencial pra lanes separadas, que é o oposto de "compact".
86
+ */
87
+ export declare function packLanes(bars: GanttClippedBar[], mode?: "stack" | "compact"): GanttClippedBar[][];
88
+ export type GanttFlatRow = {
89
+ row: GanttRow;
90
+ depth: number;
91
+ /** Tem filhos — é o que decide se o chevron aparece. */
92
+ hasChildren: boolean;
93
+ collapsed: boolean;
94
+ /**
95
+ * É o ÚLTIMO filho do seu pai — define se a vertical do conector para no meio
96
+ * da linha (formando o "└") ou atravessa até a base (formando o "├").
97
+ */
98
+ isLast: boolean;
99
+ /**
100
+ * Por nível ancestral (índice = `depth` do ancestral): aquele ancestral ainda
101
+ * tem irmão depois dele? Controla se a guia vertical continua descendo naquela
102
+ * coluna de recuo.
103
+ *
104
+ * ⚠️ **A coluna `i` hospeda o cotovelo de nós em `depth i+1`**, então quem
105
+ * decide a continuação vertical dela é `ancestorHasNext[i + 1]`, NÃO `[i]`.
106
+ * Esse off-by-one é a **L-045**, e ela nasceu deste mesmo conector no `List`:
107
+ * com `[i]` a guia sumia no último root (`ancestorHasNext[0]` é `false`) e nos
108
+ * demais o root tinha irmão, o que mascarava o bug em tudo menos na borda.
109
+ *
110
+ * A forma deste campo é copiada do `flattenTree` do `List` de propósito — é a
111
+ * implementação que já pagou o preço de acertar.
112
+ */
113
+ ancestorHasNext: boolean[];
114
+ };
115
+ /**
116
+ * Achata a árvore na ordem de exibição, respeitando collapse.
117
+ *
118
+ * Filho de linha colapsada não entra — nem os netos. É por isso que a recursão
119
+ * para no `collapsed` em vez de filtrar depois: filtrar deixaria neto órfão
120
+ * visível quando o pai colapsa e o avô não.
121
+ *
122
+ * ## Dado sujo do consumidor nunca vira tarefa invisível
123
+ *
124
+ * Duas formas de `parent` quebrado, e as DUAS terminam com a linha na tela:
125
+ *
126
+ * 1. **`parent` aponta pra id inexistente** → tratada como raiz.
127
+ * 2. **Ciclo em `parent`** (A pai de B, B pai de A) → o grupo inteiro é
128
+ * promovido a raiz, no fim da lista.
129
+ *
130
+ * ⚠️ O caso 2 **não funcionava** até este teste existir. A guarda `visitados`
131
+ * impedia o estouro de pilha, mas a varredura partia de `porPai.get(null)` — e
132
+ * num ciclo puro NENHUMA linha tem pai nulo, então o balde raiz vem vazio e a
133
+ * função devolvia `[]`. O Gantt renderizava **em branco**, sem erro, com todas
134
+ * as tarefas no `rows`.
135
+ *
136
+ * Era a L-060 na prática: este bloco de comentário já prometia "não deve virar
137
+ * tarefa invisível", e quem leu (eu, duas rodadas atrás) parou de investigar.
138
+ * Comentário que afirma garantia tem que ter a garantia verificada.
139
+ */
140
+ export declare function flattenRows(rows: GanttRow[], collapsedIds: ReadonlySet<string>): GanttFlatRow[];
141
+ /**
142
+ * Intervalo de um `summary`, derivado dos descendentes.
143
+ *
144
+ * Devolve `null` quando não há descendente com barra — e aí o `summary` não
145
+ * desenha nada, em vez de desenhar uma barra de duração zero em 1970.
146
+ *
147
+ * ⚠️ Percorre TODA a descendência, não só os filhos diretos: um `summary` de
148
+ * fase cujos filhos são outros `summary` teria intervalo vazio se olhasse um
149
+ * nível só.
150
+ */
151
+ export declare function deriveSummaryRange(rowId: string, rows: GanttRow[]): {
152
+ start: Date;
153
+ end: Date;
154
+ } | null;
155
+ /**
156
+ * Janela a partir dos dados, pro caso em que o consumidor não passa uma.
157
+ *
158
+ * A folga de 1 unidade em cada ponta não é estética: sem ela, a primeira e a
159
+ * última barra encostam na borda e ficam indistinguíveis de barras que
160
+ * atravessam a janela (que é o que `continuesBefore/After` sinaliza).
161
+ */
162
+ export declare function deriveWindow(rows: GanttRow[], granularity?: GanttGranularity): {
163
+ start: Date;
164
+ end: Date;
165
+ };
166
+ /**
167
+ * Altura de cada linha visível — **a fonte ÚNICA, consumida pelos dois painéis**.
168
+ *
169
+ * ⚠️ Isto existe porque a primeira versão calculava a altura em DOIS lugares: o
170
+ * canvas somava lanes (`n * LANE + 8`) e a grade usava a constante fixa. Numa
171
+ * linha-contêiner com 3 barras, o canvas dava 98px e a grade 44 — e as duas
172
+ * metades da MESMA linha ficavam com alturas diferentes, com o nome desalinhado
173
+ * das barras a partir dali pra baixo.
174
+ *
175
+ * É exatamente a L-038: default resolvido em dois render-sites que divergem. A
176
+ * correção é resolver na fonte, não em cada lugar.
177
+ */
178
+ export declare function rowHeights(rows: readonly GanttFlatRow[], baseHeight: number, laneHeight: number): number[];
179
+ /** `top` acumulado de cada linha, a partir das alturas. */
180
+ export declare function rowOffsets(heights: readonly number[]): number[];
181
+ /**
182
+ * Matriz do mês — 6 linhas × 7 colunas, SEMPRE.
183
+ *
184
+ * ⚠️ **Duplicado de propósito do `Scheduler`.** A spec (§5) registra a decisão:
185
+ * o `Gantt` é dono das suas visões porque delegar criaria acoplamento por
186
+ * herança de propósito — necessidade nova do Gantt viraria mudança numa API
187
+ * publicada que serve outros consumidores.
188
+ *
189
+ * O que a duplicação NÃO pode causar é divergência silenciosa de layout, e é
190
+ * por isso que esta função tem teste próprio sobre as mesmas bordas: mês que
191
+ * começa no domingo, fevereiro de ano comum, virada de ano.
192
+ *
193
+ * 6 linhas fixas e não "as que precisar": grade que muda de altura ao navegar
194
+ * de mês faz o conteúdo abaixo pular.
195
+ */
196
+ export declare function buildMonthMatrix(anchor: Date, weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6): Date[][];
197
+ /**
198
+ * Quantos chips cabem numa célula do mês, e quantos sobram.
199
+ *
200
+ * ⚠️ Duplicado do `Scheduler` pelo mesmo motivo acima.
201
+ *
202
+ * A linha "+N mais" ocupa **um slot do mesmo tamanho de um chip** — por isso
203
+ * `visible` é `max - 1` quando há estouro. Ignorar isso faz o último chip ser
204
+ * empurrado pra fora da célula pela própria linha de estouro.
205
+ *
206
+ * E o estouro só existe a partir de `total > max`: com exatamente `max` itens,
207
+ * mostrar `max - 1` + "+1 mais" seria trocar um chip por um aviso.
208
+ */
209
+ export declare function computeOverflow(total: number, max: number): {
210
+ visible: number;
211
+ overflowCount: number;
212
+ };
213
+ /**
214
+ * Dias que uma barra ocupa dentro de um mês — pra virar chip em cada dia.
215
+ *
216
+ * ⚠️ Duplicado do `segmentMultiDay` do `Scheduler`, mesmo motivo.
217
+ *
218
+ * A guarda de 400 iterações existe porque `end` anterior a `start` (dado sujo)
219
+ * faria o `while` nunca terminar. Devolve vazio nesse caso, não loop infinito.
220
+ */
221
+ export declare function daysOfBar(bar: GanttBar): Date[];
222
+ /** Último dia visível da matriz, pra recortar barras na visão de mês. */
223
+ export declare function monthMatrixRange(weeks: Date[][]): {
224
+ start: Date;
225
+ end: Date;
226
+ };
227
+ /** Fim do mês âncora — pra distinguir dia "de fora" na grade. */
228
+ export declare function monthBounds(anchor: Date): {
229
+ start: Date;
230
+ end: Date;
231
+ };
232
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/hooks/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { GanttBar, GanttLink, GanttLinkType, GanttLinkViolation } from '../gantt.types';
2
+ /**
3
+ * Grafo de vínculos do `Gantt` — **puro**: sem React, sem DOM.
4
+ *
5
+ * É a parte que distingue Gantt de timeline. Sem isto o componente mostra
6
+ * tarefas com datas; com isto mostra um modelo de como o projeto funciona.
7
+ *
8
+ * ## O componente VALIDA e SINALIZA. Não corrige.
9
+ *
10
+ * Nenhuma função aqui devolve datas novas. Vínculo violado vira
11
+ * `GanttLinkViolation`, que a raiz emite em `onLinkViolations` e a barra pinta
12
+ * com marcação de conflito.
13
+ *
14
+ * Corrigir cronograma é decisão de negócio: mover a tarefa que atrasou, cortar
15
+ * escopo, aceitar o atraso ou renegociar o vínculo são quatro respostas
16
+ * diferentes pro mesmo conflito, e o componente não tem como escolher. É a
17
+ * mesma posição do `onEventMove` do `Scheduler` e do `onCardMove` do `Kanban` —
18
+ * o DS é dumb sobre mutação por princípio, e aqui isso vale em dobro porque o
19
+ * erro seria invisível: datas reescritas sozinhas parecem dados.
20
+ */
21
+ /**
22
+ * A borda de cada tipo de vínculo — a data que o `target` não pode violar.
23
+ *
24
+ * | Tipo | Restrição |
25
+ * |------|-------------------------------------|
26
+ * | `FS` | `target.start ≥ source.end + lag` |
27
+ * | `SS` | `target.start ≥ source.start + lag` |
28
+ * | `FF` | `target.end ≥ source.end + lag` |
29
+ * | `SF` | `target.end ≥ source.start + lag` |
30
+ *
31
+ * A primeira letra diz de qual ponta do `source` sai; a segunda, qual ponta do
32
+ * `target` é restringida. `FS` = sai do Finish, restringe o Start.
33
+ */
34
+ export declare function constraintDates(tipo: GanttLinkType, source: GanttBar, target: GanttBar, lag?: number): {
35
+ limite: Date;
36
+ pontaAlvo: Date;
37
+ };
38
+ /**
39
+ * Confere um vínculo contra as datas atuais.
40
+ *
41
+ * `null` = satisfeito. Caso contrário, `deficitDays` é o quanto o alvo teria que
42
+ * andar pra frente — número que a mensagem de erro usa e que o consumidor pode
43
+ * aplicar se quiser corrigir.
44
+ *
45
+ * ⚠️ Vínculo cujo `source` ou `target` não existe no conjunto de barras é
46
+ * **ignorado**, não reportado como violação. Referência pendente acontece
47
+ * durante paginação e durante edição otimista; tratar como conflito encheria a
48
+ * tela de falso positivo em estado transitório.
49
+ */
50
+ export declare function checkLink(link: GanttLink, bars: ReadonlyMap<string, GanttBar>): GanttLinkViolation | null;
51
+ export declare function checkAllLinks(links: readonly GanttLink[], bars: ReadonlyMap<string, GanttBar>): GanttLinkViolation[];
52
+ export type TopoResult = {
53
+ ok: true;
54
+ order: string[];
55
+ } | {
56
+ ok: false;
57
+ cycle: string[];
58
+ };
59
+ /**
60
+ * Kahn sobre o grafo de barras. Base do caminho crítico.
61
+ *
62
+ * Devolve `ok: false` com os ids que sobraram quando há ciclo — e isso é
63
+ * **resultado**, não exceção. Ciclo é dado do consumidor, não bug do
64
+ * componente; lançar mataria a tela inteira por causa de dois vínculos
65
+ * invertidos. A raiz encaminha pra `onGraphError` e simplesmente não pinta
66
+ * caminho crítico.
67
+ *
68
+ * ⚠️ Auto-vínculo (`source === target`) conta como ciclo de um nó. Parece
69
+ * pedante, mas acontece: duplicar uma tarefa junto com seus vínculos produz
70
+ * exatamente isso, e sem a checagem o nó ficaria com grau de entrada 1 pra
71
+ * sempre e o algoritmo devolveria ordem incompleta em silêncio.
72
+ */
73
+ export declare function topoSort(barIds: readonly string[], links: readonly GanttLink[]): TopoResult;
74
+ /**
75
+ * Barras no caminho crítico — a sequência que determina a data final.
76
+ *
77
+ * Método: passagem pra frente calcula o começo mais cedo (`earlyStart`) de cada
78
+ * barra respeitando os vínculos; passagem pra trás calcula o mais tarde
79
+ * (`lateStart`) sem atrasar o projeto. Folga zero (`lateStart − earlyStart`) =
80
+ * crítica.
81
+ *
82
+ * ⚠️ **Só considera `FS`.** Os outros três tipos exigem tratar as duas pontas
83
+ * como nós independentes no grafo (o CPM clássico é sobre *atividade-em-nó* com
84
+ * início e fim separados), e implementar isso pela metade daria caminho crítico
85
+ * *plausível e errado* — que é pior que não ter. `SS`/`FF`/`SF` continuam sendo
86
+ * validados por `checkAllLinks`; só não entram no cálculo de criticidade.
87
+ *
88
+ * Registrado como limite conhecido na USAGE, não escondido.
89
+ */
90
+ export declare function computeCriticalPath(bars: readonly GanttBar[], links: readonly GanttLink[]): {
91
+ critical: Set<string>;
92
+ } | {
93
+ cycle: string[];
94
+ };
95
+ export type LinkAnchor = {
96
+ x: number;
97
+ y: number;
98
+ };
99
+ /**
100
+ * Path SVG entre duas barras, em ortogonal (só segmentos retos).
101
+ *
102
+ * Ortogonal e não curva de Bézier porque com 40 vínculos as curvas viram um
103
+ * emaranhado onde não se segue nenhuma; segmentos retos com cotovelo se leem
104
+ * mesmo cruzados. É o que todas as referências com muitos vínculos fazem.
105
+ *
106
+ * `saiDireita`/`entraEsquerda` derivam do TIPO: um `FS` sai da ponta direita do
107
+ * source e entra na esquerda do target; um `SS` sai da esquerda e entra na
108
+ * esquerda. Sem isso a seta de um `SS` sairia do lado errado e sugeriria FS.
109
+ */
110
+ export declare function linkPath(de: LinkAnchor, para: LinkAnchor, opts: {
111
+ saiDireita: boolean;
112
+ entraEsquerda: boolean;
113
+ recuo?: number;
114
+ }): string;
115
+ /** Qual ponta de cada barra o vínculo conecta. */
116
+ export declare function linkSides(tipo: GanttLinkType): {
117
+ saiDireita: boolean;
118
+ entraEsquerda: boolean;
119
+ };
120
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/hooks/links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,aAAa,EACb,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,EAChB,GAAG,SAAI,GACN;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAInC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GAClC,kBAAkB,GAAG,IAAI,CAe3B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GAClC,kBAAkB,EAAE,CAOtB;AAID,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEnC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,SAAS,SAAS,EAAE,GAC1B,UAAU,CAiCZ;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,KAAK,EAAE,SAAS,SAAS,EAAE,GAC1B;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAkEjD;AAWD,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,MAAM,CAiBR;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB,CAKA"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Núcleo puro dos **segmentos de semana** da grade de mês — sem React, sem DOM.
3
+ *
4
+ * ## O problema que isto resolve
5
+ *
6
+ * A primeira versão da visão de calendário desenhava **um chip por dia**: uma
7
+ * tarefa de 10 a 15 aparecia como 6 chips soltos, um em cada célula, cada um
8
+ * repetindo o mesmo nome. Lê como seis tarefas de um dia, não como uma de seis —
9
+ * o oposto do que um cronograma precisa dizer.
10
+ *
11
+ * Aqui cada barra vira **um segmento contínuo por semana**, atravessando as
12
+ * colunas que ocupa. Uma tarefa que cruza a virada de semana produz dois
13
+ * segmentos, cada um marcado com `continuesBefore`/`continuesAfter` — é o mesmo
14
+ * vocabulário que o `clipToWindow` usa na timeline, e pela mesma razão: a ponta
15
+ * cortada tem que parecer intencional.
16
+ *
17
+ * ## Por que lane e não empilhamento por ordem
18
+ *
19
+ * Duas barras que ocupam colunas sobrepostas na mesma semana não podem dividir a
20
+ * mesma faixa vertical. A alocação é gulosa na primeira faixa livre, com as
21
+ * barras ordenadas por **coluna inicial e depois por span decrescente**: barra
22
+ * longa primeiro faz a mais comprida ficar na faixa de cima, que é como
23
+ * calendário de verdade se lê — o "guarda-chuva" acima dos eventos curtos.
24
+ *
25
+ * ⛔ Não reusa o `packLanes` do `layout.ts`: aquele empacota por DATA num eixo
26
+ * contínuo, e aqui o eixo é discreto (7 colunas) e reinicia a cada semana. Usar
27
+ * o mesmo daria lanes coerentes no mês e incoerentes na linha.
28
+ */
29
+ export type GanttSegmentInput = {
30
+ id: string;
31
+ start: Date;
32
+ end: Date;
33
+ };
34
+ export type GanttWeekSegment = {
35
+ barId: string;
36
+ /** Coluna onde começa nesta semana, 0–6. */
37
+ colStart: number;
38
+ /** Quantas colunas ocupa nesta semana, 1–7. */
39
+ colSpan: number;
40
+ /** Faixa vertical dentro da linha da semana, 0 = a de cima. */
41
+ lane: number;
42
+ /** Começou antes do primeiro dia desta semana. */
43
+ continuesBefore: boolean;
44
+ /** Termina depois do último dia desta semana. */
45
+ continuesAfter: boolean;
46
+ };
47
+ /**
48
+ * Segmentos de UMA semana.
49
+ *
50
+ * `week` são os 7 dias na ordem em que a grade os mostra — vem do
51
+ * `buildMonthMatrix`, então `weekStartsOn` já está aplicado e esta função não
52
+ * precisa saber dele.
53
+ */
54
+ export declare function buildWeekSegments(week: readonly Date[], barras: readonly GanttSegmentInput[]): GanttWeekSegment[];
55
+ /**
56
+ * Quantos segmentos ficam escondidos em cada COLUNA quando só `maxLanes` faixas
57
+ * cabem na altura da linha.
58
+ *
59
+ * Devolve um array de 7 contagens — é o "+N mais" de cada dia.
60
+ *
61
+ * ⚠️ A contagem é por COLUNA e não por semana: uma barra escondida que ocupa 3
62
+ * dias tem que aparecer no "+N" dos três, senão o usuário que olha o dia 12 não
63
+ * descobre que existe algo ali. Somar por semana daria um número certo no total
64
+ * e errado em todas as células.
65
+ */
66
+ export declare function hiddenPerColumn(segmentos: readonly GanttWeekSegment[], maxLanes: number, colunas?: number): number[];
67
+ /** Quantas faixas a semana precisa pra mostrar tudo. */
68
+ export declare function laneCount(segmentos: readonly GanttWeekSegment[]): number;
69
+ //# sourceMappingURL=week-segments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"week-segments.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/hooks/week-segments.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,MAAM,EAAE,SAAS,iBAAiB,EAAE,GACnC,gBAAgB,EAAE,CAqEpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,gBAAgB,EAAE,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAI,GACV,MAAM,EAAE,CAUV;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAIxE"}
@@ -0,0 +1,46 @@
1
+ export { Gantt } from './gantt';
2
+ /**
3
+ * Partes exportadas soltas — mesmo padrão do `TableToolbar` e do
4
+ * `SchedulerFilterPanel`.
5
+ *
6
+ * Serve pra tela que queira posicionar a grade ou a camada de setas em outro
7
+ * lugar do próprio layout, e pra doc page mostrar a anatomia isolada. Em uso
8
+ * normal você não precisa delas: o `Gantt` monta e controla as suas.
9
+ */
10
+ export { GanttGrid, GANTT_DEFAULT_COLUMNS } from './parts/gantt-grid';
11
+ export type { GanttGridProps } from './parts/gantt-grid';
12
+ export { GanttBarView, GANTT_BAR_MIN_WIDTH_PX } from './parts/gantt-bar';
13
+ export type { GanttBarViewProps } from './parts/gantt-bar';
14
+ export { GanttFilterPanel } from './parts/gantt-filter-panel';
15
+ export type { GanttFilterPanelProps } from './parts/gantt-filter-panel';
16
+ export { GanttLinksLayer } from './parts/gantt-links-layer';
17
+ export type { GanttLinksLayerProps, GanttLinkGeometry, } from './parts/gantt-links-layer';
18
+ /**
19
+ * Núcleo puro. Exportado porque é útil fora do render: validar um cronograma no
20
+ * servidor, calcular caminho crítico num job, testar regra de negócio sem
21
+ * montar React.
22
+ */
23
+ export { buildTimeAxis, buildMonthMatrix, clipToWindow, computeOverflow, dateToDayOffset, dateToX, daysOfBar, deriveSummaryRange, deriveWindow, flattenRows, monthBounds, monthMatrixRange, packLanes, rowHeights, rowOffsets, snapDate, xToDate, } from './hooks/layout';
24
+ export type { GanttAxis, GanttClippedBar, GanttFlatRow, GanttTick, } from './hooks/layout';
25
+ export { checkAllLinks, checkLink, computeCriticalPath, constraintDates, linkPath, linkSides, topoSort, } from './hooks/links';
26
+ export type { LinkAnchor, TopoResult } from './hooks/links';
27
+ export { GANTT_ROW_HEIGHT_PX, GANTT_LANE_HEIGHT_PX, GANTT_HEAD_HEIGHT_PX, GANTT_PX_PER_DAY, } from './gantt.styles';
28
+ /**
29
+ * O `tv()` do segmento da grade de mês — a "pílula" que representa a tarefa num
30
+ * dia, com ponto de cor, rótulo e o tingimento do `colorKey`.
31
+ *
32
+ * Exportado por um motivo específico: **prever como o item vai ficar antes de
33
+ * criá-lo**. Um formulário de nova tarefa que ofereça escolha de cor precisa
34
+ * mostrar a escolha, e desenhar isso na mão no consumidor recria o único
35
+ * defeito que a prévia existe pra evitar — duas definições da mesma pílula, que
36
+ * divergem na primeira vez que uma das duas mudar.
37
+ *
38
+ * Slots: `root` · `dot` · `label`. Variantes: `colorKey`, `continuesBefore`,
39
+ * `continuesAfter`, `conflict`, `critical`.
40
+ *
41
+ * ⚠️ O `root` é `absolute` porque na grade ele é posicionado por `left`/`top`
42
+ * dentro da semana. Fora dela, neutralize: `root({ class: "relative w-full" })`.
43
+ */
44
+ export { ganttDaySegment } from './gantt.styles';
45
+ export type { GanttProps, GanttRef, GanttRow, GanttRowType, GanttBar, GanttBarChange, GanttColorKey, GanttColumn, GanttFilterField, GanttFilterModel, GanttFilterOption, GanttGranularity, GanttLink, GanttLinkType, GanttLinkViolation, GanttView, } from './gantt.types';
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/Gantt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EACV,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,SAAS,EACT,eAAe,EACf,YAAY,EACZ,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,YAAY,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,SAAS,GACV,MAAM,eAAe,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { GanttFilterField, GanttFilterModel } from '../gantt.types';
2
+ export type GanttAppliedFiltersProps = {
3
+ fields: GanttFilterField[];
4
+ model: GanttFilterModel;
5
+ /** Todas as linhas — a contagem por opção é sobre elas, não sobre as filtradas. */
6
+ counts: Record<string, Record<string, number>>;
7
+ onToggleValue: (fieldId: string, value: string) => void;
8
+ onClearField: (fieldId: string) => void;
9
+ onClearAll: () => void;
10
+ /**
11
+ * Formata o ISO de um filtro `date` pro chip.
12
+ *
13
+ * Vem da raiz porque é lá que o `locale` mora — o chip não deve mostrar
14
+ * "2026-09-01" a um usuário pt-BR, e formatar aqui na unha significaria uma
15
+ * segunda decisão de formato de data no mesmo componente.
16
+ */
17
+ formatDate?: (iso: string) => string;
18
+ };
19
+ export declare function GanttAppliedFilters({ fields, model, counts, onToggleValue, onClearField, onClearAll, formatDate, }: GanttAppliedFiltersProps): import("react/jsx-runtime").JSX.Element | null;
20
+ //# sourceMappingURL=gantt-applied-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gantt-applied-filters.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-applied-filters.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAsDzE,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACxB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,KAAK,EACL,MAAM,EACN,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,GACX,EAAE,wBAAwB,kDA4I1B"}
@@ -0,0 +1,68 @@
1
+ import { CSSProperties, MouseEvent, ReactNode } from 'react';
2
+ import { GanttBar, GanttColorKey, GanttRowType } from '../gantt.types';
3
+ /**
4
+ * A barra — e o losango do marco, que é a mesma peça noutro formato.
5
+ *
6
+ * ## Posicionada em px absoluto, não em grid
7
+ *
8
+ * `left`/`width` vêm de `dateToX`. Grid de N colunas parece mais limpo até a
9
+ * primeira barra que começa às 14h de um dia: ela não cai em limite de coluna, e
10
+ * a alternativa (arredondar pro dia) apaga informação que o consumidor passou.
11
+ *
12
+ * ## Largura mínima, e por que não é estética
13
+ *
14
+ * Uma barra de 1 dia em granularidade `quarter` tem **1,6px**. Sem piso, ela
15
+ * some — e "some" é indistinguível de "não existe", que é o pior modo de falha
16
+ * pra quem está conferindo se a tarefa entrou no plano. O piso de 6px mantém a
17
+ * barra clicável e visível, ao custo de exagerar a duração nessa escala.
18
+ */
19
+ export declare const GANTT_BAR_MIN_WIDTH_PX = 6;
20
+ export type GanttBarViewProps = {
21
+ bar: GanttBar;
22
+ /** Posição já calculada pela view — a barra não sabe converter data. */
23
+ left: number;
24
+ width: number;
25
+ /** Índice da lane dentro da linha (0 na maioria dos casos). */
26
+ lane: number;
27
+ rowType: GanttRowType;
28
+ colorKey: GanttColorKey;
29
+ continuesBefore: boolean;
30
+ continuesAfter: boolean;
31
+ conflict?: boolean;
32
+ critical?: boolean;
33
+ /**
34
+ * Altura em px, decidida pela VIEW e não aqui.
35
+ *
36
+ * A view é quem sabe se a linha tem uma lane ou cinco, e portanto quanto
37
+ * espaço a barra pode ocupar. Deixar a barra escolher faria ela precisar
38
+ * conhecer o `lanePacking` da linha — informação que não é dela.
39
+ */
40
+ height: number;
41
+ movable?: boolean;
42
+ resizable?: boolean;
43
+ linkable?: boolean;
44
+ dragging?: boolean;
45
+ onClick?: (evt: MouseEvent) => void;
46
+ /**
47
+ * Início do gesto de MOVER — `pointerdown` no corpo da barra.
48
+ *
49
+ * ⚠️ Só no corpo: os punhos de resize e as portas de vínculo dão
50
+ * `stopPropagation`, senão um `pointerdown` no punho iniciaria os dois
51
+ * gestos ao mesmo tempo e a barra moveria enquanto redimensiona.
52
+ */
53
+ onMoveStart?: (evt: MouseEvent) => void;
54
+ /** Início do gesto de resize. `side` diz qual ponta. */
55
+ onResizeStart?: (side: "start" | "end", evt: MouseEvent) => void;
56
+ /** Início do gesto de criar vínculo. */
57
+ onLinkStart?: (side: "start" | "end", evt: MouseEvent) => void;
58
+ /** Render custom do conteúdo — substitui o rótulo default. */
59
+ children?: ReactNode;
60
+ style?: CSSProperties;
61
+ };
62
+ /**
63
+ * ⚠️ `forwardRef` porque o dnd-kit precisa do nó DOM (`setNodeRef`), e porque a
64
+ * barra é âncora de `Tooltip`/`Popover` — sem ref, `asChild` do Radix não obtém
65
+ * o nó e o flutuante ancora fora do viewport (L-021, medido).
66
+ */
67
+ export declare const GanttBarView: import('react').ForwardRefExoticComponent<GanttBarViewProps & import('react').RefAttributes<HTMLDivElement>>;
68
+ //# sourceMappingURL=gantt-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gantt-bar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOxF,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,QAAQ,CAAC;IACd,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACjE,wCAAwC;IACxC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAE/D,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,8GAmKxB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { GanttFilterField, GanttFilterModel } from '../gantt.types';
2
+ export type GanttFilterPanelProps = {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ fields: GanttFilterField[];
6
+ model: GanttFilterModel;
7
+ onToggleValue: (fieldId: string, value: string) => void;
8
+ /** Marca ou desmarca o grupo inteiro de uma vez. */
9
+ onSetFieldValues: (fieldId: string, values: string[]) => void;
10
+ onClearAll: () => void;
11
+ appliedCount: number;
12
+ /** Contagem por opção — vem das linhas ANTES do filtro daquele campo. */
13
+ counts?: Record<string, Record<string, number>>;
14
+ };
15
+ export declare function GanttFilterPanel({ open, onOpenChange, fields, model, onToggleValue, onSetFieldValues, onClearAll, appliedCount, counts, }: GanttFilterPanelProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=gantt-filter-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gantt-filter-panel.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-filter-panel.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA8CzE,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACxB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,oDAAoD;IACpD,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9D,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,MAAM,GACP,EAAE,qBAAqB,2CA+DvB"}