@gyramais/gyra-design 0.2.49 → 0.2.52

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 (56) hide show
  1. package/dist/components/ContextMenu/index.js +1 -1
  2. package/dist/components/ContextMenu/index.js.map +1 -1
  3. package/dist/components/Drawer/Drawer.d.ts +25 -1
  4. package/dist/components/Drawer/index.js +7 -7
  5. package/dist/components/Drawer/index.js.map +1 -1
  6. package/dist/components/DropdownMenu/index.js +1 -1
  7. package/dist/components/DropdownMenu/index.js.map +1 -1
  8. package/dist/components/Modal/Modal.d.ts +11 -1
  9. package/dist/components/Modal/index.js +9 -9
  10. package/dist/components/Modal/index.js.map +1 -1
  11. package/dist/components/MultiSelectPicker/index.js +7 -7
  12. package/dist/components/MultiSelectPicker/index.js.map +1 -1
  13. package/dist/components/OperatorPicker/index.js +1 -1
  14. package/dist/components/OperatorPicker/index.js.map +1 -1
  15. package/dist/components/PickerPopover/index.js +1 -1
  16. package/dist/components/PickerPopover/index.js.map +1 -1
  17. package/dist/components/Popover/Popover.d.ts +16 -1
  18. package/dist/components/Popover/index.js +1 -1
  19. package/dist/components/Popover/index.js.map +1 -1
  20. package/dist/components/Rail/Rail.d.ts +19 -5
  21. package/dist/components/Rail/RailInlineSelect.d.ts +44 -0
  22. package/dist/components/Rail/RailMini.d.ts +11 -7
  23. package/dist/components/Rail/RailStep.d.ts +8 -13
  24. package/dist/components/Rail/index.d.ts +1 -0
  25. package/dist/components/Rail/index.js +7 -7
  26. package/dist/components/Rail/index.js.map +1 -1
  27. package/dist/components/Rail/labels.d.ts +34 -5
  28. package/dist/components/Rail/types.d.ts +53 -8
  29. package/dist/components/RuleSearchPicker/index.js +1 -1
  30. package/dist/components/RuleSearchPicker/index.js.map +1 -1
  31. package/dist/components/SegmentedPicker/index.js +1 -1
  32. package/dist/components/SegmentedPicker/index.js.map +1 -1
  33. package/dist/emails/balance-sheet-finalized/components/Drawer/Drawer.d.ts +25 -1
  34. package/dist/emails/balance-sheet-finalized/components/Modal/Modal.d.ts +11 -1
  35. package/dist/emails/balance-sheet-finalized/components/Popover/Popover.d.ts +16 -1
  36. package/dist/emails/balance-sheet-finalized/components/Rail/Rail.d.ts +19 -5
  37. package/dist/emails/balance-sheet-finalized/components/Rail/RailInlineSelect.d.ts +44 -0
  38. package/dist/emails/balance-sheet-finalized/components/Rail/RailMini.d.ts +11 -7
  39. package/dist/emails/balance-sheet-finalized/components/Rail/RailStep.d.ts +8 -13
  40. package/dist/emails/balance-sheet-finalized/components/Rail/index.d.ts +1 -0
  41. package/dist/emails/balance-sheet-finalized/components/Rail/labels.d.ts +34 -5
  42. package/dist/emails/balance-sheet-finalized/components/Rail/types.d.ts +53 -8
  43. package/dist/emails/balance-sheet-finalized/index.d.ts +33 -64
  44. package/dist/emails/email/components/Drawer/Drawer.d.ts +25 -1
  45. package/dist/emails/email/components/Modal/Modal.d.ts +11 -1
  46. package/dist/emails/email/components/Popover/Popover.d.ts +16 -1
  47. package/dist/emails/email/components/Rail/Rail.d.ts +19 -5
  48. package/dist/emails/email/components/Rail/RailInlineSelect.d.ts +44 -0
  49. package/dist/emails/email/components/Rail/RailMini.d.ts +11 -7
  50. package/dist/emails/email/components/Rail/RailStep.d.ts +8 -13
  51. package/dist/emails/email/components/Rail/index.d.ts +1 -0
  52. package/dist/emails/email/components/Rail/labels.d.ts +34 -5
  53. package/dist/emails/email/components/Rail/types.d.ts +53 -8
  54. package/dist/emails/email/index.d.ts +94 -64
  55. package/dist/index.css +769 -249
  56. package/package.json +1 -1
@@ -10,7 +10,31 @@ type DrawerProps = {
10
10
  onClose?: () => void;
11
11
  direction?: "left" | "top" | "right" | "bottom";
12
12
  width?: number | string;
13
+ /**
14
+ * Escape fecha a gaveta (chama `onClose`). Default: true. Nao vale quando
15
+ * `closable` e false. Um Escape que outra camada ja consumiu (menu de
16
+ * Select, Popover, SegmentedPicker, Modal) nao chega aqui: cada camada
17
+ * fecha a sua e a gaveta fica.
18
+ */
19
+ closeOnEscape?: boolean;
20
+ /**
21
+ * Prende o Tab dentro do painel enquanto a gaveta esta aberta. Default:
22
+ * true. Conteudo portalado para o `body` (menu do Select, Popover,
23
+ * SegmentedPicker, Modal, outra gaveta) continua alcancavel: o trap so
24
+ * age quando o foco esta no painel ou na borda de um desses portais.
25
+ */
26
+ trapFocus?: boolean;
27
+ /**
28
+ * Ao abrir, move o foco para dentro do painel (o proprio painel, ou
29
+ * `initialFocusRef`) e o devolve a quem o tinha ao fechar. Default: true.
30
+ */
31
+ autoFocus?: boolean;
32
+ /** Elemento que recebe o foco inicial em vez do painel. */
33
+ initialFocusRef?: React.RefObject<HTMLElement>;
34
+ /** Rotulo acessivel quando `title` nao e texto ou nao existe. */
35
+ ariaLabel?: string;
13
36
  children?: React.ReactNode;
14
37
  };
15
- declare const Drawer: ({ className, title, subtitle, footer, visible, closable, onClose, direction, width, children, }: DrawerProps) => React.JSX.Element;
38
+ declare const Drawer: ({ className, title, subtitle, footer, visible, closable, onClose, direction, width, closeOnEscape, trapFocus, autoFocus, initialFocusRef, ariaLabel, children, }: DrawerProps) => React.JSX.Element;
16
39
  export { Drawer };
40
+ export type { DrawerProps };
@@ -19,7 +19,17 @@ type ModalProps = {
19
19
  };
20
20
  onClose?: () => void;
21
21
  width?: number;
22
+ /**
23
+ * Escape fecha o modal (chama `onClose`). Default: true. Nao vale com
24
+ * `loading`. As camadas descascam uma por vez: com a lista de um Select,
25
+ * um Popover ou qualquer gatilho `aria-expanded` aberto dentro do modal,
26
+ * o Escape e dessa camada e o modal fica; o Escape seguinte fecha o modal.
27
+ */
28
+ closeOnEscape?: boolean;
29
+ /** Rotulo acessivel quando `title` nao e texto ou nao existe. */
30
+ ariaLabel?: string;
22
31
  children?: React.ReactNode;
23
32
  };
24
- declare const Modal: ({ className, title, subtitle, footer, visible, loading, okButton, cancelButton, onClose, width, children, }: ModalProps) => React.JSX.Element;
33
+ declare const Modal: ({ className, title, subtitle, footer, visible, loading, okButton, cancelButton, onClose, width, closeOnEscape, ariaLabel, children, }: ModalProps) => React.JSX.Element;
25
34
  export { Modal };
35
+ export type { ModalProps };
@@ -13,6 +13,21 @@ type PopoverProps = {
13
13
  children?: React.ReactNode;
14
14
  onPointerDownOutside?: () => void;
15
15
  onOpenAutoFocus?: (event: Event) => void;
16
+ /**
17
+ * Avisa que o Radix quer abrir/fechar (clique no gatilho, clique fora,
18
+ * Escape). Sem isto, `visible` controlado nao tem como reagir ao Escape:
19
+ * o Radix fecha no vazio. Quem ja alterna `visible` no onClick do gatilho
20
+ * deve preferir `onEscapeKeyDown`, senao o clique alterna duas vezes.
21
+ */
22
+ onOpenChange?: (open: boolean) => void;
23
+ /**
24
+ * Escape com o foco dentro do conteudo. O evento chega ja consumido pelo
25
+ * Radix (`defaultPrevented`), entao uma gaveta ou modal por baixo nao
26
+ * fecha junto. Feche o `visible` aqui; o foco volta ao gatilho sozinho.
27
+ */
28
+ onEscapeKeyDown?: (event: KeyboardEvent) => void;
29
+ /** Ao fechar, antes de o foco voltar ao gatilho. `preventDefault` cancela a volta. */
30
+ onCloseAutoFocus?: (event: Event) => void;
16
31
  };
17
- declare const Popover: ({ id, className, align, side, sideOffset, collisionPadding, visible, content, children, onPointerDownOutside, onOpenAutoFocus, }: PopoverProps) => React.JSX.Element;
32
+ declare const Popover: ({ id, className, align, side, sideOffset, collisionPadding, visible, content, children, onPointerDownOutside, onOpenAutoFocus, onOpenChange, onEscapeKeyDown, onCloseAutoFocus, }: PopoverProps) => React.JSX.Element;
18
33
  export { Popover };
@@ -2,12 +2,14 @@ import React from "react";
2
2
  import "./index.css";
3
3
  import type { RailGateCondition, RailLeaf, RailMode, RailStepData } from "./types";
4
4
  /**
5
- * Rail — a esteira Gyra+: uma lista ordenada e vertical de etapas, com um
5
+ * Rail, a esteira Gyra+: uma lista ordenada e vertical de etapas, com um
6
6
  * conector condicional entre elas.
7
7
  *
8
8
  * Uma linha, nao um grafo: le de cima para baixo na mesma ordem em que a
9
9
  * decisao acontece. A referencia e o Atalhos da Apple, nao um editor de
10
- * diagramas.
10
+ * diagramas. O rail e a unica fonte de verdade da esteira na UI: a primeira
11
+ * etapa de Analise E a politica principal, e o conector acima de cada etapa
12
+ * E a condicao para ela rodar. Nao existe conector acima da primeira etapa.
11
13
  *
12
14
  * Dois modos, uma arvore so:
13
15
  * - `edit`: inserir etapa entre etapas, trocar a condicao do conector,
@@ -28,7 +30,12 @@ type RailProps = {
28
30
  steps: Array<RailStepData>;
29
31
  /** Rotulo acessivel da lista. Default: "Esteira". */
30
32
  ariaLabel?: string;
31
- /** Etapa em foco na execucao ao vivo (modo run). */
33
+ /**
34
+ * Etapa em foco na execucao ao vivo (modo run). Sem ela, o proprio Rail
35
+ * assume a etapa que roda ou aguarda. Execucao encerrada nao tem etapa
36
+ * atual, e ninguem ganha elevacao: sombra que sobrevive ao fim da execucao
37
+ * aponta para nada.
38
+ */
32
39
  activeStepId?: string;
33
40
  /** Etapa selecionada no construtor (modo edit). */
34
41
  selectedStepId?: string;
@@ -40,14 +47,21 @@ type RailProps = {
40
47
  defaultExpandedStepIds?: Array<string>;
41
48
  /** Rotulo do botao que acrescenta etapa no fim. Default: "Adicionar etapa". */
42
49
  addLabel?: string;
43
- /** Texto da esteira vazia. */
50
+ /**
51
+ * Texto da esteira vazia. E AQUI que mora o tutorial ("Comece pela
52
+ * análise: a primeira etapa é a política principal"), nunca no cartao.
53
+ */
44
54
  emptyText?: string;
45
55
  onSelectStep?: (step: RailStepData) => void;
46
56
  onOpenStep?: (step: RailStepData) => void;
47
57
  onOpenLeaf?: (leaf: RailLeaf, step: RailStepData) => void;
48
58
  /** Trocar a condicao do conector que fica ACIMA da etapa `stepId`. */
49
59
  onChangeGate?: (stepId: string, condition: RailGateCondition) => void;
50
- /** Inserir etapa na posicao `index` (0 = antes da primeira). */
60
+ /**
61
+ * Inserir etapa na posicao `index`. O construtor oferece inserir ENTRE
62
+ * etapas (index >= 1, no conector) e no fim; a posicao 0 so acontece na
63
+ * esteira vazia, porque a primeira etapa e a politica principal.
64
+ */
51
65
  onInsertStep?: (index: number) => void;
52
66
  onRemoveStep?: (step: RailStepData) => void;
53
67
  /** Reordenar. `toIndex` ja vem calculado e dentro dos limites. */
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ /**
4
+ * RailInlineSelect, o gatilho "inline select" da linha 2 do cartao: texto +
5
+ * chevron, sem borda, no corpo do texto. E o que a politica de uma etapa usa
6
+ * no modo edit (clicou, vira picker), no lugar de um Input de rotulo
7
+ * flutuante de 40px.
8
+ *
9
+ * Nao abre nada sozinho: e um botao. O consumer o usa como trigger de um
10
+ * Popover/Select (por isso o forwardRef e o repasse das props restantes,
11
+ * que o `asChild` do Radix precisa).
12
+ */
13
+ type RailInlineSelectProps = {
14
+ id?: string;
15
+ className?: string;
16
+ /** O valor escolhido. Sem valor, mostra o `placeholder` em tom terciario. */
17
+ label?: React.ReactNode;
18
+ /** Default: "Escolher política". */
19
+ placeholder?: string;
20
+ /** Avisa que o valor salvo nao esta disponivel (ex: politica desativada). */
21
+ tone?: "default" | "warning";
22
+ disabled?: boolean;
23
+ /** Estado do picker que este gatilho abre (aria-expanded). */
24
+ open?: boolean;
25
+ /** Rotulo acessivel. Default: "Política da etapa: {label ou placeholder}". */
26
+ ariaLabel?: string;
27
+ } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "id" | "className" | "disabled">;
28
+ declare const RailInlineSelect: React.ForwardRefExoticComponent<{
29
+ id?: string;
30
+ className?: string;
31
+ /** O valor escolhido. Sem valor, mostra o `placeholder` em tom terciario. */
32
+ label?: React.ReactNode;
33
+ /** Default: "Escolher política". */
34
+ placeholder?: string;
35
+ /** Avisa que o valor salvo nao esta disponivel (ex: politica desativada). */
36
+ tone?: "default" | "warning";
37
+ disabled?: boolean;
38
+ /** Estado do picker que este gatilho abre (aria-expanded). */
39
+ open?: boolean;
40
+ /** Rotulo acessivel. Default: "Política da etapa: {label ou placeholder}". */
41
+ ariaLabel?: string;
42
+ } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "className" | "id" | "disabled"> & React.RefAttributes<HTMLButtonElement>>;
43
+ export { RailInlineSelect };
44
+ export type { RailInlineSelectProps };
@@ -2,13 +2,13 @@ import React from "react";
2
2
  import "./index.css";
3
3
  import type { RailStepData } from "./types";
4
4
  /**
5
- * RailMini — a MESMA esteira, do tamanho de uma linha de lista.
5
+ * RailMini, a MESMA esteira, do tamanho de uma celula de lista.
6
6
  *
7
- * Existe porque o progresso da esteira e a informacao que a listagem de
8
- * execucoes precisa dar de graca: sem isto, saber que a esteira parou na
9
- * etapa 1 de 4 custa um clique e uma expansao. E uma miniatura, nao um
10
- * componente novo: le o mesmo `RailStepData` do `Rail`, so que como uma fila
11
- * de marcas horizontais.
7
+ * Uma bolinha de 6px por etapa, ligadas por um fio de 1px, no maximo ~120px
8
+ * de largura. O resumo ("Parou na etapa 2 de 4: reprovada") vai no
9
+ * `aria-label` e no `title`; na tela ele so aparece com `showSummary`,
10
+ * porque a linha da lista ja tem a coluna de status e nao precisa dizer a
11
+ * mesma coisa duas vezes.
12
12
  *
13
13
  * Nao e clicavel de proposito. Quem quer detalhe abre a linha; a miniatura e
14
14
  * um indicador, e um alvo de clique dentro de outro alvo de clique so cria
@@ -19,7 +19,11 @@ type RailMiniProps = {
19
19
  steps: Array<RailStepData>;
20
20
  /** Rotulo acessivel. Default: "Progresso da esteira". */
21
21
  ariaLabel?: string;
22
+ /** Mostra o resumo em texto ao lado das bolinhas. Default: false. */
23
+ showSummary?: boolean;
22
24
  };
23
- declare const RailMini: ({ className, steps, ariaLabel }: RailMiniProps) => React.JSX.Element | null;
25
+ /** O resumo em texto de uma execucao: exportado para a lista reutilizar. */
26
+ export declare const railMiniSummary: (steps: Array<RailStepData>) => string;
27
+ declare const RailMini: ({ className, steps, ariaLabel, showSummary }: RailMiniProps) => React.JSX.Element | null;
24
28
  export { RailMini };
25
29
  export type { RailMiniProps };
@@ -1,17 +1,6 @@
1
1
  import React from "react";
2
2
  import "./index.css";
3
- import type { RailLeaf, RailMode, RailStepData } from "./types";
4
- /**
5
- * RailStep — o cartao de uma etapa.
6
- *
7
- * E o mesmo cartao nos dois modos: no `edit` ele mostra a barra de ordenacao e
8
- * o slot de configuracao; no `run` ele mostra o estado e as acoes. Nada de
9
- * duas arvores: se construir e acompanhar exigissem componentes diferentes, o
10
- * desenho teria falhado.
11
- *
12
- * Etapa que nao disparou fica translucida, mas o MOTIVO fica fora do cartao,
13
- * em contraste cheio: e a informacao que o analista precisa ler.
14
- */
3
+ import type { RailLeaf, RailMode, RailStepData, RailTone } from "./types";
15
4
  type RailStepProps = {
16
5
  id?: string;
17
6
  className?: string;
@@ -40,6 +29,12 @@ type RailStepProps = {
40
29
  onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
41
30
  onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
42
31
  };
32
+ /** Ponto de 6px + texto: o unico jeito de dizer estado dentro do cartao. */
33
+ declare const StatusDot: ({ label, tone, className, }: {
34
+ label: string;
35
+ tone: RailTone;
36
+ className?: string;
37
+ }) => React.JSX.Element;
43
38
  declare const RailStep: React.ForwardRefExoticComponent<RailStepProps & React.RefAttributes<HTMLDivElement>>;
44
- export { RailStep };
39
+ export { RailStep, StatusDot as RailStatusDot };
45
40
  export type { RailStepProps };
@@ -2,5 +2,6 @@ export * from "./Rail";
2
2
  export * from "./RailStep";
3
3
  export * from "./RailMini";
4
4
  export * from "./RailGate";
5
+ export * from "./RailInlineSelect";
5
6
  export * from "./labels";
6
7
  export * from "./types";
@@ -1,25 +1,54 @@
1
- import type { RailDecision, RailGateCondition, RailStepKind, RailStepStatus } from "./types";
1
+ import type { RailDecision, RailGateCondition, RailStepData, RailStepKind, RailStepStatus, RailTone } from "./types";
2
2
  import type { StatusTagVariant } from "../StatusTag";
3
3
  /**
4
4
  * Vocabulario em portugues da esteira. Fica num arquivo so para que o rail, o
5
- * conector e o (futuro) modo frase leiam exatamente os mesmos rotulos: dois
6
- * vocabularios para o mesmo enum ja e um debito conhecido do gyra-operation.
5
+ * conector, a miniatura e o modo frase leiam exatamente os mesmos rotulos:
6
+ * dois vocabularios para o mesmo enum ja e um debito conhecido do
7
+ * gyra-operation.
7
8
  */
8
9
  export declare const KIND_LABEL: Record<RailStepKind, string>;
9
- /** Glifo do card GYR-1623: ◉ análise · ⊕ aprofundar · ✋ checkpoint · ⌘ vínculos. */
10
+ /** Glifo textual do card GYR-1623: ◉ análise · ⊕ aprofundar · ✋ checkpoint · ⌘ vínculos. */
10
11
  export declare const KIND_GLYPH: Record<RailStepKind, string>;
12
+ /**
13
+ * O que cada tipo FAZ, na voz da frase ("1. Analisa com X · 2. se aprovada,
14
+ * pede decisão do analista"). E o mesmo vocabulario do KIND_LABEL, conjugado.
15
+ */
16
+ export declare const KIND_SENTENCE: Record<RailStepKind, (subject?: string) => string>;
17
+ /** Frase curta da linha 2 do checkpoint quando o consumer nao manda `subtitle`. */
18
+ export declare const CHECKPOINT_HINT = "Pausa e pergunta ao analista";
11
19
  export declare const GATE_LABEL: Record<RailGateCondition, string>;
12
20
  export declare const GATE_DESCRIPTION: Record<RailGateCondition, string>;
13
21
  export declare const GATE_ORDER: Array<RailGateCondition>;
22
+ /** Estado da etapa, na voz do analista ("aguardando você", "não rodou"). */
14
23
  export declare const STATUS_LABEL: Record<RailStepStatus, string>;
15
24
  export declare const DECISION_LABEL: Record<RailDecision, string>;
25
+ export declare const DECISION_TONE: Record<RailDecision, RailTone>;
26
+ export declare const STATUS_TONE: Record<RailStepStatus, RailTone>;
27
+ /** Mantidos por compatibilidade com quem lia a pilula (StatusTag) da v1. */
16
28
  export declare const DECISION_VARIANT: Record<RailDecision, StatusTagVariant>;
17
29
  export declare const STATUS_VARIANT: Record<RailStepStatus, StatusTagVariant>;
18
30
  /**
19
- * O que a pilula de estado mostra: quando a etapa terminou e registrou uma
31
+ * O que o ponto de estado mostra: quando a etapa terminou e registrou uma
20
32
  * decisao, a decisao vence o "concluida" (e o que o analista quer ler).
21
33
  */
34
+ export declare const resolveStatusDot: (status?: RailStepStatus, decision?: RailDecision) => {
35
+ label: string;
36
+ tone: RailTone;
37
+ } | undefined;
38
+ /** Compatibilidade com a v1 (mesma regra, no formato do StatusTag). */
22
39
  export declare const resolveStatusTag: (status?: RailStepStatus, decision?: RailDecision) => {
23
40
  title: string;
24
41
  variant: StatusTagVariant;
25
42
  } | undefined;
43
+ /**
44
+ * Modo frase: a esteira lida em uma linha, para a pessoa confirmar o que vai
45
+ * disparar antes de gastar dinheiro.
46
+ *
47
+ * "1. Analisa com PJ Essencial v4 · 2. se aprovada, pede decisão do
48
+ * analista · 3. se aprovada, deriva para sócios"
49
+ *
50
+ * A primeira etapa nunca tem conector. Nas demais, o conector vem do
51
+ * GATE_LABEL: "sempre" entra sem virgula ("2. sempre deriva para sócios"),
52
+ * as condicoes entram com virgula ("2. se aprovada, deriva para sócios").
53
+ */
54
+ export declare const railToSentence: (steps: Array<RailStepData>) => string;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  /**
3
- * Rail — vocabulario da esteira Gyra+.
3
+ * Rail, vocabulario da esteira Gyra+.
4
4
  *
5
5
  * O modelo espelha 1:1 o `OperationStep` do gyra-operation (kind + runIf +
6
6
  * order), de proposito: o construtor e o acompanhamento ao vivo leem o MESMO
@@ -9,7 +9,7 @@ import React from "react";
9
9
  /** edit = construtor. run = acompanhamento ao vivo. Mesma arvore. */
10
10
  export type RailMode = "edit" | "run";
11
11
  /** Os 4 tipos de etapa. Espelha `StepKind` do gyra-operation. */
12
- export type RailStepKind = "ANALYSIS" | "DEEPEN" | "CHECKPOINT" | "RELATIONSHIPS";
12
+ export type RailStepKind = "ANALYSIS" | "DEEPEN" | "CHECKPOINT" | "RELATIONSHIPS" | "RESULT" | "OFFER_REVIEW" | "COMMITTEE" | "AUTHORITY";
13
13
  /**
14
14
  * A condicao do conector: sempre avaliada contra a ULTIMA decisao registrada
15
15
  * na esteira. Espelha `Gate` do gyra-operation.
@@ -19,6 +19,8 @@ export type RailGateCondition = "ALWAYS" | "IF_APPROVED" | "IF_APPROVED_OR_ALERT
19
19
  export type RailStepStatus = "PENDING" | "RUNNING" | "WAITING" | "DONE" | "SKIPPED" | "ERROR";
20
20
  /** A decisao que a etapa registrou (nem toda etapa decide). */
21
21
  export type RailDecision = "APPROVED" | "ALERT" | "REPROVED";
22
+ /** Tom semantico de um ponto de estado (6px + texto). */
23
+ export type RailTone = "neutral" | "info" | "success" | "warning" | "danger";
22
24
  /**
23
25
  * Folha de uma etapa de Vinculos: um relatorio derivado (socio, 1o nivel,
24
26
  * filial...). Cada folha e linkavel.
@@ -28,7 +30,7 @@ export type RailLeaf = {
28
30
  title: string;
29
31
  /** Ex: "Socia · Socio PF v3". */
30
32
  subtitle?: string;
31
- /** CPF/CNPJ. Renderizado em IBM Plex Mono. */
33
+ /** CPF/CNPJ. Renderizado com tabular-nums. */
32
34
  document?: string;
33
35
  status?: RailStepStatus;
34
36
  decision?: RailDecision;
@@ -37,13 +39,52 @@ export type RailLeaf = {
37
39
  onOpen?: () => void;
38
40
  disabled?: boolean;
39
41
  };
40
- /** Uma etapa da esteira (o dado; o componente que a desenha se chama RailStep). */
42
+ /**
43
+ * Uma etapa da esteira (o dado; o componente que a desenha se chama RailStep).
44
+ *
45
+ * Anatomia do cartao, nas duas linhas que ele tem:
46
+ * linha 1: glifo do tipo (chip de 24px na cor do tipo, tooltip com o nome
47
+ * do tipo) + `title`
48
+ * + `meta` (chips pequenos) e, a direita, o estado (run) ou as
49
+ * acoes de ordenar/remover (edit, so no hover).
50
+ * linha 2: `policyControl` (edit) ou `policyName` (run) para Analise e
51
+ * Aprofundar; `subtitle` para Vinculos (o resumo dos niveis) e para
52
+ * o Checkpoint (uma frase curta; default "Pausa e pergunta ao
53
+ * analista").
54
+ * O tipo NUNCA aparece como texto no cartao: so como glifo com tooltip. Quem
55
+ * precisa do nome do tipo em texto usa `KIND_LABEL` ou `railToSentence`.
56
+ */
41
57
  export type RailStepData = {
42
58
  id: string;
43
59
  kind: RailStepKind;
60
+ /** O nome que o usuario deu a etapa (default no consumer: nome da politica, "Checkpoint" ou "Vinculos"). */
44
61
  title: string;
45
- /** Politica, camada, niveis de vinculo... */
62
+ /**
63
+ * Linha 2 quando a etapa nao e uma politica: o resumo dos vinculos
64
+ * ("Sócios · 1º nível · PF: Sócio PF v3") ou a frase do checkpoint. Em
65
+ * Analise/Aprofundar so aparece se nao houver `policyControl`/`policyName`.
66
+ */
46
67
  subtitle?: React.ReactNode;
68
+ /**
69
+ * O nome da politica desta etapa (Analise/Aprofundar). No modo run vira a
70
+ * linha 2; no modo frase (`railToSentence`) vira "analisa com {policyName}".
71
+ */
72
+ policyName?: string;
73
+ /**
74
+ * Seletor inline da politica, injetado pelo consumer no modo edit (ex: um
75
+ * `RailInlineSelect` abrindo o picker). Ocupa a linha 2 no lugar do
76
+ * `policyName`. Ignorado no modo run.
77
+ */
78
+ policyControl?: React.ReactNode;
79
+ /**
80
+ * O nome da etapa E o nome da politica (o caso default, e o mais comum).
81
+ * Nesse caso a politica NAO ganha uma linha propria: no modo edit o seletor
82
+ * inline sobe para a linha 1 e vira o proprio nome; no run, a linha 2 some.
83
+ * Sem isto o cartao imprimia a mesma string duas vezes, empilhada.
84
+ *
85
+ * Sem valor, o RailStep compara `title` com `policyName`.
86
+ */
87
+ policyIsTitle?: boolean;
47
88
  /**
48
89
  * A condicao do conector que fica ACIMA desta etapa. A primeira etapa da
49
90
  * esteira nao tem conector, entao o campo e ignorado nela.
@@ -56,11 +97,15 @@ export type RailStepData = {
56
97
  * contraste cheio: etapa pulada mostra o motivo a vista.
57
98
  */
58
99
  reason?: string;
59
- /** Chips/tags extras no header (camada, custo, tier...). */
100
+ /** Chips pequenos ao lado do nome (score, custo, camada...). */
60
101
  meta?: React.ReactNode;
61
- /** Acoes da etapa no modo run (ex: "Decidir agora"). */
102
+ /** Acoes da etapa no modo run (ex: o botao "Decidir" do checkpoint aguardando). */
62
103
  actions?: React.ReactNode;
63
- /** Slot livre de conteudo: seletor de politica, niveis, o que o consumer quiser. */
104
+ /**
105
+ * Slot livre abaixo das duas linhas. Mantido por compatibilidade; na v2 a
106
+ * configuracao da etapa mora na linha 2 (`policyControl`/`subtitle`), e
107
+ * este slot fica para o que nao cabe la.
108
+ */
64
109
  content?: React.ReactNode;
65
110
  /** Folhas (relatorios derivados). So faz sentido em RELATIONSHIPS. */
66
111
  leaves?: RailLeaf[];
@@ -1,64 +1,33 @@
1
- import "./index.css";
2
- import "react-toastify/dist/ReactToastify.css";
3
- import "react-modern-drawer/dist/index.css";
4
- import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
5
- import "react-datepicker/dist/react-datepicker.css";
6
- import "react-circular-progressbar/dist/styles.css";
7
- import "./components/AiParecer/index.css";
8
- import "./components/Avatar/index.css";
9
- import "./components/Button/index.css";
10
- import "./components/Card/index.css";
11
- import "./components/Chart/index.css";
12
- import "./components/ChatWidget/index.css";
13
- import "./components/Checkbox/index.css";
14
- import "./components/Col/index.css";
15
- import "./components/Collapse/index.css";
16
- import "./components/Divider/index.css";
17
- import "./components/DistributionBar/index.css";
18
- import "./components/Drawer/index.css";
19
- import "./components/DropdownMenu/index.css";
20
- import "./components/Empty/index.css";
21
- import "./components/Filter/index.css";
22
- import "./components/FloatingCard/index.css";
23
- import "./components/Form/index.css";
24
- import "./components/Gauge/index.css";
25
- import "./components/HoverCard/index.css";
26
- import "./components/Icon/index.css";
27
- import "./components/IconDisplay/index.css";
28
- import "./components/Information/index.css";
29
- import "./components/Input/index.css";
30
- import "./components/Layout/index.css";
31
- import "./components/List/index.css";
32
- import "./components/Loading/index.css";
33
- import "./components/Logo/index.css";
34
- import "./components/Menubar/index.css";
35
- import "./components/Modal/index.css";
36
- import "./components/Popover/index.css";
37
- import "./components/ProcessingChip/index.css";
38
- import "./components/Progress/index.css";
39
- import "./components/RadioGroup/index.css";
40
- import "./components/Rail/index.css";
41
- import "./components/RichInput/index.css";
42
- import "./components/Row/index.css";
43
- import "./components/ScoreBar/index.css";
44
- import "./components/SegmentedPicker/index.css";
45
- import "./components/SegmentedToggle/index.css";
46
- import "./components/Select/index.css";
47
- import "./components/Selector/index.css";
48
- import "./components/SelectTree/index.css";
49
- import "./components/PickerPopover/index.css";
50
- import "./components/MultiSelectPicker/index.css";
51
- import "./components/RuleSearchPicker/index.css";
52
- import "./components/OperatorPicker/index.css";
53
- import "./components/ContextMenu/index.css";
54
- import "./components/StatusTag/index.css";
55
- import "./components/Switch/index.css";
56
- import "./components/SyncChip/index.css";
57
- import "./components/Table/index.css";
58
- import "./components/Tabs/index.css";
59
- import "./components/Tag/index.css";
60
- import "./components/Tooltip/index.css";
61
- import "./components/Stepper/index.css";
62
- import "./components/TourGuide/index.css";
63
- import theme from "./theme";
64
- export default theme;
1
+ /**
2
+ * Preset do email "Análise financeira concluída" enviado quando o gyra-ai
3
+ * finaliza a extração de um balanço (feature Finsights — CU-86aherfzc).
4
+ *
5
+ * Esta é uma **camada fina de mapeamento de domínio** sobre o
6
+ * `buildEmail` genérico: recebe os campos crus que o gyra-ai produz
7
+ * (score, risk, recommendation, xlsxUrl, ...) e monta o `EmailLayoutInput`
8
+ * com as decisões visuais (cor do risco, tom do veredito, textos padrão).
9
+ *
10
+ * Pra criar outro preset (ex: `password-reset`, `report-finalized`,
11
+ * `batch-finalized`), criar uma pasta nova em `src/emails/<name>/` que
12
+ * importe `buildEmail` e exporte uma função `<name>Email(payload)` com a
13
+ * mesma assinatura: `{ subject, html }`.
14
+ */
15
+ export type BalanceSheetFinalizedPayload = {
16
+ firstName?: string;
17
+ companyName?: string;
18
+ score?: number | string;
19
+ risk?: string;
20
+ recommendation?: string;
21
+ xlsxUrl?: string;
22
+ reportUrl?: string;
23
+ };
24
+ /**
25
+ * Monta `{ subject, html }` do email "Análise financeira concluída" a
26
+ * partir do payload do gyra-ai (score, risco, recomendação, XLS, etc).
27
+ * Usado pelo gyra-communication (envio via SendGrid) e pelo Storybook
28
+ * (preview).
29
+ */
30
+ export declare function balanceSheetFinalizedEmail(payload: BalanceSheetFinalizedPayload): {
31
+ subject: string;
32
+ html: string;
33
+ };
@@ -10,7 +10,31 @@ type DrawerProps = {
10
10
  onClose?: () => void;
11
11
  direction?: "left" | "top" | "right" | "bottom";
12
12
  width?: number | string;
13
+ /**
14
+ * Escape fecha a gaveta (chama `onClose`). Default: true. Nao vale quando
15
+ * `closable` e false. Um Escape que outra camada ja consumiu (menu de
16
+ * Select, Popover, SegmentedPicker, Modal) nao chega aqui: cada camada
17
+ * fecha a sua e a gaveta fica.
18
+ */
19
+ closeOnEscape?: boolean;
20
+ /**
21
+ * Prende o Tab dentro do painel enquanto a gaveta esta aberta. Default:
22
+ * true. Conteudo portalado para o `body` (menu do Select, Popover,
23
+ * SegmentedPicker, Modal, outra gaveta) continua alcancavel: o trap so
24
+ * age quando o foco esta no painel ou na borda de um desses portais.
25
+ */
26
+ trapFocus?: boolean;
27
+ /**
28
+ * Ao abrir, move o foco para dentro do painel (o proprio painel, ou
29
+ * `initialFocusRef`) e o devolve a quem o tinha ao fechar. Default: true.
30
+ */
31
+ autoFocus?: boolean;
32
+ /** Elemento que recebe o foco inicial em vez do painel. */
33
+ initialFocusRef?: React.RefObject<HTMLElement>;
34
+ /** Rotulo acessivel quando `title` nao e texto ou nao existe. */
35
+ ariaLabel?: string;
13
36
  children?: React.ReactNode;
14
37
  };
15
- declare const Drawer: ({ className, title, subtitle, footer, visible, closable, onClose, direction, width, children, }: DrawerProps) => React.JSX.Element;
38
+ declare const Drawer: ({ className, title, subtitle, footer, visible, closable, onClose, direction, width, closeOnEscape, trapFocus, autoFocus, initialFocusRef, ariaLabel, children, }: DrawerProps) => React.JSX.Element;
16
39
  export { Drawer };
40
+ export type { DrawerProps };
@@ -19,7 +19,17 @@ type ModalProps = {
19
19
  };
20
20
  onClose?: () => void;
21
21
  width?: number;
22
+ /**
23
+ * Escape fecha o modal (chama `onClose`). Default: true. Nao vale com
24
+ * `loading`. As camadas descascam uma por vez: com a lista de um Select,
25
+ * um Popover ou qualquer gatilho `aria-expanded` aberto dentro do modal,
26
+ * o Escape e dessa camada e o modal fica; o Escape seguinte fecha o modal.
27
+ */
28
+ closeOnEscape?: boolean;
29
+ /** Rotulo acessivel quando `title` nao e texto ou nao existe. */
30
+ ariaLabel?: string;
22
31
  children?: React.ReactNode;
23
32
  };
24
- declare const Modal: ({ className, title, subtitle, footer, visible, loading, okButton, cancelButton, onClose, width, children, }: ModalProps) => React.JSX.Element;
33
+ declare const Modal: ({ className, title, subtitle, footer, visible, loading, okButton, cancelButton, onClose, width, closeOnEscape, ariaLabel, children, }: ModalProps) => React.JSX.Element;
25
34
  export { Modal };
35
+ export type { ModalProps };
@@ -13,6 +13,21 @@ type PopoverProps = {
13
13
  children?: React.ReactNode;
14
14
  onPointerDownOutside?: () => void;
15
15
  onOpenAutoFocus?: (event: Event) => void;
16
+ /**
17
+ * Avisa que o Radix quer abrir/fechar (clique no gatilho, clique fora,
18
+ * Escape). Sem isto, `visible` controlado nao tem como reagir ao Escape:
19
+ * o Radix fecha no vazio. Quem ja alterna `visible` no onClick do gatilho
20
+ * deve preferir `onEscapeKeyDown`, senao o clique alterna duas vezes.
21
+ */
22
+ onOpenChange?: (open: boolean) => void;
23
+ /**
24
+ * Escape com o foco dentro do conteudo. O evento chega ja consumido pelo
25
+ * Radix (`defaultPrevented`), entao uma gaveta ou modal por baixo nao
26
+ * fecha junto. Feche o `visible` aqui; o foco volta ao gatilho sozinho.
27
+ */
28
+ onEscapeKeyDown?: (event: KeyboardEvent) => void;
29
+ /** Ao fechar, antes de o foco voltar ao gatilho. `preventDefault` cancela a volta. */
30
+ onCloseAutoFocus?: (event: Event) => void;
16
31
  };
17
- declare const Popover: ({ id, className, align, side, sideOffset, collisionPadding, visible, content, children, onPointerDownOutside, onOpenAutoFocus, }: PopoverProps) => React.JSX.Element;
32
+ declare const Popover: ({ id, className, align, side, sideOffset, collisionPadding, visible, content, children, onPointerDownOutside, onOpenAutoFocus, onOpenChange, onEscapeKeyDown, onCloseAutoFocus, }: PopoverProps) => React.JSX.Element;
18
33
  export { Popover };