@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.
- package/dist-lib/index.cjs +4461 -16
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.mjs +4477 -32
- package/dist-lib/index.mjs.map +1 -1
- package/dist-lib/src/components/index.d.ts +1 -0
- package/dist-lib/src/components/index.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Gantt/gantt.d.ts +21 -0
- package/dist-lib/src/components/ui/Gantt/gantt.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/gantt.styles.d.ts +2985 -0
- package/dist-lib/src/components/ui/Gantt/gantt.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/gantt.types.d.ts +445 -0
- package/dist-lib/src/components/ui/Gantt/gantt.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/hooks/drag.d.ts +71 -0
- package/dist-lib/src/components/ui/Gantt/hooks/drag.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/hooks/filters.d.ts +79 -0
- package/dist-lib/src/components/ui/Gantt/hooks/filters.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/hooks/layout.d.ts +232 -0
- package/dist-lib/src/components/ui/Gantt/hooks/layout.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/hooks/links.d.ts +120 -0
- package/dist-lib/src/components/ui/Gantt/hooks/links.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/hooks/week-segments.d.ts +69 -0
- package/dist-lib/src/components/ui/Gantt/hooks/week-segments.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/index.d.ts +46 -0
- package/dist-lib/src/components/ui/Gantt/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-applied-filters.d.ts +20 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-applied-filters.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-bar.d.ts +68 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-bar.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-filter-panel.d.ts +16 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-filter-panel.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-grid.d.ts +55 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-grid.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-links-layer.d.ts +46 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-links-layer.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-skeleton.d.ts +36 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-skeleton.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-toolbar.d.ts +46 -0
- package/dist-lib/src/components/ui/Gantt/parts/gantt-toolbar.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/views/calendar.d.ts +64 -0
- package/dist-lib/src/components/ui/Gantt/views/calendar.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/views/list.d.ts +53 -0
- package/dist-lib/src/components/ui/Gantt/views/list.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Gantt/views/timeline.d.ts +85 -0
- package/dist-lib/src/components/ui/Gantt/views/timeline.d.ts.map +1 -0
- package/dist-lib/src/components/ui/MessageBubble/index.d.ts +1 -1
- package/dist-lib/src/components/ui/MessageBubble/index.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts +1 -1
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts +22 -2
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.styles.d.ts.map +1 -1
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts +8 -0
- package/dist-lib/src/components/ui/MessageBubble/message-bubble.types.d.ts.map +1 -1
- package/dist-lib/theme/brand-pay.css +205 -189
- package/dist-lib/theme/brand-vibrant.css +162 -148
- package/dist-lib/theme.css +19 -0
- package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts +28 -0
- package/dist-lib/tokens/brands/blue/primitives/color-palette.d.ts.map +1 -1
- package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts +16 -0
- package/dist-lib/tokens/brands/blue/semantic/color-dark.d.ts.map +1 -1
- package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts +16 -0
- package/dist-lib/tokens/brands/blue/semantic/color-light.d.ts.map +1 -1
- package/dist-lib/tokens/brands/default/primitives/color-palette.d.ts +29 -0
- package/dist-lib/tokens/brands/default/primitives/color-palette.d.ts.map +1 -1
- package/dist-lib/tokens/brands/default/semantic/color-dark.d.ts +16 -0
- package/dist-lib/tokens/brands/default/semantic/color-dark.d.ts.map +1 -1
- package/dist-lib/tokens/brands/default/semantic/color-light.d.ts +16 -0
- package/dist-lib/tokens/brands/default/semantic/color-light.d.ts.map +1 -1
- package/dist-lib/tokens/brands/default/semantic/elevation.d.ts +4 -0
- package/dist-lib/tokens/brands/default/semantic/elevation.d.ts.map +1 -1
- package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts +28 -0
- package/dist-lib/tokens/brands/green/primitives/color-palette.d.ts.map +1 -1
- package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts +16 -0
- package/dist-lib/tokens/brands/green/semantic/color-dark.d.ts.map +1 -1
- package/dist-lib/tokens/brands/green/semantic/color-light.d.ts +16 -0
- package/dist-lib/tokens/brands/green/semantic/color-light.d.ts.map +1 -1
- package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts +6 -0
- package/dist-lib/tokens/brands/pay/primitives/color-palette.d.ts.map +1 -1
- package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts +16 -0
- package/dist-lib/tokens/brands/pay/semantic/color-dark.d.ts.map +1 -1
- package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts +16 -0
- package/dist-lib/tokens/brands/pay/semantic/color-light.d.ts.map +1 -1
- package/dist-lib/tokens/brands/vibrant/primitives/color-palette.d.ts +29 -1
- package/dist-lib/tokens/brands/vibrant/primitives/color-palette.d.ts.map +1 -1
- package/dist-lib/tokens/brands/vibrant/semantic/color-dark.d.ts +16 -0
- package/dist-lib/tokens/brands/vibrant/semantic/color-dark.d.ts.map +1 -1
- package/dist-lib/tokens/brands/vibrant/semantic/color-light.d.ts +16 -0
- package/dist-lib/tokens/brands/vibrant/semantic/color-light.d.ts.map +1 -1
- package/dist-lib/tokens.cjs +23 -2
- package/dist-lib/tokens.cjs.map +1 -1
- package/dist-lib/tokens.mjs +23 -2
- package/dist-lib/tokens.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gantt.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/Gantt/gantt.styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { ReactNode, MouseEvent } from 'react';
|
|
2
|
+
import { Locale } from 'date-fns';
|
|
3
|
+
/**
|
|
4
|
+
* Contrato público do `Gantt`.
|
|
5
|
+
*
|
|
6
|
+
* Spec: `.ai/specs/gantt-componente-de-cronograma.md`.
|
|
7
|
+
*
|
|
8
|
+
* ## A distinção que justifica o componente existir
|
|
9
|
+
*
|
|
10
|
+
* O DS já sabia mostrar **quando** algo acontece (`Scheduler`) e **qual data** foi
|
|
11
|
+
* escolhida num formulário (`Calendar`/`DatePicker`). Não sabia mostrar **o que
|
|
12
|
+
* depende de quê** — e é isso que `links` traz. Sem vínculo isto seria uma
|
|
13
|
+
* timeline, não um Gantt.
|
|
14
|
+
*
|
|
15
|
+
* ## Um tipo, dois formatos de dado
|
|
16
|
+
*
|
|
17
|
+
* `GanttRow.bars` é array de propósito, e é o que faz um componente servir duas
|
|
18
|
+
* leituras sem `if` no consumidor:
|
|
19
|
+
*
|
|
20
|
+
* 1 barra + `parent` → Gantt de projeto (a linha É a tarefa)
|
|
21
|
+
* N barras sem `parent` → timeline de portfólio (a linha é a sprint/frente,
|
|
22
|
+
* e as barras são o que tem dentro)
|
|
23
|
+
*
|
|
24
|
+
* ⛔ Nada aqui é importado do `Scheduler`. Os dois modelos são incompatíveis por
|
|
25
|
+
* desenho — `SchedulerEvent` é plano, com cor semântica, e não tem onde guardar
|
|
26
|
+
* hierarquia nem vínculo. Só a gramática visual é compartilhada (ver o topo de
|
|
27
|
+
* `gantt.styles.ts`, L-049).
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Chave de cor da barra.
|
|
31
|
+
*
|
|
32
|
+
* ⚠️ **A paleta de chart vem primeiro porque no Gantt a cor diz CATEGORIA — qual
|
|
33
|
+
* frente de trabalho —, não ESTADO.** Estado viaja em `GanttRow.trailing` como
|
|
34
|
+
* `Chip`, que é o canal que o DS já usa pra status.
|
|
35
|
+
*
|
|
36
|
+
* Isso é o que autoriza `chart-3` (azul): o `DESIGN.md` diz que *"the system has
|
|
37
|
+
* zero blue tokens"* e o `Chart/USAGE.md` descreve a paleta como *"verde-marca +
|
|
38
|
+
* harmônicas (teal/azul/âmbar/violeta)"*. Azul é legítimo como **dado
|
|
39
|
+
* categórico** e proibido na **interface** — e barra de Gantt é dado.
|
|
40
|
+
*
|
|
41
|
+
* As chaves semânticas seguem disponíveis pro caso em que a cor realmente diz
|
|
42
|
+
* status (um `milestone` atrasado, por exemplo). União fechada: ampliar é
|
|
43
|
+
* aditivo e não quebra ninguém.
|
|
44
|
+
*/
|
|
45
|
+
export type GanttColorKey = "chart-1" | "chart-2" | "chart-3" | "chart-4" | "chart-5" | "brand" | "success" | "warning" | "danger" | "info" | "neutral";
|
|
46
|
+
export type GanttBar = {
|
|
47
|
+
/** Identidade. É o que volta nos callbacks e o que `GanttLink` referencia. */
|
|
48
|
+
id: string;
|
|
49
|
+
/** Rótulo dentro da barra. Some quando a barra fica estreita demais. */
|
|
50
|
+
label?: ReactNode;
|
|
51
|
+
/**
|
|
52
|
+
* Texto pra busca. Existe porque `label` é `ReactNode` e o motor de busca só
|
|
53
|
+
* casa string — sem isto, uma barra rotulada com JSX é invisível à busca.
|
|
54
|
+
*/
|
|
55
|
+
searchText?: string;
|
|
56
|
+
start: Date;
|
|
57
|
+
/**
|
|
58
|
+
* Fim, **obrigatório**.
|
|
59
|
+
*
|
|
60
|
+
* Duração zero se diz como `end === start`, não como `end` ausente. Opcional,
|
|
61
|
+
* ele obrigaria todo cálculo a decidir o que fazer com o vazio — e cada lugar
|
|
62
|
+
* decidiria diferente. É a mesma escolha do `SchedulerEvent`.
|
|
63
|
+
*/
|
|
64
|
+
end: Date;
|
|
65
|
+
colorKey?: GanttColorKey;
|
|
66
|
+
/**
|
|
67
|
+
* Progresso 0–100, preenchido como faixa mais escura dentro da barra.
|
|
68
|
+
*
|
|
69
|
+
* `undefined` **não** é 0: ausente significa "não rastreia progresso" e não
|
|
70
|
+
* desenha faixa nenhuma; `0` significa "rastreia, e está em zero" e desenha a
|
|
71
|
+
* trilha vazia. Nas referências os dois estados aparecem lado a lado.
|
|
72
|
+
*/
|
|
73
|
+
progress?: number;
|
|
74
|
+
/**
|
|
75
|
+
* A barra atravessa a borda da janela visível.
|
|
76
|
+
*
|
|
77
|
+
* Corta o raio daquele lado — sinal de "não acaba aqui". Passa a ser
|
|
78
|
+
* necessário no instante em que a janela é fixa (`windowStart`/`windowEnd`),
|
|
79
|
+
* porque sem isso uma barra truncada é indistinguível de uma que termina ali.
|
|
80
|
+
*
|
|
81
|
+
* Normalmente derivado pelo próprio componente ao recortar na janela; a prop
|
|
82
|
+
* existe pro consumidor que já pagina no servidor e sabe o que ficou fora.
|
|
83
|
+
*/
|
|
84
|
+
continuesBefore?: boolean;
|
|
85
|
+
continuesAfter?: boolean;
|
|
86
|
+
/** Payload cru do consumidor. Devolvido intacto nos callbacks. */
|
|
87
|
+
meta?: unknown;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* - `task` — trabalho com duração. O caso comum.
|
|
91
|
+
* - `summary` — agrupador. O intervalo é **derivado dos filhos**, não informado.
|
|
92
|
+
* - `milestone` — ponto no tempo, desenhado como losango. Duração é ignorada.
|
|
93
|
+
*/
|
|
94
|
+
export type GanttRowType = "task" | "summary" | "milestone";
|
|
95
|
+
export type GanttRow = {
|
|
96
|
+
id: string;
|
|
97
|
+
label: ReactNode;
|
|
98
|
+
/** Segunda linha do rótulo — código, responsável, contagem. */
|
|
99
|
+
sublabel?: ReactNode;
|
|
100
|
+
searchText?: string;
|
|
101
|
+
/** @default "task" */
|
|
102
|
+
type?: GanttRowType;
|
|
103
|
+
/**
|
|
104
|
+
* Id da linha-pai. Ausente = raiz.
|
|
105
|
+
*
|
|
106
|
+
* Uma linha `summary` com filhos tem o intervalo calculado pelo componente
|
|
107
|
+
* (menor `start`, maior `end`). Informar `bars` num `summary` é aceito e
|
|
108
|
+
* vence o cálculo — pro caso em que o consumidor tem o agregado do servidor e
|
|
109
|
+
* não quer que o componente recompute.
|
|
110
|
+
*/
|
|
111
|
+
parent?: string;
|
|
112
|
+
/** Ver a nota do topo: 1 barra = tarefa, N barras = contêiner. */
|
|
113
|
+
bars: GanttBar[];
|
|
114
|
+
/**
|
|
115
|
+
* `stack` = uma lane por barra (o "arco-íris": todas visíveis, linha mais alta).
|
|
116
|
+
* `compact` = barras que não se sobrepõem dividem a mesma lane (linha baixa).
|
|
117
|
+
*
|
|
118
|
+
* @default "stack"
|
|
119
|
+
*/
|
|
120
|
+
lanePacking?: "stack" | "compact";
|
|
121
|
+
/**
|
|
122
|
+
* Conteúdo livre depois do rótulo, na grade da esquerda — chip de status,
|
|
123
|
+
* avatar do responsável, contador. Mesmo papel do `trailing` do `Breadcrumb`.
|
|
124
|
+
*/
|
|
125
|
+
trailing?: ReactNode;
|
|
126
|
+
/** Estado inicial de collapse. Controle contínuo via `onRowToggle`. */
|
|
127
|
+
collapsed?: boolean;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Os 4 tipos canônicos de dependência.
|
|
131
|
+
*
|
|
132
|
+
* | Tipo | Restrição | Uso |
|
|
133
|
+
* |------|----------------------------------------|----------------------------|
|
|
134
|
+
* | `FS` | `target.start ≥ source.end + lag` | ~90% do uso real. Default |
|
|
135
|
+
* | `SS` | `target.start ≥ source.start + lag` | arrancam juntas |
|
|
136
|
+
* | `FF` | `target.end ≥ source.end + lag` | terminam juntas |
|
|
137
|
+
* | `SF` | `target.end ≥ source.start + lag` | raro, existe por completude|
|
|
138
|
+
*/
|
|
139
|
+
export type GanttLinkType = "FS" | "SS" | "FF" | "SF";
|
|
140
|
+
export type GanttLink = {
|
|
141
|
+
id: string;
|
|
142
|
+
/**
|
|
143
|
+
* Ids de **BARRA**, não de linha.
|
|
144
|
+
*
|
|
145
|
+
* Uma linha-contêiner tem N barras, e o vínculo é entre trabalhos, não entre
|
|
146
|
+
* agrupamentos — apontar pra linha tornaria o vínculo ambíguo no formato de
|
|
147
|
+
* portfólio.
|
|
148
|
+
*/
|
|
149
|
+
source: string;
|
|
150
|
+
target: string;
|
|
151
|
+
/** @default "FS" */
|
|
152
|
+
type?: GanttLinkType;
|
|
153
|
+
/**
|
|
154
|
+
* Dias de espera (positivo) ou antecipação (negativo, *lead*).
|
|
155
|
+
*
|
|
156
|
+
* `lag: 2` num FS = "começa 2 dias depois que o anterior termina".
|
|
157
|
+
* `lag: -1` = "pode começar 1 dia antes de o anterior terminar".
|
|
158
|
+
*/
|
|
159
|
+
lag?: number;
|
|
160
|
+
};
|
|
161
|
+
/** Vínculo cuja restrição as datas atuais violam. */
|
|
162
|
+
export type GanttLinkViolation = {
|
|
163
|
+
link: GanttLink;
|
|
164
|
+
/** Dias de folga negativa — o quanto o alvo teria que andar pra satisfazer. */
|
|
165
|
+
deficitDays: number;
|
|
166
|
+
};
|
|
167
|
+
export type GanttColumn = {
|
|
168
|
+
/** Chave estável. `"label"` é a coluna do nome e sempre existe. */
|
|
169
|
+
id: string;
|
|
170
|
+
header: ReactNode;
|
|
171
|
+
/** Largura em px. A coluna do nome estica; as outras são fixas. */
|
|
172
|
+
width?: number;
|
|
173
|
+
align?: "left" | "center" | "right";
|
|
174
|
+
/** Render da célula. Sem isto, cai no `label`/`sublabel` da linha. */
|
|
175
|
+
render?: (row: GanttRow) => ReactNode;
|
|
176
|
+
};
|
|
177
|
+
export type GanttBarChange = {
|
|
178
|
+
bar: GanttBar;
|
|
179
|
+
row: GanttRow;
|
|
180
|
+
start: Date;
|
|
181
|
+
end: Date;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* As três visões, e cada uma responde uma pergunta diferente do MESMO dado:
|
|
185
|
+
*
|
|
186
|
+
* timeline "o que depende do quê" eixo horizontal + setas + gesto
|
|
187
|
+
* calendar "o que acontece no dia 12" grade de mês com segmentos
|
|
188
|
+
* list "o que vem a seguir" agenda por dia, só dias com tarefa
|
|
189
|
+
*
|
|
190
|
+
* ⚠️ A `list` NÃO é uma tabela de tarefas — isso é o `DataTable` (view lista,
|
|
191
|
+
* `hierarchical`). Ela é uma AGENDA: agrupa por DIA e repete a tarefa em cada
|
|
192
|
+
* dia que ela ocupa, com a posição dentro do intervalo. Responde "o que estou
|
|
193
|
+
* fazendo hoje e amanhã", que nem o eixo nem a grade de mês respondem sem o
|
|
194
|
+
* usuário contar colunas.
|
|
195
|
+
*/
|
|
196
|
+
export type GanttView = "timeline" | "calendar" | "list";
|
|
197
|
+
export type GanttGranularity = "day" | "week" | "month" | "quarter";
|
|
198
|
+
export type GanttFilterOption = {
|
|
199
|
+
value: string;
|
|
200
|
+
label: string;
|
|
201
|
+
colorKey?: GanttColorKey;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Que tipo de filtro este campo é — e portanto que input o painel renderiza.
|
|
205
|
+
*
|
|
206
|
+
* O vocabulário espelha o da `DataTable` (`text` / `number` / `select` +
|
|
207
|
+
* `filterType` pra date), porque o usuário lê a mesma frase nas duas telas:
|
|
208
|
+
* "Status é Ativo", "Duração entre 3 e 10", "Início a partir de 01/09/26".
|
|
209
|
+
*
|
|
210
|
+
* ⚠️ Até a v0.59 o `Gantt` aceitava só `multi` — não por bug, por ausência de
|
|
211
|
+
* contrato. Filtro de texto, faixa ou período eram impossíveis de expressar.
|
|
212
|
+
*
|
|
213
|
+
* | kind | input | `model[id]` |
|
|
214
|
+
* |-----------|--------------------------|--------------------------|
|
|
215
|
+
* | `multi` | checkboxes (default) | os valores marcados |
|
|
216
|
+
* | `single` | radio | um valor |
|
|
217
|
+
* | `text` | campo de busca | `[termo]` |
|
|
218
|
+
* | `number` | dois campos numéricos | `[min, max]` — "" = livre |
|
|
219
|
+
* | `date` | dois campos de data | `[de, até]` — "" = livre |
|
|
220
|
+
* | `boolean` | radio Sim/Não | `["true"]` \| `["false"]` |
|
|
221
|
+
*
|
|
222
|
+
* ⚠️ `GanttFilterModel` NÃO mudou de forma pra isso — segue
|
|
223
|
+
* `Record<string, string[]>`. O que faltava não era a forma do dado, era como
|
|
224
|
+
* interpretá-lo; por isso não há migração pra quem já usava `multi`.
|
|
225
|
+
*/
|
|
226
|
+
export type GanttFilterKind = "multi" | "single" | "text" | "number" | "date" | "boolean";
|
|
227
|
+
export type GanttFilterField = {
|
|
228
|
+
id: string;
|
|
229
|
+
label: string;
|
|
230
|
+
/** @default "multi" */
|
|
231
|
+
kind?: GanttFilterKind;
|
|
232
|
+
/**
|
|
233
|
+
* Opções — obrigatórias em `multi`/`single`, opcionais em `boolean` (sem
|
|
234
|
+
* elas o chip usa "Sim"/"Não"), ignoradas em `text`/`number`/`date`.
|
|
235
|
+
*/
|
|
236
|
+
options?: GanttFilterOption[];
|
|
237
|
+
/**
|
|
238
|
+
* Extrai o valor da linha pra comparar.
|
|
239
|
+
*
|
|
240
|
+
* O tipo de retorno é largo porque o predicado depende do `kind`: `number`
|
|
241
|
+
* aceita número ou string numérica, `date` aceita `Date` ou ISO, `boolean`
|
|
242
|
+
* normaliza "1"/"sim"/"true". Devolver `undefined` **exclui** a linha quando
|
|
243
|
+
* o filtro está ativo — filtrar por "Responsável = Ana" e receber as linhas
|
|
244
|
+
* sem responsável nenhum é o oposto do pedido.
|
|
245
|
+
*/
|
|
246
|
+
accessor: (row: GanttRow) => string | string[] | number | Date | boolean | null | undefined;
|
|
247
|
+
/** Placeholder dos inputs de `text`/`number`/`date`. */
|
|
248
|
+
placeholder?: string;
|
|
249
|
+
/**
|
|
250
|
+
* Força o campo de busca dentro deste grupo.
|
|
251
|
+
*
|
|
252
|
+
* Sem isto, a busca aparece a partir de 7 opções — abaixo disso ela é
|
|
253
|
+
* ruído: ocupa a altura de uma opção e meia pra filtrar algo que já cabe
|
|
254
|
+
* inteiro na tela.
|
|
255
|
+
*
|
|
256
|
+
* Serve pro caso em que o consumidor sabe que a lista cresce em produção
|
|
257
|
+
* mesmo tendo poucas opções no mock.
|
|
258
|
+
*/
|
|
259
|
+
searchable?: boolean;
|
|
260
|
+
};
|
|
261
|
+
export type GanttFilterModel = Record<string, string[]>;
|
|
262
|
+
export interface GanttProps {
|
|
263
|
+
rows: GanttRow[];
|
|
264
|
+
/** Ausente = sem setas. Presente = é um Gantt de verdade. */
|
|
265
|
+
links?: GanttLink[];
|
|
266
|
+
/**
|
|
267
|
+
* ## O par valor + callback, e por que os TRÊS seguem o mesmo formato
|
|
268
|
+
*
|
|
269
|
+
* `view`, `granularity` e `criticalPath` são estados que a UI do próprio
|
|
270
|
+
* componente mexe (o seletor de visão, o dropdown de escala, o botão de
|
|
271
|
+
* caminho crítico). Cada um aceita as duas formas:
|
|
272
|
+
*
|
|
273
|
+
* - **omitido** → o componente guarda o estado e o controle funciona
|
|
274
|
+
* sozinho. É o caso comum.
|
|
275
|
+
* - **passado** → quem manda é você, e o `on*Change` avisa da intenção do
|
|
276
|
+
* usuário. Passar o valor SEM o callback congela o controle — semântica
|
|
277
|
+
* normal de campo controlado no React, e é deliberado.
|
|
278
|
+
*
|
|
279
|
+
* ⚠️ `granularity` e `criticalPath` não tinham callback até esta rodada, e
|
|
280
|
+
* o resultado era a segunda forma sem escapatória: passar `granularity="day"`
|
|
281
|
+
* (que a doc ensinava como valor INICIAL) matava o dropdown de escala em
|
|
282
|
+
* silêncio — o clique mudava o estado interno e o valor da prop o mascarava
|
|
283
|
+
* de volta, com `tsc` verde e nenhum erro. `view` já tinha o par, e o JSDoc
|
|
284
|
+
* do handler dele descreve exatamente este defeito.
|
|
285
|
+
*
|
|
286
|
+
* @default "timeline"
|
|
287
|
+
*/
|
|
288
|
+
view?: GanttView;
|
|
289
|
+
onViewChange?: (view: GanttView) => void;
|
|
290
|
+
/**
|
|
291
|
+
* **Quais visões existem** — não qual está aberta (isso é `view`).
|
|
292
|
+
*
|
|
293
|
+
* Nem todo cronograma quer as três. Um painel de dependências não ganha
|
|
294
|
+
* nada com a agenda; uma tela de acompanhamento por mês pode não querer o
|
|
295
|
+
* eixo. Omitido, as três aparecem.
|
|
296
|
+
*
|
|
297
|
+
* ⚠️ **Com UMA visão o seletor não é renderizado** (nem o divisor ao lado
|
|
298
|
+
* dele). Um controle segmentado com uma opção só é um controle que nunca
|
|
299
|
+
* muda nada — a mesma regra do toggle de caminho crítico sem vínculo e do
|
|
300
|
+
* "+" da grade sem `onDayAdd`.
|
|
301
|
+
*
|
|
302
|
+
* ⚠️ **`views` vence `view`.** Passar `view="list"` com
|
|
303
|
+
* `views={["timeline"]}` abre a `timeline`: a lista diz o que EXISTE, e
|
|
304
|
+
* renderizar algo que o consumidor excluiu seria pior que corrigir.
|
|
305
|
+
*
|
|
306
|
+
* @default ["timeline", "calendar", "list"]
|
|
307
|
+
*/
|
|
308
|
+
views?: GanttView[];
|
|
309
|
+
/**
|
|
310
|
+
* **Carregando** — o esqueleto no lugar do conteúdo.
|
|
311
|
+
*
|
|
312
|
+
* ⚠️ Não é firula. Sem isto, `rows={[]}` durante o fetch mostra
|
|
313
|
+
* *"Nenhuma tarefa neste período"* — uma AFIRMAÇÃO falsa: o componente não
|
|
314
|
+
* sabe se não há tarefas, ele ainda não recebeu nenhuma. O usuário lê que o
|
|
315
|
+
* cronograma está vazio e vai embora antes do dado chegar.
|
|
316
|
+
*
|
|
317
|
+
* A toolbar continua renderizada (período, busca, filtro): o contexto não
|
|
318
|
+
* depende dos dados, e apagá-lo faria a tela piscar inteira quando eles
|
|
319
|
+
* chegam. Mesmo desenho do `DataTable`.
|
|
320
|
+
*
|
|
321
|
+
* @default false
|
|
322
|
+
*/
|
|
323
|
+
loading?: boolean;
|
|
324
|
+
/**
|
|
325
|
+
* Substitui o esqueleto padrão. Par do `emptyState`.
|
|
326
|
+
*
|
|
327
|
+
* O padrão imita a SILHUETA da visão atual — painel + barras na timeline,
|
|
328
|
+
* 6×7 na grade de mês, blocos de dia na agenda. Se você trocar, mantenha a
|
|
329
|
+
* altura: esqueleto de silhueta diferente troca "espera" por um salto de
|
|
330
|
+
* layout quando o dado chega.
|
|
331
|
+
*/
|
|
332
|
+
loadingState?: ReactNode;
|
|
333
|
+
/**
|
|
334
|
+
* **Janela visível, e ela é do consumidor.**
|
|
335
|
+
*
|
|
336
|
+
* O componente não navega sozinho — mesmo princípio do `Kanban` e da `Table`.
|
|
337
|
+
* Quem consome troca a janela; o `Gantt` só desenha o que cabe nela e marca as
|
|
338
|
+
* barras que a atravessam (`continuesBefore`/`continuesAfter`).
|
|
339
|
+
*
|
|
340
|
+
* Omitidos, o componente deriva a janela do menor `start` e maior `end` das
|
|
341
|
+
* barras — conveniência pro caso simples, não substituto do controle.
|
|
342
|
+
*/
|
|
343
|
+
windowStart?: Date;
|
|
344
|
+
windowEnd?: Date;
|
|
345
|
+
/**
|
|
346
|
+
* Escala do eixo. Ver a nota do par valor + callback em `view`.
|
|
347
|
+
*
|
|
348
|
+
* @default "day"
|
|
349
|
+
*/
|
|
350
|
+
granularity?: GanttGranularity;
|
|
351
|
+
onGranularityChange?: (granularity: GanttGranularity) => void;
|
|
352
|
+
/** Colunas da grade esquerda. Omitido, usa nome + datas + duração. */
|
|
353
|
+
columns?: GanttColumn[];
|
|
354
|
+
/**
|
|
355
|
+
* Largura inicial da grade esquerda, em px. O divisor entre os painéis é
|
|
356
|
+
* arrastável — todas as referências têm isso.
|
|
357
|
+
*
|
|
358
|
+
* 360 e não 320: com as 3 colunas default (nome + início + fim), 320 deixava
|
|
359
|
+
* ~136px pro nome, que trunca em qualquer tarefa com mais de duas palavras.
|
|
360
|
+
* @default 360
|
|
361
|
+
*/
|
|
362
|
+
gridWidth?: number;
|
|
363
|
+
/**
|
|
364
|
+
* @default false — ligado sem `onBarMove` conectado, o usuário arrasta e vê a
|
|
365
|
+
* barra voltar sozinha, que lê como bug do app. Mesmo default do `Scheduler`.
|
|
366
|
+
*/
|
|
367
|
+
draggable?: boolean;
|
|
368
|
+
resizable?: boolean;
|
|
369
|
+
/** Criar vínculo arrastando do conector da barra. @default false */
|
|
370
|
+
linkable?: boolean;
|
|
371
|
+
/**
|
|
372
|
+
* Destaca o caminho crítico. Ver a nota do par valor + callback em `view`.
|
|
373
|
+
*
|
|
374
|
+
* @default false — e não é economia de pixel: é **cálculo**. Exige ordenação
|
|
375
|
+
* topológica sobre os vínculos, e num grafo com ciclo não existe resposta.
|
|
376
|
+
* Ligado por default, um dado malformado do consumidor viraria travamento ou
|
|
377
|
+
* resultado silenciosamente errado. Ciclo detectado → `onGraphError`.
|
|
378
|
+
*/
|
|
379
|
+
criticalPath?: boolean;
|
|
380
|
+
onCriticalPathChange?: (on: boolean) => void;
|
|
381
|
+
/**
|
|
382
|
+
* Mostra o botão que liga/desliga o caminho crítico na toolbar.
|
|
383
|
+
*
|
|
384
|
+
* `false` quando o estado é uma decisão da TELA e não do usuário — por
|
|
385
|
+
* exemplo um painel onde o crítico está sempre visível. Aí o botão só
|
|
386
|
+
* ocuparia 40px oferecendo desligar algo que a tela quer ligado.
|
|
387
|
+
*
|
|
388
|
+
* ⚠️ Desligar o botão NÃO desliga o realce: o realce é `criticalPath`. As
|
|
389
|
+
* duas props são independentes de propósito — esconder o controle de um
|
|
390
|
+
* estado permanente é diferente de não ter o estado.
|
|
391
|
+
*
|
|
392
|
+
* O botão também não aparece quando não há `links`: sem grafo não existe
|
|
393
|
+
* caminho crítico, e um toggle que nunca muda nada é pior que a ausência.
|
|
394
|
+
*/
|
|
395
|
+
criticalPathToggle?: boolean;
|
|
396
|
+
onGraphError?: (erro: {
|
|
397
|
+
kind: "cycle";
|
|
398
|
+
barIds: string[];
|
|
399
|
+
}) => void;
|
|
400
|
+
/** Vínculos violados pelas datas atuais. Emitido quando o conjunto muda. */
|
|
401
|
+
onLinkViolations?: (violations: GanttLinkViolation[]) => void;
|
|
402
|
+
searchable?: boolean;
|
|
403
|
+
filterFields?: GanttFilterField[];
|
|
404
|
+
filterModel?: GanttFilterModel;
|
|
405
|
+
onFilterModelChange?: (model: GanttFilterModel) => void;
|
|
406
|
+
/** Abre o painel de detalhe — que é da TELA, não do componente. */
|
|
407
|
+
onBarClick?: (bar: GanttBar, row: GanttRow, evt: MouseEvent) => void;
|
|
408
|
+
onRowClick?: (row: GanttRow, evt: MouseEvent) => void;
|
|
409
|
+
/** Emitem a intenção. **Não aplicam** — quem aplica é o consumidor. */
|
|
410
|
+
onBarMove?: (change: GanttBarChange) => void;
|
|
411
|
+
onBarResize?: (change: GanttBarChange) => void;
|
|
412
|
+
onLinkCreate?: (link: Omit<GanttLink, "id">) => void;
|
|
413
|
+
onLinkDelete?: (link: GanttLink) => void;
|
|
414
|
+
/**
|
|
415
|
+
* Clique no "+" de uma célula da visão `calendar`.
|
|
416
|
+
*
|
|
417
|
+
* ⚠️ **Sem este handler o "+" não é renderizado.** Um botão de adicionar que
|
|
418
|
+
* não adiciona nada é pior que a ausência dele — mesma regra do toggle de
|
|
419
|
+
* caminho crítico sem vínculo no grafo.
|
|
420
|
+
*
|
|
421
|
+
* Recebe o dia clicado à meia-noite local. Quem cria a tarefa é você: o
|
|
422
|
+
* `Gantt` é dumb sobre mutação.
|
|
423
|
+
*/
|
|
424
|
+
onDayAdd?: (date: Date) => void;
|
|
425
|
+
onRowToggle?: (rowId: string, collapsed: boolean) => void;
|
|
426
|
+
/** "Hoje". Injetável pra teste e pra fuso do servidor. @default new Date() */
|
|
427
|
+
now?: Date;
|
|
428
|
+
locale?: Locale;
|
|
429
|
+
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
430
|
+
/** Slot livre na toolbar, entre o filtro e o seletor de visão. */
|
|
431
|
+
toolbarActions?: ReactNode;
|
|
432
|
+
primaryAction?: ReactNode;
|
|
433
|
+
/** Sem nenhuma linha depois de busca e filtro. */
|
|
434
|
+
emptyState?: ReactNode;
|
|
435
|
+
className?: string;
|
|
436
|
+
}
|
|
437
|
+
export type GanttRef = {
|
|
438
|
+
/** Move a janela pra conter esta data, preservando a largura. */
|
|
439
|
+
goToDate: (date: Date) => void;
|
|
440
|
+
goToToday: () => void;
|
|
441
|
+
/** Expande/colapsa tudo. */
|
|
442
|
+
expandAll: () => void;
|
|
443
|
+
collapseAll: () => void;
|
|
444
|
+
};
|
|
445
|
+
//# sourceMappingURL=gantt.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gantt.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/Gantt/gantt.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { GanttLinkType } from '../gantt.types';
|
|
2
|
+
/**
|
|
3
|
+
* Núcleo puro do gesto — sem React, sem DOM.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que pointer events nativos e não `@dnd-kit`
|
|
6
|
+
*
|
|
7
|
+
* O dnd-kit **está** no DS (o `Scheduler` e o `Kanban` usam), então isto não é
|
|
8
|
+
* sobre dependência. É sobre o gesto ser de natureza diferente:
|
|
9
|
+
*
|
|
10
|
+
* - dnd-kit resolve **"em qual ZONA eu soltei"**. Aqui o alvo não é uma zona, é
|
|
11
|
+
* uma **coordenada contínua** no eixo do tempo — não há droppable pra colidir.
|
|
12
|
+
* - O gesto é 1-D com snap em dia inteiro. Toda a maquinaria de colisão do
|
|
13
|
+
* dnd-kit seria peso morto, e o `transform` dele em px teria que ser
|
|
14
|
+
* reconvertido em data de qualquer forma.
|
|
15
|
+
* - O `ganttSplitter` deste mesmo componente já usa `pointerdown` + listeners
|
|
16
|
+
* de `window`. Duas mecânicas de arraste no mesmo arquivo seria pior.
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ Consequência de teste, e ela é a favor: o `PointerSensor` do dnd-kit
|
|
19
|
+
* **recusa evento sintético** (medido nesta sessão), então um gesto por dnd-kit
|
|
20
|
+
* não seria verificável no browser de teste. `pointerdown`/`pointermove`
|
|
21
|
+
* nativos são.
|
|
22
|
+
*
|
|
23
|
+
* ## Snap em dia inteiro, e por que `addDays`
|
|
24
|
+
*
|
|
25
|
+
* ⛔ Nunca `new Date(t + dias * 86_400_000)`. Em fuso com horário de verão o dia
|
|
26
|
+
* tem 23 ou 25 horas, e a soma em milissegundos desloca a barra em 1 hora — o
|
|
27
|
+
* que, com snap, vira **um dia inteiro** de erro. `addDays` do date-fns é
|
|
28
|
+
* calendário, não aritmética de timestamp. Mesma razão pela qual o resto do
|
|
29
|
+
* componente usa `differenceInCalendarDays`.
|
|
30
|
+
*/
|
|
31
|
+
export type GanttDragMode = "move" | "resize-start" | "resize-end";
|
|
32
|
+
/**
|
|
33
|
+
* Onde a barra fica depois de arrastar `deltaPx`.
|
|
34
|
+
*
|
|
35
|
+
* Devolve SEMPRE um par válido (`start <= end`) — ver a nota do clamp abaixo.
|
|
36
|
+
* Não muta nada e não decide se a mudança é aceitável: quem aplica é o
|
|
37
|
+
* consumidor, e o `Gantt` é dumb sobre mutação.
|
|
38
|
+
*/
|
|
39
|
+
export declare function dragToDates(bar: {
|
|
40
|
+
start: Date;
|
|
41
|
+
end: Date;
|
|
42
|
+
}, deltaPx: number, pxPerDay: number, mode: GanttDragMode): {
|
|
43
|
+
start: Date;
|
|
44
|
+
end: Date;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Que tipo de vínculo nasce ao ligar a ponta `de` de uma barra na ponta `para`
|
|
48
|
+
* de outra.
|
|
49
|
+
*
|
|
50
|
+
* As 4 combinações cobrem os 4 tipos — não há caso descartado:
|
|
51
|
+
*
|
|
52
|
+
* fim → início FS finish-to-start (o comum: "só começa quando aquela acabar")
|
|
53
|
+
* início→ início SS start-to-start ("começam juntas")
|
|
54
|
+
* fim → fim FF finish-to-finish ("acabam juntas")
|
|
55
|
+
* início→ fim SF start-to-finish (raro, existe em turno/handover)
|
|
56
|
+
*
|
|
57
|
+
* ⚠️ A ponta de DESTINO é decidida pela metade da barra em que o ponteiro
|
|
58
|
+
* soltou, não por acertar a portinha de 9px. Exigir o port como alvo tornaria
|
|
59
|
+
* FF e SF inalcançáveis na prática — 9px não é uma afordância, é uma punição.
|
|
60
|
+
* Meia barra é alvo de verdade e ainda distingue as 4 combinações.
|
|
61
|
+
*/
|
|
62
|
+
export declare function linkTypeFromSides(de: "start" | "end", para: "start" | "end"): GanttLinkType;
|
|
63
|
+
/**
|
|
64
|
+
* Em qual metade da barra o ponteiro está — decide a ponta de destino.
|
|
65
|
+
*
|
|
66
|
+
* `left`/`width` são os da barra na tela; `x` é relativo ao mesmo sistema de
|
|
67
|
+
* coordenadas (o canvas). Barra de largura zero devolve `"start"`: sem largura
|
|
68
|
+
* não há duas metades, e `start` é a ponta do caso comum (FS).
|
|
69
|
+
*/
|
|
70
|
+
export declare function sideFromPointer(x: number, left: number, width: number): "start" | "end";
|
|
71
|
+
//# sourceMappingURL=drag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/hooks/drag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,EAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,GAClB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CA2C5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,OAAO,GAAG,KAAK,EACnB,IAAI,EAAE,OAAO,GAAG,KAAK,GACpB,aAAa,CAGf;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,GAAG,KAAK,CAGjB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { GanttFilterField, GanttFilterKind, GanttFilterModel, GanttRow } from '../gantt.types';
|
|
2
|
+
/**
|
|
3
|
+
* Núcleo puro do filtro — sem React, sem DOM.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que este arquivo existe
|
|
6
|
+
*
|
|
7
|
+
* Até aqui o `Gantt` aceitava **um único tipo de filtro**: multi-seleção de
|
|
8
|
+
* `options` pré-declaradas. Filtro de texto, de faixa numérica, de período ou
|
|
9
|
+
* booleano eram impossíveis — não por bug, por ausência de contrato. A
|
|
10
|
+
* `DataTable` aceita `text` / `number` / `select` (+ `filterType` pra date e
|
|
11
|
+
* currency) com operador por campo; o Gantt aceitava 1 de 6.
|
|
12
|
+
*
|
|
13
|
+
* ## A decisão que evitou breaking change: o modelo NÃO mudou
|
|
14
|
+
*
|
|
15
|
+
* `GanttFilterModel` continua `Record<string, string[]>`. Todos os 6 tipos
|
|
16
|
+
* codificam o valor em `string[]`:
|
|
17
|
+
*
|
|
18
|
+
* multi ["design", "produto"] → os valores marcados
|
|
19
|
+
* single ["design"] → um só (a UI é radio)
|
|
20
|
+
* text ["mapa de"] → o termo
|
|
21
|
+
* number ["3", "10"] → [min, max], "" = sem limite
|
|
22
|
+
* date ["2026-09-01", ""] → [de, até], "" = sem limite
|
|
23
|
+
* boolean ["true"] → o valor
|
|
24
|
+
*
|
|
25
|
+
* `string[]` já era um carregador genérico o suficiente; o que faltava não era
|
|
26
|
+
* a forma do dado — era **como interpretá-lo** e **que input renderizar**. Por
|
|
27
|
+
* isso `appliedCount`, o "Limpar tudo", a serialização do consumidor e o
|
|
28
|
+
* `filterModel` controlado seguem funcionando sem uma linha de migração.
|
|
29
|
+
*
|
|
30
|
+
* ⚠️ A convenção de "vazio = SEM filtro" (não "esconde tudo") vale pros 6, e é
|
|
31
|
+
* a mesma do `filterModel` do resto do DS. Um tipo que resolvesse isso
|
|
32
|
+
* diferente faria o mesmo modelo significar coisas opostas em telas diferentes.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Compara texto ignorando caixa **e acento**.
|
|
36
|
+
*
|
|
37
|
+
* ⚠️ O acento não é preciosismo: em pt-BR, "Fábio", "Sustentação" e "Aquisição"
|
|
38
|
+
* são nomes reais no dado, e um usuário que digita "fabio" espera achar. Sem a
|
|
39
|
+
* decomposição NFD, `includes` falha e o filtro parece quebrado.
|
|
40
|
+
*/
|
|
41
|
+
export declare function normalizarTexto(s: string): string;
|
|
42
|
+
export declare function parseDiaISO(s: string): Date | null;
|
|
43
|
+
/**
|
|
44
|
+
* Operador exibido no chip, por tipo — o vocabulário é o do `AppliedFilterOp`
|
|
45
|
+
* da `DataTable`, pra o usuário ler a mesma frase nas duas telas.
|
|
46
|
+
*
|
|
47
|
+
* `number` e `date` variam com QUAIS limites estão preenchidos: "entre 3 e 10",
|
|
48
|
+
* "≥ 3", "até 10". Um operador fixo mentiria em 2 dos 3 casos.
|
|
49
|
+
*/
|
|
50
|
+
export declare function operadorDoCampo(kind: GanttFilterKind, values: readonly string[]): string;
|
|
51
|
+
/**
|
|
52
|
+
* O campo está SEM filtro?
|
|
53
|
+
*
|
|
54
|
+
* ⚠️ Não é `values.length === 0`. Em `number` e `date` o modelo guarda um par,
|
|
55
|
+
* e `["", ""]` tem length 2 com zero intenção de filtrar. Tratar isso como
|
|
56
|
+
* filtro ativo esconderia todas as linhas cujo acessor não é numérico — um
|
|
57
|
+
* "sumiu tudo" sem nada marcado na tela.
|
|
58
|
+
*/
|
|
59
|
+
export declare function campoVazio(kind: GanttFilterKind, values: readonly string[] | undefined): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* A linha passa neste campo?
|
|
62
|
+
*
|
|
63
|
+
* ⚠️ Linha cujo acessor devolve `undefined` é **excluída** quando o filtro está
|
|
64
|
+
* ativo — não incluída "por falta de informação". Filtrar por "Responsável =
|
|
65
|
+
* Ana" e receber as linhas sem responsável nenhum é o oposto do pedido.
|
|
66
|
+
*/
|
|
67
|
+
export declare function linhaPassaNoCampo(campo: GanttFilterField, values: readonly string[] | undefined, row: GanttRow): boolean;
|
|
68
|
+
/** Aplica todos os campos. Ordem não importa — é conjunção. */
|
|
69
|
+
export declare function aplicarFiltros(rows: readonly GanttRow[], fields: readonly GanttFilterField[] | undefined, model: GanttFilterModel): GanttRow[];
|
|
70
|
+
/** Quantos campos estão de fato filtrando — o número do badge e do painel. */
|
|
71
|
+
export declare function contarAplicados(fields: readonly GanttFilterField[] | undefined, model: GanttFilterModel): number;
|
|
72
|
+
/**
|
|
73
|
+
* O que o chip mostra depois do operador.
|
|
74
|
+
*
|
|
75
|
+
* Devolve LISTA porque `multi` rende uma pílula por valor (é o formato da
|
|
76
|
+
* tabela). Os outros tipos rendem uma só.
|
|
77
|
+
*/
|
|
78
|
+
export declare function valoresDoChip(campo: GanttFilterField, values: readonly string[] | undefined, formatarData?: (iso: string) => string): string[];
|
|
79
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/hooks/filters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACT,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjD;AAsCD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAUlD;AAWD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,CAsBR;AAID;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACpC,OAAO,CAMT;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACrC,GAAG,EAAE,QAAQ,GACZ,OAAO,CA+DT;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,EAC/C,KAAK,EAAE,gBAAgB,GACtB,QAAQ,EAAE,CASZ;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,EAC/C,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAKR;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACrC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GACrC,MAAM,EAAE,CAsCV"}
|