@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,55 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
import { GanttColumn, GanttRow } from '../gantt.types';
|
|
3
|
+
import { GanttFlatRow } from '../hooks/layout';
|
|
4
|
+
/**
|
|
5
|
+
* Painel esquerdo — a grade de linhas.
|
|
6
|
+
*
|
|
7
|
+
* ## Grade própria, não `DataTable`
|
|
8
|
+
*
|
|
9
|
+
* Medido ao especificar: a `DataTable` são **12.187 linhas em 75 arquivos**, o
|
|
10
|
+
* `hierarchical` dela vive na *view de lista* e não na tabela, e a altura de
|
|
11
|
+
* linha dela deriva de `density`.
|
|
12
|
+
*
|
|
13
|
+
* Altura de linha é exatamente o que os dois painéis precisam compartilhar ao
|
|
14
|
+
* pixel; deixá-la num componente que o `Gantt` não controla é a classe de
|
|
15
|
+
* defeito da L-038 — default resolvido em dois render-sites que divergem.
|
|
16
|
+
*
|
|
17
|
+
* Aqui a altura vem de `GANTT_ROW_HEIGHT_PX`, passada por prop, e o canvas
|
|
18
|
+
* consome a MESMA constante.
|
|
19
|
+
*
|
|
20
|
+
* ## O scroll vertical NÃO é daqui
|
|
21
|
+
*
|
|
22
|
+
* Este painel é `overflow-hidden` e recebe `scrollTop` por prop, espelhado do
|
|
23
|
+
* canvas. Dois containers roláveis independentes dessincronizam as linhas na
|
|
24
|
+
* primeira rolagem — e o desalinho entre nome e barra é o defeito mais grave
|
|
25
|
+
* possível num Gantt, porque produz leitura errada sem parecer quebrado.
|
|
26
|
+
*/
|
|
27
|
+
/** Colunas default: nome (estica) + início + fim. */
|
|
28
|
+
export declare const GANTT_DEFAULT_COLUMNS: GanttColumn[];
|
|
29
|
+
export type GanttGridProps = {
|
|
30
|
+
rows: GanttFlatRow[];
|
|
31
|
+
columns: GanttColumn[];
|
|
32
|
+
/**
|
|
33
|
+
* Alturas de cada linha, JÁ CALCULADAS pela raiz.
|
|
34
|
+
*
|
|
35
|
+
* ⚠️ Era o defeito #2: esta grade usava a constante `rowHeight` pra TODA
|
|
36
|
+
* linha, enquanto o canvas somava lanes. Numa linha-contêiner com 3 barras o
|
|
37
|
+
* canvas dava 98px e a grade 48 — as duas metades da MESMA linha com alturas
|
|
38
|
+
* diferentes, e o nome desalinhado das barras a partir dali pra baixo.
|
|
39
|
+
*
|
|
40
|
+
* Agora a única fonte é `rowHeights()` no núcleo, e os dois painéis a leem.
|
|
41
|
+
*/
|
|
42
|
+
heights: readonly number[];
|
|
43
|
+
/** Espelhado do canvas — ver a nota do topo. */
|
|
44
|
+
scrollTop: number;
|
|
45
|
+
locale?: Locale;
|
|
46
|
+
/** Índice da linha selecionada (#7). */
|
|
47
|
+
selectedRow?: number | null;
|
|
48
|
+
/** Índice da linha sob o cursor — vem da raiz, ver #3. */
|
|
49
|
+
hoveredRow?: number | null;
|
|
50
|
+
onHoverRow?: (index: number | null) => void;
|
|
51
|
+
onRowToggle?: (rowId: string, collapsed: boolean) => void;
|
|
52
|
+
onRowClick?: (row: GanttRow, evt: React.MouseEvent) => void;
|
|
53
|
+
};
|
|
54
|
+
export declare function GanttGrid({ rows, columns, heights, scrollTop, locale, selectedRow, hoveredRow, onHoverRow, onRowToggle, onRowClick, }: GanttGridProps): import("react/jsx-runtime").JSX.Element;
|
|
55
|
+
//# sourceMappingURL=gantt-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gantt-grid.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-grid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAgBvC,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,EAAE,WAAW,EAI9C,CAAC;AAkGF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;;;;;;;OASG;IACH,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM,EACN,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,GACX,EAAE,cAAc,2CA6MhB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { GanttLink } from '../gantt.types';
|
|
2
|
+
/**
|
|
3
|
+
* As setas de vínculo, em SVG.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que é uma camada irmã do canvas, não filha das células
|
|
6
|
+
*
|
|
7
|
+
* A seta vai de uma linha a outra, e precisa desenhar **por cima** da grade e
|
|
8
|
+
* **fora** dos limites da linha de origem. Filha da célula, ela seria recortada
|
|
9
|
+
* pelo `overflow` de qualquer ancestral — e desapareceria exatamente quando
|
|
10
|
+
* cruza pra outra linha, que é sempre.
|
|
11
|
+
*
|
|
12
|
+
* É o mesmo defeito que o `DragOverlay` resolveu no `Scheduler` na v0.56.0: o
|
|
13
|
+
* bloco arrastado sumia atrás das grades, recortado por **3** ancestrais
|
|
14
|
+
* diferentes, e a primeira hipótese (z-index) estava errada — era clipping.
|
|
15
|
+
*
|
|
16
|
+
* `pointer-events-none` na camada e `auto` só nos paths: sem isso a camada
|
|
17
|
+
* cobriria o canvas inteiro e nenhuma barra receberia clique.
|
|
18
|
+
*
|
|
19
|
+
* ## Ortogonal, não Bézier
|
|
20
|
+
*
|
|
21
|
+
* Com 40 vínculos, curvas viram um emaranhado onde não se segue nenhuma;
|
|
22
|
+
* segmentos retos com cotovelo se leem mesmo cruzados. É o que todas as
|
|
23
|
+
* referências com muitos vínculos fazem.
|
|
24
|
+
*/
|
|
25
|
+
export type GanttLinkGeometry = {
|
|
26
|
+
link: GanttLink;
|
|
27
|
+
/** Âncora de saída, já em px relativos ao canvas. */
|
|
28
|
+
from: {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
};
|
|
32
|
+
to: {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
};
|
|
36
|
+
conflict: boolean;
|
|
37
|
+
critical: boolean;
|
|
38
|
+
};
|
|
39
|
+
export type GanttLinksLayerProps = {
|
|
40
|
+
links: GanttLinkGeometry[];
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
onLinkClick?: (link: GanttLink) => void;
|
|
44
|
+
};
|
|
45
|
+
export declare function GanttLinksLayer({ links, width, height, onLinkClick, }: GanttLinksLayerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
46
|
+
//# sourceMappingURL=gantt-links-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gantt-links-layer.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-links-layer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,qDAAqD;IACrD,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,EAAE,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,oBAAoB,kDA6EtB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { GanttView } from '../gantt.types';
|
|
2
|
+
/**
|
|
3
|
+
* Esqueleto de carregamento do `Gantt`.
|
|
4
|
+
*
|
|
5
|
+
* ## O defeito que ele existe pra evitar
|
|
6
|
+
*
|
|
7
|
+
* Sem `loading`, um consumidor que busca do servidor renderiza `rows={[]}`
|
|
8
|
+
* enquanto espera — e o componente responde *"Nenhuma tarefa neste período"*.
|
|
9
|
+
* Isso é uma **afirmação falsa**: o Gantt não sabe se não há tarefas, ele ainda
|
|
10
|
+
* não recebeu nenhuma. O usuário lê que o cronograma está vazio e sai antes de o
|
|
11
|
+
* dado chegar.
|
|
12
|
+
*
|
|
13
|
+
* ## A silhueta é a do conteúdo, e por visão
|
|
14
|
+
*
|
|
15
|
+
* Regra copiada do `DataTableLoading`: mesmo container, mesma altura de linha,
|
|
16
|
+
* mesma moldura — pra a chegada do dado não deslocar nada. Um esqueleto de
|
|
17
|
+
* silhueta diferente troca "espera" por um salto de layout, que é pior.
|
|
18
|
+
*
|
|
19
|
+
* Por isso são três, e não um genérico: a timeline tem painel + eixo, a grade de
|
|
20
|
+
* mês é 6×7, e a agenda é uma pilha de blocos por dia. Um esqueleto só saltaria
|
|
21
|
+
* em duas das três.
|
|
22
|
+
*
|
|
23
|
+
* ⚠️ **A toolbar não entra aqui.** Ela continua renderizada durante o
|
|
24
|
+
* carregamento, porque o período, a busca e o filtro não dependem dos dados —
|
|
25
|
+
* apagá-la faria a tela inteira piscar quando eles chegam. Mesmo desenho do
|
|
26
|
+
* `DataTable`.
|
|
27
|
+
*/
|
|
28
|
+
export type GanttSkeletonProps = {
|
|
29
|
+
view: GanttView;
|
|
30
|
+
/** Largura do painel esquerdo — a MESMA do estado carregado, senão salta. */
|
|
31
|
+
gridWidth: number;
|
|
32
|
+
/** Quantas linhas fingir. */
|
|
33
|
+
rows?: number;
|
|
34
|
+
};
|
|
35
|
+
export declare function GanttSkeleton({ view, gridWidth, rows, }: GanttSkeletonProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
//# sourceMappingURL=gantt-skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gantt-skeleton.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-skeleton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAgBF,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,IAAQ,GACT,EAAE,kBAAkB,2CAkHpB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { GanttFilterField, GanttFilterModel, GanttGranularity, GanttView } from '../gantt.types';
|
|
3
|
+
export type GanttToolbarProps = {
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
onPrev: () => void;
|
|
6
|
+
onNext: () => void;
|
|
7
|
+
onToday: () => void;
|
|
8
|
+
view: GanttView;
|
|
9
|
+
/** As visões que EXISTEM — já resolvidas pela raiz, nunca vazia. */
|
|
10
|
+
views: GanttView[];
|
|
11
|
+
onViewChange: (v: GanttView) => void;
|
|
12
|
+
granularity: GanttGranularity;
|
|
13
|
+
onGranularityChange: (g: GanttGranularity) => void;
|
|
14
|
+
searchable: boolean;
|
|
15
|
+
search: string;
|
|
16
|
+
onSearchChange: (s: string) => void;
|
|
17
|
+
filterFields?: GanttFilterField[];
|
|
18
|
+
onOpenFilterPanel: () => void;
|
|
19
|
+
appliedCount: number;
|
|
20
|
+
/** O que está marcado — a linha de chips lê daqui. */
|
|
21
|
+
filterModel: GanttFilterModel;
|
|
22
|
+
/** Desliga UM campo inteiro (o `×` do chip). */
|
|
23
|
+
onClearField: (fieldId: string) => void;
|
|
24
|
+
/** Desliga todos ("Limpar todos"). */
|
|
25
|
+
onClearAll: () => void;
|
|
26
|
+
/** Marca/desmarca um valor — o popover do chip edita por aqui. */
|
|
27
|
+
onToggleFilterValue: (fieldId: string, value: string) => void;
|
|
28
|
+
/** Contagem por opção, sobre TODAS as linhas. */
|
|
29
|
+
filterCounts: Record<string, Record<string, number>>;
|
|
30
|
+
/** Formata o ISO de um filtro `date` pro chip — o `locale` mora na raiz. */
|
|
31
|
+
formatFilterDate: (iso: string) => string;
|
|
32
|
+
/**
|
|
33
|
+
* Só aparece quando há vínculo E o consumidor não escondeu o botão.
|
|
34
|
+
*
|
|
35
|
+
* Sem grafo não existe caminho crítico; e `criticalPathToggle={false}`
|
|
36
|
+
* esconde o controle quando o estado é decisão da tela.
|
|
37
|
+
*/
|
|
38
|
+
hasLinks: boolean;
|
|
39
|
+
showCriticalToggle: boolean;
|
|
40
|
+
criticalPath: boolean;
|
|
41
|
+
onToggleCriticalPath: () => void;
|
|
42
|
+
toolbarActions?: ReactNode;
|
|
43
|
+
primaryAction?: ReactNode;
|
|
44
|
+
};
|
|
45
|
+
export declare function GanttToolbar({ title, onPrev, onNext, onToday, view, views, onViewChange, granularity, onGranularityChange, searchable, search, onSearchChange, filterFields, onOpenFilterPanel, appliedCount, filterModel, onClearField, onClearAll, onToggleFilterValue, filterCounts, formatFilterDate, hasLinks, showCriticalToggle, criticalPath, onToggleCriticalPath, toolbarActions, primaryAction, }: GanttToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
//# sourceMappingURL=gantt-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gantt-toolbar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/parts/gantt-toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA6CvC,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACV,MAAM,gBAAgB,CAAC;AA+ExB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,IAAI,EAAE,SAAS,CAAC;IAChB,oEAAoE;IACpE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAErC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,mBAAmB,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEnD,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,WAAW,EAAE,gBAAgB,CAAC;IAC9B,gDAAgD;IAChD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,sCAAsC;IACtC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,kEAAkE;IAClE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,4EAA4E;IAC5E,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAE1C;;;;;OAKG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,MAAM,IAAI,CAAC;IAEjC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,MAAM,EACN,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,aAAa,GACd,EAAE,iBAAiB,2CA8TnB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { MouseEvent } from 'react';
|
|
2
|
+
import { Locale } from 'date-fns';
|
|
3
|
+
import { GanttBar, GanttRow } from '../gantt.types';
|
|
4
|
+
import { GanttFlatRow } from '../hooks/layout';
|
|
5
|
+
/**
|
|
6
|
+
* Visão `calendar` — a grade de mês.
|
|
7
|
+
*
|
|
8
|
+
* ## O que esta visão responde, e que a `timeline` não responde
|
|
9
|
+
*
|
|
10
|
+
* A `timeline` responde *"o que depende do quê"*. Esta responde **"o que está
|
|
11
|
+
* acontecendo no dia 12?"** — pergunta que num eixo horizontal exige varrer 20
|
|
12
|
+
* linhas com o dedo na coluna. São perguntas diferentes sobre o mesmo dado.
|
|
13
|
+
*
|
|
14
|
+
* ## A barra é UM segmento contínuo, não um chip por dia
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ A primeira versão desenhava um chip por dia: uma tarefa de 10 a 15 virava
|
|
17
|
+
* **6 chips soltos**, um em cada célula, cada um repetindo o mesmo nome. Lê como
|
|
18
|
+
* seis tarefas de um dia em vez de uma de seis — o oposto do que um cronograma
|
|
19
|
+
* precisa dizer. Foi o motivo de a estrutura da grade mudar: 42 células soltas
|
|
20
|
+
* num `grid` não permitem que um elemento atravesse colunas.
|
|
21
|
+
*
|
|
22
|
+
* Agora cada semana é uma linha com duas camadas — as 7 células de fundo e uma
|
|
23
|
+
* camada absoluta de segmentos. Uma tarefa que cruza a virada de semana produz
|
|
24
|
+
* dois segmentos, cada um com a ponta cortada marcada
|
|
25
|
+
* (`continuesBefore`/`continuesAfter`), no mesmo vocabulário da timeline.
|
|
26
|
+
*
|
|
27
|
+
* Geometria e lanes vivem em `hooks/week-segments.ts`, com 24 testes — inclusive
|
|
28
|
+
* a borda que me corrigiu (barra que começa no primeiro dia da semana **não** é
|
|
29
|
+
* `continuesBefore`).
|
|
30
|
+
*
|
|
31
|
+
* ⛔ **Sem setas de vínculo, e é decisão.** Numa grade de mês uma seta do dia 3
|
|
32
|
+
* ao 19 atravessaria três linhas de semana passando por cima de 16 células que
|
|
33
|
+
* nada têm a ver com o vínculo. O grafo continua vivo (`onLinkViolations` segue
|
|
34
|
+
* emitindo, o conflito segue marcado no segmento); sai o desenho, porque nesta
|
|
35
|
+
* geometria ele não informa.
|
|
36
|
+
*
|
|
37
|
+
* ## Grade própria, não a do `Scheduler`
|
|
38
|
+
*
|
|
39
|
+
* A spec §5 registra a decisão e o preço. Delegar criaria acoplamento por
|
|
40
|
+
* herança de propósito. O que a duplicação não pode causar é divergência
|
|
41
|
+
* silenciosa de layout, e é por isso que `buildMonthMatrix` tem teste próprio
|
|
42
|
+
* sobre as mesmas bordas (mês que começa no domingo, fevereiro comum, virada de
|
|
43
|
+
* ano).
|
|
44
|
+
*/
|
|
45
|
+
export type GanttCalendarViewProps = {
|
|
46
|
+
/** Linhas JÁ filtradas e achatadas — mesma entrada da `timeline`. */
|
|
47
|
+
rows: GanttFlatRow[];
|
|
48
|
+
/** Mês âncora. Vem do MEIO da janela — ver a nota no `gantt.tsx`. */
|
|
49
|
+
anchor: Date;
|
|
50
|
+
weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
51
|
+
now: Date;
|
|
52
|
+
locale?: Locale;
|
|
53
|
+
conflictBarIds: ReadonlySet<string>;
|
|
54
|
+
criticalBarIds: ReadonlySet<string>;
|
|
55
|
+
onBarClick?: (bar: GanttBar, row: GanttRow, evt: MouseEvent) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Adicionar no dia. **Sem isto o "+" não é renderizado** — um botão que não
|
|
58
|
+
* adiciona nada é pior que a ausência dele, mesma regra do toggle de caminho
|
|
59
|
+
* crítico sem vínculo.
|
|
60
|
+
*/
|
|
61
|
+
onDayAdd?: (date: Date) => void;
|
|
62
|
+
};
|
|
63
|
+
export declare function GanttCalendarView({ rows, anchor, weekStartsOn, now, locale, conflictBarIds, criticalBarIds, onBarClick, onDayAdd, }: GanttCalendarViewProps): import("react/jsx-runtime").JSX.Element;
|
|
64
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/views/calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAuBvC,OAAO,KAAK,EAAE,QAAQ,EAAiB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACnC,qEAAqE;IACrE,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,qEAAqE;IACrE,MAAM,EAAE,IAAI,CAAC;IACb,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACrE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CACjC,CAAC;AAmBF,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,GAAG,EACH,MAAM,EACN,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,GACT,EAAE,sBAAsB,2CA+SxB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { MouseEvent, ReactNode } from 'react';
|
|
2
|
+
import { Locale } from 'date-fns';
|
|
3
|
+
import { GanttBar, GanttRow } from '../gantt.types';
|
|
4
|
+
import { GanttFlatRow } from '../hooks/layout';
|
|
5
|
+
/**
|
|
6
|
+
* Visão `list` — a agenda.
|
|
7
|
+
*
|
|
8
|
+
* ## A pergunta que ela responde
|
|
9
|
+
*
|
|
10
|
+
* `timeline` responde *"o que depende do quê"*. `calendar` responde *"o que
|
|
11
|
+
* acontece no dia 12"*. Esta responde **"o que estou fazendo hoje, e amanhã"** —
|
|
12
|
+
* a leitura sequencial, sem eixo pra varrer nem grade pra achar a célula.
|
|
13
|
+
*
|
|
14
|
+
* ⚠️ **Não é uma tabela de tarefas.** Tabela de tarefas com hierarquia e filtro
|
|
15
|
+
* é o `DataTable` (view lista, `hierarchical`), e reimplementá-lo aqui seria a
|
|
16
|
+
* terceira cópia da mesma coisa no DS. O que faz esta visão diferente é o
|
|
17
|
+
* agrupamento por **DIA**: a mesma tarefa aparece em cada dia que ela ocupa.
|
|
18
|
+
*
|
|
19
|
+
* ## Só os dias QUE TÊM tarefa
|
|
20
|
+
*
|
|
21
|
+
* A grade do mês mostra 42 dias porque a grade *é* a informação — um dia vazio
|
|
22
|
+
* ali diz "nada neste terça". Aqui não: uma agenda que lista 60 dias pra mostrar
|
|
23
|
+
* 20 tarefas obriga a rolar por 40 blocos vazios. Dia sem tarefa não aparece, e
|
|
24
|
+
* o salto entre datas é o próprio sinal de que não há nada no meio.
|
|
25
|
+
*
|
|
26
|
+
* Regra copiada do `SchedulerListView`, que chegou nela pelo mesmo raciocínio.
|
|
27
|
+
*
|
|
28
|
+
* ## O metadado da direita é a POSIÇÃO no intervalo
|
|
29
|
+
*
|
|
30
|
+
* Uma agenda de eventos mostra a hora ali. Um cronograma não tem hora — mostra
|
|
31
|
+
* `dia 2 de 6`. E isso não é enfeite: numa tarefa repetida em 6 blocos
|
|
32
|
+
* consecutivos, o intervalo (`18/09 – 23/09`) seria idêntico nos seis e não diria
|
|
33
|
+
* nada de novo; a posição diz **onde no trabalho aquele dia está**, que é
|
|
34
|
+
* informação que nenhuma das outras duas visões dá sem contar colunas.
|
|
35
|
+
*/
|
|
36
|
+
export type GanttListViewProps = {
|
|
37
|
+
/** Linhas JÁ filtradas e achatadas — mesma entrada das outras views. */
|
|
38
|
+
rows: GanttFlatRow[];
|
|
39
|
+
/**
|
|
40
|
+
* O período a listar — o MÊS visível, não a janela do eixo (ver a nota do
|
|
41
|
+
* `mesVisivel` no `gantt.tsx`). A agenda lista os dias DELE que têm tarefa.
|
|
42
|
+
*/
|
|
43
|
+
windowStart: Date;
|
|
44
|
+
windowEnd: Date;
|
|
45
|
+
now: Date;
|
|
46
|
+
locale?: Locale;
|
|
47
|
+
conflictBarIds: ReadonlySet<string>;
|
|
48
|
+
criticalBarIds: ReadonlySet<string>;
|
|
49
|
+
onBarClick?: (bar: GanttBar, row: GanttRow, evt: MouseEvent) => void;
|
|
50
|
+
emptyState?: ReactNode;
|
|
51
|
+
};
|
|
52
|
+
export declare function GanttListView({ rows, windowStart, windowEnd, now, locale, conflictBarIds, criticalBarIds, onBarClick, emptyState, }: GanttListViewProps): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/views/list.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,UAAU,CAAC;AAalB,OAAO,KAAK,EAAE,QAAQ,EAAiB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wEAAwE;IACxE,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB;;;OAGG;IACH,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACrE,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAWF,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAW,EACX,SAAS,EACT,GAAG,EACH,MAAM,EACN,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,GACX,EAAE,kBAAkB,2CA+IpB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { MouseEvent, RefObject, UIEvent } from 'react';
|
|
2
|
+
import { Locale } from 'date-fns';
|
|
3
|
+
import { GanttFlatRow } from '../hooks/layout';
|
|
4
|
+
import { GanttBar, GanttBarChange, GanttGranularity, GanttLink, GanttRow } from '../gantt.types';
|
|
5
|
+
/**
|
|
6
|
+
* Visão `timeline` — eixo, barras e setas.
|
|
7
|
+
*
|
|
8
|
+
* ## O cabeçalho vive DENTRO do scroller
|
|
9
|
+
*
|
|
10
|
+
* Estrutura, e a ordem importa:
|
|
11
|
+
*
|
|
12
|
+
* scroller (overflow-auto nos 2 eixos)
|
|
13
|
+
* └ trilho (width = larguraTotal)
|
|
14
|
+
* ├ cabeçalho (sticky top-0) ← rola pro LADO, prende em CIMA
|
|
15
|
+
* └ canvas (relative)
|
|
16
|
+
*
|
|
17
|
+
* Fora do scroller, o cabeçalho ficava imóvel na rolagem horizontal e as
|
|
18
|
+
* colunas do eixo desalinhavam das do canvas — o rótulo "12" ia parar em cima
|
|
19
|
+
* do dia 20. `sticky top-0` prende só na vertical, que é o que se quer.
|
|
20
|
+
*
|
|
21
|
+
* ## Uma passada calcula tudo
|
|
22
|
+
*
|
|
23
|
+
* A geometria de cada barra é calculada UMA vez e guardada num mapa por id. A
|
|
24
|
+
* camada de setas lê desse mapa em vez de recalcular: duas fontes pro mesmo
|
|
25
|
+
* número fariam a seta apontar pra um pixel diferente do que a barra ocupa no
|
|
26
|
+
* primeiro arredondamento divergente (L-038).
|
|
27
|
+
*/
|
|
28
|
+
export type GanttTimelineViewProps = {
|
|
29
|
+
rows: GanttFlatRow[];
|
|
30
|
+
allRows: GanttRow[];
|
|
31
|
+
links: GanttLink[];
|
|
32
|
+
windowStart: Date;
|
|
33
|
+
windowEnd: Date;
|
|
34
|
+
granularity: GanttGranularity;
|
|
35
|
+
pxPerDay: number;
|
|
36
|
+
/**
|
|
37
|
+
* Alturas e offsets JÁ CALCULADOS pela raiz — ver `rowHeights` no núcleo.
|
|
38
|
+
*
|
|
39
|
+
* A view não calcula: era o defeito #2. O canvas somava lanes e a grade
|
|
40
|
+
* usava a constante, e numa linha-contêiner com 3 barras as duas metades da
|
|
41
|
+
* mesma linha saíam com alturas diferentes.
|
|
42
|
+
*/
|
|
43
|
+
heights: readonly number[];
|
|
44
|
+
offsets: readonly number[];
|
|
45
|
+
now: Date;
|
|
46
|
+
locale?: Locale;
|
|
47
|
+
weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
48
|
+
conflictBarIds: ReadonlySet<string>;
|
|
49
|
+
criticalBarIds: ReadonlySet<string>;
|
|
50
|
+
draggable: boolean;
|
|
51
|
+
resizable: boolean;
|
|
52
|
+
linkable: boolean;
|
|
53
|
+
/** Índice da linha sob o cursor — o hover cruzado vem do pai (#3). */
|
|
54
|
+
hoveredRow: number | null;
|
|
55
|
+
onHoverRow: (index: number | null) => void;
|
|
56
|
+
/** Início (em dias) da coluna sob o cursor. */
|
|
57
|
+
hoveredDay: number | null;
|
|
58
|
+
/** Índice da linha selecionada (#7). */
|
|
59
|
+
selectedRow: number | null;
|
|
60
|
+
/** Offset em dias da coluna selecionada por clique (#2). */
|
|
61
|
+
selectedDay: number | null;
|
|
62
|
+
onSelectDay: (dayOffset: number | null) => void;
|
|
63
|
+
onHoverDay: (dayOffset: number | null) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Emitem a INTENÇÃO do gesto. O componente não reagenda nada — ver a nota
|
|
66
|
+
* do `gantt.tsx`. Ausentes, o gesto ainda dá prévia e volta ao lugar.
|
|
67
|
+
*/
|
|
68
|
+
onBarMove?: (change: GanttBarChange) => void;
|
|
69
|
+
onBarResize?: (change: GanttBarChange) => void;
|
|
70
|
+
onLinkCreate?: (link: Omit<GanttLink, "id">) => void;
|
|
71
|
+
onScroll: (evt: UIEvent<HTMLDivElement>) => void;
|
|
72
|
+
/**
|
|
73
|
+
* O elemento que rola, exposto pra raiz.
|
|
74
|
+
*
|
|
75
|
+
* Ela precisa dele pra CENTRAR a viewport num instante do tempo ao trocar
|
|
76
|
+
* de escala — ver a nota do `onGranularityChange`. Sem isso, mudar pra
|
|
77
|
+
* trimestre deixava o usuário olhando 2024 numa janela de 5 anos cujos
|
|
78
|
+
* dados vivem em 2026: canvas vazio, e nada dizendo onde estava o trabalho.
|
|
79
|
+
*/
|
|
80
|
+
scrollRef?: RefObject<HTMLDivElement | null>;
|
|
81
|
+
onBarClick?: (bar: GanttBar, row: GanttRow, evt: MouseEvent) => void;
|
|
82
|
+
onLinkClick?: (link: GanttLink) => void;
|
|
83
|
+
};
|
|
84
|
+
export declare function GanttTimelineView({ rows, allRows, links, windowStart, windowEnd, granularity, pxPerDay, heights, offsets, now, locale, weekStartsOn, conflictBarIds, criticalBarIds, draggable, resizable, linkable, hoveredRow, onHoverRow, hoveredDay, onHoverDay, selectedRow, selectedDay, onSelectDay, onBarMove, onBarResize, onLinkCreate, onScroll, scrollRef, onBarClick, onLinkClick, }: GanttTimelineViewProps): import("react/jsx-runtime").JSX.Element;
|
|
85
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Gantt/views/timeline.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { MessageBubble, MessageReplyIcon } from './message-bubble';
|
|
2
2
|
export { messageBubbleStyles } from './message-bubble.styles';
|
|
3
3
|
export type { MessageBubbleVariantProps } from './message-bubble.styles';
|
|
4
|
-
export type { MessageBubbleProps, MessageSide, MessageMediaType, QuotedMessage, } from './message-bubble.types';
|
|
4
|
+
export type { MessageBubbleProps, MessageSide, MessageOrigin, MessageMediaType, QuotedMessage, } from './message-bubble.types';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
|
@@ -11,7 +11,7 @@ import { MessageBubbleProps } from './message-bubble.types';
|
|
|
11
11
|
* exceção de hardcode é `max-w-[70%]` na coluna da bolha — não há token de
|
|
12
12
|
* porcentagem para largura de balão de chat.
|
|
13
13
|
*/
|
|
14
|
-
export declare function MessageBubble({ side, body, createdAt, ack, ackError, mediaType, mediaUrl, media, quotedMessage, isEdited, isDeleted, tail, authorName, avatar, actions, onMediaClick, className, }: MessageBubbleProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function MessageBubble({ side, body, createdAt, ack, ackError, mediaType, mediaUrl, media, quotedMessage, isEdited, isDeleted, tail, origin, authorName, avatar, actions, onMediaClick, className, }: MessageBubbleProps): import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
export declare namespace MessageBubble {
|
|
16
16
|
var displayName: string;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bubble.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/message-bubble.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,EAAgB,MAAM,cAAc,CAAC;AAaxD,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,wBAAwB,CAAC;AA6MhC;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,GAAG,EACH,QAAQ,EACR,SAAkB,EAClB,QAAQ,EACR,KAAK,EACL,aAAa,EACb,QAAgB,EAChB,SAAiB,EACjB,IAAW,EACX,UAAU,EACV,MAAM,EACN,OAAO,EACP,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"message-bubble.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/message-bubble.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,EAAgB,MAAM,cAAc,CAAC;AAaxD,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,wBAAwB,CAAC;AA6MhC;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,GAAG,EACH,QAAQ,EACR,SAAkB,EAClB,QAAQ,EACR,KAAK,EACL,aAAa,EACb,QAAgB,EAChB,SAAiB,EACjB,IAAW,EACX,MAAM,EACN,UAAU,EACV,MAAM,EACN,OAAO,EACP,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,2CAoHpB;yBAvIe,aAAa;;;AA2I7B,wEAAwE;AACxE,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -11,7 +11,7 @@ import { VariantProps } from '../../../utils/tv';
|
|
|
11
11
|
* media* = container/elementos do MessageMediaRenderer
|
|
12
12
|
* body = corpo markdown
|
|
13
13
|
* meta = rodapé HH:mm + label editada + MessageAck
|
|
14
|
-
* actions* = botão de ações (hover, top-right) + Popover content
|
|
14
|
+
* actions* = botão de ações (hover, top-right, superfície própria) + Popover content
|
|
15
15
|
*
|
|
16
16
|
* Cor: `sent` = `bg-bg-success-muted` (verde sutil — espelha o "balão enviado"
|
|
17
17
|
* do WA, claro/escuro via token). `received` = `bg-bg-surface`. Sem hardcode.
|
|
@@ -20,7 +20,9 @@ import { VariantProps } from '../../../utils/tv';
|
|
|
20
20
|
* largura de bolha de chat (regra do domínio: bolha nunca passa de 70% da coluna).
|
|
21
21
|
*
|
|
22
22
|
* disabled = n/a (bolha não é controle interativo). `tail` é o único modifier
|
|
23
|
-
* de raio; `side` controla bg + alinhamento + lado da rabeta
|
|
23
|
+
* de raio; `side` controla bg + alinhamento + lado da rabeta; `origin="ai"`
|
|
24
|
+
* troca a borda pela da marca (contorno sutil) — quem decide se a mensagem é
|
|
25
|
+
* da IA é o consumidor.
|
|
24
26
|
*/
|
|
25
27
|
export declare const messageBubbleStyles: import('tailwind-variants').TVReturnType<{
|
|
26
28
|
side: {
|
|
@@ -39,6 +41,12 @@ export declare const messageBubbleStyles: import('tailwind-variants').TVReturnTy
|
|
|
39
41
|
true: {};
|
|
40
42
|
false: {};
|
|
41
43
|
};
|
|
44
|
+
origin: {
|
|
45
|
+
human: {};
|
|
46
|
+
ai: {
|
|
47
|
+
bubble: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
42
50
|
}, {
|
|
43
51
|
row: string;
|
|
44
52
|
avatarSlot: string;
|
|
@@ -90,6 +98,12 @@ export declare const messageBubbleStyles: import('tailwind-variants').TVReturnTy
|
|
|
90
98
|
true: {};
|
|
91
99
|
false: {};
|
|
92
100
|
};
|
|
101
|
+
origin: {
|
|
102
|
+
human: {};
|
|
103
|
+
ai: {
|
|
104
|
+
bubble: string;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
93
107
|
}, {
|
|
94
108
|
row: string;
|
|
95
109
|
avatarSlot: string;
|
|
@@ -141,6 +155,12 @@ export declare const messageBubbleStyles: import('tailwind-variants').TVReturnTy
|
|
|
141
155
|
true: {};
|
|
142
156
|
false: {};
|
|
143
157
|
};
|
|
158
|
+
origin: {
|
|
159
|
+
human: {};
|
|
160
|
+
ai: {
|
|
161
|
+
bubble: string;
|
|
162
|
+
};
|
|
163
|
+
};
|
|
144
164
|
}, {
|
|
145
165
|
row: string;
|
|
146
166
|
avatarSlot: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bubble.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/message-bubble.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"message-bubble.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/message-bubble.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAkH9B,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAClD,OAAO,mBAAmB,CAC3B,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { MessageBubbleVariantProps } from './message-bubble.styles';
|
|
3
3
|
/** Lado da bolha — quem enviou. `sent` = nós (direita), `received` = contato (esquerda). */
|
|
4
4
|
export type MessageSide = NonNullable<MessageBubbleVariantProps["side"]>;
|
|
5
|
+
/** Origem da mensagem. `ai` = escrita pela IA (Sol); `human` = pessoa. */
|
|
6
|
+
export type MessageOrigin = NonNullable<MessageBubbleVariantProps["origin"]>;
|
|
5
7
|
/** Tipo de mídia que a bolha carrega. `text` = sem mídia (só corpo). */
|
|
6
8
|
export type MessageMediaType = "text" | "image" | "audio" | "video" | "document" | "location" | "vcard" | "contact";
|
|
7
9
|
/**
|
|
@@ -63,6 +65,12 @@ export interface MessageBubbleProps {
|
|
|
63
65
|
* `true`.
|
|
64
66
|
*/
|
|
65
67
|
tail?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Origem da mensagem. `ai` aplica um contorno sutil da marca na bolha para
|
|
70
|
+
* distinguir a resposta da IA da de um atendente; o critério de "é da IA" é
|
|
71
|
+
* do consumidor. Default `human` (sem mudança visual).
|
|
72
|
+
*/
|
|
73
|
+
origin?: MessageOrigin;
|
|
66
74
|
/** Nome do autor (exibido no topo da bolha — útil em grupos). */
|
|
67
75
|
authorName?: string;
|
|
68
76
|
/** Slot de avatar (renderizado ao lado da bolha). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bubble.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/message-bubble.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,4FAA4F;AAC5F,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzE,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,CAAC;AAEd;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0DAA0D;AAC1D,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"message-bubble.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/MessageBubble/message-bubble.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,4FAA4F;AAC5F,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzE,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE7E,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,CAAC;AAEd;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0DAA0D;AAC1D,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B"}
|