@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.
- package/dist/components/ContextMenu/index.js +1 -1
- package/dist/components/ContextMenu/index.js.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +25 -1
- package/dist/components/Drawer/index.js +7 -7
- package/dist/components/Drawer/index.js.map +1 -1
- package/dist/components/DropdownMenu/index.js +1 -1
- package/dist/components/DropdownMenu/index.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts +11 -1
- package/dist/components/Modal/index.js +9 -9
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/MultiSelectPicker/index.js +7 -7
- package/dist/components/MultiSelectPicker/index.js.map +1 -1
- package/dist/components/OperatorPicker/index.js +1 -1
- package/dist/components/OperatorPicker/index.js.map +1 -1
- package/dist/components/PickerPopover/index.js +1 -1
- package/dist/components/PickerPopover/index.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +16 -1
- package/dist/components/Popover/index.js +1 -1
- package/dist/components/Popover/index.js.map +1 -1
- package/dist/components/Rail/Rail.d.ts +19 -5
- package/dist/components/Rail/RailInlineSelect.d.ts +44 -0
- package/dist/components/Rail/RailMini.d.ts +11 -7
- package/dist/components/Rail/RailStep.d.ts +8 -13
- package/dist/components/Rail/index.d.ts +1 -0
- package/dist/components/Rail/index.js +7 -7
- package/dist/components/Rail/index.js.map +1 -1
- package/dist/components/Rail/labels.d.ts +34 -5
- package/dist/components/Rail/types.d.ts +53 -8
- package/dist/components/RuleSearchPicker/index.js +1 -1
- package/dist/components/RuleSearchPicker/index.js.map +1 -1
- package/dist/components/SegmentedPicker/index.js +1 -1
- package/dist/components/SegmentedPicker/index.js.map +1 -1
- package/dist/emails/balance-sheet-finalized/components/Drawer/Drawer.d.ts +25 -1
- package/dist/emails/balance-sheet-finalized/components/Modal/Modal.d.ts +11 -1
- package/dist/emails/balance-sheet-finalized/components/Popover/Popover.d.ts +16 -1
- package/dist/emails/balance-sheet-finalized/components/Rail/Rail.d.ts +19 -5
- package/dist/emails/balance-sheet-finalized/components/Rail/RailInlineSelect.d.ts +44 -0
- package/dist/emails/balance-sheet-finalized/components/Rail/RailMini.d.ts +11 -7
- package/dist/emails/balance-sheet-finalized/components/Rail/RailStep.d.ts +8 -13
- package/dist/emails/balance-sheet-finalized/components/Rail/index.d.ts +1 -0
- package/dist/emails/balance-sheet-finalized/components/Rail/labels.d.ts +34 -5
- package/dist/emails/balance-sheet-finalized/components/Rail/types.d.ts +53 -8
- package/dist/emails/balance-sheet-finalized/index.d.ts +33 -64
- package/dist/emails/email/components/Drawer/Drawer.d.ts +25 -1
- package/dist/emails/email/components/Modal/Modal.d.ts +11 -1
- package/dist/emails/email/components/Popover/Popover.d.ts +16 -1
- package/dist/emails/email/components/Rail/Rail.d.ts +19 -5
- package/dist/emails/email/components/Rail/RailInlineSelect.d.ts +44 -0
- package/dist/emails/email/components/Rail/RailMini.d.ts +11 -7
- package/dist/emails/email/components/Rail/RailStep.d.ts +8 -13
- package/dist/emails/email/components/Rail/index.d.ts +1 -0
- package/dist/emails/email/components/Rail/labels.d.ts +34 -5
- package/dist/emails/email/components/Rail/types.d.ts +53 -8
- package/dist/emails/email/index.d.ts +94 -64
- package/dist/index.css +769 -249
- package/package.json +1 -1
|
@@ -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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
|
5
|
+
* RailMini, a MESMA esteira, do tamanho de uma celula de lista.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
-
|
|
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 };
|
|
@@ -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
|
|
6
|
-
* vocabularios para o mesmo enum ja e um debito conhecido do
|
|
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
|
|
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
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
|
100
|
+
/** Chips pequenos ao lado do nome (score, custo, camada...). */
|
|
60
101
|
meta?: React.ReactNode;
|
|
61
|
-
/** Acoes da etapa no modo run (ex: "Decidir
|
|
102
|
+
/** Acoes da etapa no modo run (ex: o botao "Decidir" do checkpoint aguardando). */
|
|
62
103
|
actions?: React.ReactNode;
|
|
63
|
-
/**
|
|
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,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
import
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Email transacional genérico — Gyra+ design system.
|
|
3
|
+
*
|
|
4
|
+
* **FONTE DA VERDADE** dos layouts de email transacional. Usado por
|
|
5
|
+
* qualquer fluxo que precise mandar email no padrão visual Gyra+:
|
|
6
|
+
* - reset de senha, confirmação de cadastro, alertas internos
|
|
7
|
+
* - finalização de processamento (Finsights, batch-report, etc)
|
|
8
|
+
* - notificações de operação/crédito
|
|
9
|
+
* - convites, mudança de plano, alerts de billing...
|
|
10
|
+
*
|
|
11
|
+
* **TS puro**: sem React, sem DOM, sem browser globals. Apenas funções que
|
|
12
|
+
* retornam string HTML. Funciona igual em qualquer runtime Node (Nest) ou
|
|
13
|
+
* bundle browser (Next).
|
|
14
|
+
*
|
|
15
|
+
* **Email-safe**: tabelas + inline-style (clients ignoram <style> externo,
|
|
16
|
+
* flexbox e Material Symbols). Gradientes têm fallback sólido.
|
|
17
|
+
*
|
|
18
|
+
* Tokens visuais alinhados com gyra-design: azul #1256FF (acao/primary),
|
|
19
|
+
* roxo #7C4EFF (IA/parecer), neutrals Apple-gray, fonte Inter.
|
|
20
|
+
*
|
|
21
|
+
* **Como usar:**
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { buildEmail } from '@gyramais/gyra-design/dist/emails/email';
|
|
24
|
+
*
|
|
25
|
+
* const html = buildEmail({
|
|
26
|
+
* preheader: 'Senha redefinida com sucesso',
|
|
27
|
+
* greeting: 'Olá, Maria',
|
|
28
|
+
* title: 'Sua senha foi redefinida',
|
|
29
|
+
* paragraphs: ['Tudo certo. Você já pode entrar com a nova senha.'],
|
|
30
|
+
* buttons: [{ label: 'Entrar', url: 'https://app.gyramais.com/login' }],
|
|
31
|
+
* footerNote: 'Se não foi você, redefina novamente clicando em "Esqueci minha senha".',
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Pra emails recorrentes (mesmo conteudo, payload variavel), criar um
|
|
36
|
+
* **preset** em `src/emails/<preset-name>/index.ts` que monta o
|
|
37
|
+
* `EmailLayoutInput` a partir de campos de dominio e delega aqui. Ver
|
|
38
|
+
* `balance-sheet-finalized` como exemplo.
|
|
39
|
+
*/
|
|
40
|
+
export type EmailButton = {
|
|
41
|
+
label: string;
|
|
42
|
+
url: string;
|
|
43
|
+
/** primary = botão azul preenchido, secondary = outline. Default primary. */
|
|
44
|
+
variant?: 'primary' | 'secondary';
|
|
45
|
+
};
|
|
46
|
+
export type EmailHighlight = {
|
|
47
|
+
/** label pequeno em cima (ex: "Score", "Nivel de risco"). */
|
|
48
|
+
label: string;
|
|
49
|
+
/** valor grande em baixo (ex: "820", "Baixo"). */
|
|
50
|
+
value: string;
|
|
51
|
+
/** cor do valor (ex: cor do risco). Default: tinta padrao Apple-gray. */
|
|
52
|
+
color?: string;
|
|
53
|
+
};
|
|
54
|
+
/** Tom semantico do chip de veredito do bloco Parecer GYRA+IA. */
|
|
55
|
+
export type AiParecerTone = 'ok' | 'warn' | 'danger' | 'info';
|
|
56
|
+
export type EmailAiParecer = {
|
|
57
|
+
/** chip de veredito (ex: "Médio", "Consistente"). Opcional. */
|
|
58
|
+
verdict?: string;
|
|
59
|
+
verdictTone?: AiParecerTone;
|
|
60
|
+
/** corpo do parecer. */
|
|
61
|
+
text: string;
|
|
62
|
+
/** rodape do bloco (ex: "GYRA+IA · Confiança 96%"). Opcional. */
|
|
63
|
+
footer?: string;
|
|
64
|
+
};
|
|
65
|
+
export type EmailLayoutInput = {
|
|
66
|
+
/** Texto invisivel no preheader (preview no inbox). */
|
|
67
|
+
preheader?: string;
|
|
68
|
+
/** Linha curta acima do titulo (ex: "Olá, Maria"). */
|
|
69
|
+
greeting?: string;
|
|
70
|
+
/** Titulo principal (H1). */
|
|
71
|
+
title: string;
|
|
72
|
+
/** Paragrafos de corpo (sub-frases). */
|
|
73
|
+
paragraphs?: string[];
|
|
74
|
+
/** Cards lado-a-lado (1 a N). Largura dividida igualmente. */
|
|
75
|
+
highlights?: EmailHighlight[];
|
|
76
|
+
/** Bloco "Parecer GYRA+IA" (faixa roxa com chip + texto + rodape). */
|
|
77
|
+
aiParecer?: EmailAiParecer;
|
|
78
|
+
/** Botoes de acao. Multiplos viram lado-a-lado. */
|
|
79
|
+
buttons?: EmailButton[];
|
|
80
|
+
/** Texto pequeno no rodape do card (disclaimer, instrucoes extras). */
|
|
81
|
+
footerNote?: string;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Monta o HTML completo de um email no padrão Gyra+: logo no topo, card
|
|
85
|
+
* principal com greeting + título + parágrafos + highlights (chips lado a
|
|
86
|
+
* lado) + bloco "Parecer GYRA+IA" + botões, e rodapé padrão.
|
|
87
|
+
*
|
|
88
|
+
* Email-safe (tabelas + inline-style, sem flexbox, sem <style>). Funciona
|
|
89
|
+
* em Gmail, Outlook (Windows/Web/Mac), Apple Mail, Thunderbird, mobile.
|
|
90
|
+
*
|
|
91
|
+
* Todas as seções (greeting, paragraphs, highlights, aiParecer, buttons,
|
|
92
|
+
* footerNote) são **opcionais** — só `title` é obrigatório.
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildEmail(input: EmailLayoutInput): string;
|