@gyramais/gyra-design 0.2.52 → 0.2.53

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 (34) hide show
  1. package/README.md +4 -0
  2. package/dist/components/Card/Card.d.ts +7 -1
  3. package/dist/components/Card/index.js +6 -6
  4. package/dist/components/Card/index.js.map +1 -1
  5. package/dist/components/Empty/Empty.d.ts +18 -1
  6. package/dist/components/Empty/index.js +2 -40
  7. package/dist/components/Empty/index.js.map +1 -1
  8. package/dist/components/FloatingCard/index.js +7 -7
  9. package/dist/components/FloatingCard/index.js.map +1 -1
  10. package/dist/components/List/index.js +2 -40
  11. package/dist/components/List/index.js.map +1 -1
  12. package/dist/components/Rail/index.js +6 -6
  13. package/dist/components/Rail/index.js.map +1 -1
  14. package/dist/components/Skeleton/Skeleton.d.ts +50 -0
  15. package/dist/components/Skeleton/index.d.ts +1 -0
  16. package/dist/components/Skeleton/index.js +7 -0
  17. package/dist/components/Skeleton/index.js.map +1 -0
  18. package/dist/components/Table/Table.d.ts +14 -1
  19. package/dist/components/Table/index.js +2 -40
  20. package/dist/components/Table/index.js.map +1 -1
  21. package/dist/emails/balance-sheet-finalized/components/Card/Card.d.ts +7 -1
  22. package/dist/emails/balance-sheet-finalized/components/Empty/Empty.d.ts +18 -1
  23. package/dist/emails/balance-sheet-finalized/components/Skeleton/Skeleton.d.ts +50 -0
  24. package/dist/emails/balance-sheet-finalized/components/Skeleton/index.d.ts +1 -0
  25. package/dist/emails/balance-sheet-finalized/components/Table/Table.d.ts +14 -1
  26. package/dist/emails/balance-sheet-finalized/index.d.ts +65 -33
  27. package/dist/emails/email/components/Card/Card.d.ts +7 -1
  28. package/dist/emails/email/components/Empty/Empty.d.ts +18 -1
  29. package/dist/emails/email/components/Skeleton/Skeleton.d.ts +50 -0
  30. package/dist/emails/email/components/Skeleton/index.d.ts +1 -0
  31. package/dist/emails/email/components/Table/Table.d.ts +14 -1
  32. package/dist/emails/email/index.d.ts +65 -94
  33. package/dist/index.css +210 -32
  34. package/package.json +2 -2
@@ -15,6 +15,12 @@ type CardProps = {
15
15
  media?: React.ReactNode;
16
16
  disabled?: boolean;
17
17
  loading?: boolean;
18
+ /**
19
+ * Placeholder exibido no lugar do conteudo enquanto `loading`. O padrao e um
20
+ * skeleton de linhas de texto; passe um skeleton com a forma do conteudo real
21
+ * (grafico, tabela, lista) quando isso ajudar a evitar o pulo de layout.
22
+ */
23
+ loadingContent?: React.ReactNode;
18
24
  collapsible?: boolean;
19
25
  defaultCollapsed?: boolean;
20
26
  collapsed?: boolean;
@@ -23,5 +29,5 @@ type CardProps = {
23
29
  headerContent?: React.ReactNode;
24
30
  children?: React.ReactNode;
25
31
  };
26
- declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
32
+ declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, loadingContent, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
27
33
  export { Card };
@@ -3,8 +3,25 @@ import "./index.css";
3
3
  type EmptyProps = {
4
4
  id?: string;
5
5
  className?: string;
6
+ /**
7
+ * Ilustracao opcional. Use SO em zero state de pagina ou area inteira, do
8
+ * tipo "primeiro uso, ainda nao ha nada aqui", onde ela vem acompanhada de
9
+ * um titulo e de uma acao.
10
+ *
11
+ * Dentro de card ou de tabela de seção o padrao e' texto puro, sem grafico:
12
+ * a mesma ilustracao repetida dezenas de vezes na mesma pagina vira ruido e
13
+ * compete com o dado que importa. E' o que Stripe e Linear fazem em tabela.
14
+ */
6
15
  icon?: React.ReactNode;
7
16
  text?: string;
8
17
  };
9
- declare const Empty: ({ id, className, icon, text, }: EmptyProps) => React.JSX.Element;
18
+ /**
19
+ * Estado vazio: diz que nao ha nada ali, sem roubar a atencao do que ha.
20
+ *
21
+ * Discreto de proposito, em texto secundario. Uma lista vazia raramente e' o
22
+ * assunto da tela, e num relatorio de credito ela costuma ate ser boa noticia
23
+ * ("nenhuma sanção encontrada"), entao nao deve parecer erro nem falha de
24
+ * carregamento.
25
+ */
26
+ declare const Empty: ({ id, className, icon, text }: EmptyProps) => React.JSX.Element;
10
27
  export { Empty };
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ type SkeletonProps = {
4
+ id?: string;
5
+ className?: string;
6
+ /**
7
+ * Forma do placeholder:
8
+ * - `text`: linhas de texto (a ultima sai mais curta, como um paragrafo real)
9
+ * - `block`: retangulo cheio (grafico, mapa, tabela, imagem)
10
+ * - `circle`: avatar, badge, icone
11
+ */
12
+ variant?: "text" | "block" | "circle";
13
+ /** Quantidade de linhas. So vale para `variant="text"`. */
14
+ lines?: number;
15
+ /** Diametro do circulo. So vale para `variant="circle"`. */
16
+ size?: number;
17
+ width?: number | string;
18
+ height?: number | string;
19
+ /**
20
+ * Liga o brilho que varre o bloco. Padrao `true`.
21
+ *
22
+ * Passe `false` para o que esta ESPERANDO em vez de acontecendo (item na
23
+ * fila, seção que ainda nao comecou). O bloco parado marca o espaco sem
24
+ * prometer trabalho que nao esta em curso, e o movimento fica reservado
25
+ * para o que de fato esta sendo processado.
26
+ */
27
+ animated?: boolean;
28
+ /**
29
+ * Marca o bloco como decorativo: sai da arvore de acessibilidade e nao
30
+ * anuncia nada.
31
+ *
32
+ * Use quando VARIOS skeletons compoem um placeholder so (as celulas de uma
33
+ * tabela, as linhas de um feed) e quem anuncia o estado e' um elemento de
34
+ * status unico, fora deles. Sem isso, cada bloco vira uma live region e o
35
+ * leitor de tela repete "Carregando" uma vez por celula.
36
+ */
37
+ decorative?: boolean;
38
+ };
39
+ /**
40
+ * Placeholder de carregamento no formato do conteudo que esta chegando.
41
+ *
42
+ * Substitui o spinner: em vez de um indicador generico no meio da tela, o
43
+ * usuario ve a silhueta do que vai aparecer, entao o layout nao pula quando o
44
+ * dado chega. E o padrao dos apps modernos (Stripe, Linear, GitHub).
45
+ *
46
+ * A animacao e um brilho que varre o bloco, desligado sob
47
+ * `prefers-reduced-motion`.
48
+ */
49
+ declare const Skeleton: ({ id, className, variant, lines, size, width, height, animated, decorative, }: SkeletonProps) => React.JSX.Element;
50
+ export { Skeleton };
@@ -0,0 +1 @@
1
+ export * from "./Skeleton";
@@ -19,11 +19,24 @@ type TableProps = {
19
19
  text?: string;
20
20
  };
21
21
  headlesss?: boolean;
22
+ /**
23
+ * Estado de carregamento da tabela. O desenho depende de JA existir dado:
24
+ *
25
+ * - **sem linhas** (primeira carga): linhas de skeleton na forma das
26
+ * `columns`, entao a tabela nao muda de largura quando o dado chega.
27
+ * - **com linhas** (refetch por filtro, busca ou acao de linha): as linhas
28
+ * ficam, esmaecidas, com uma barra fina de progresso no topo. Apagar o
29
+ * que o usuario esta lendo para mostrar um placeholder e' pior do que
30
+ * deixar o dado velho a vista por um instante.
31
+ */
32
+ loading?: boolean;
33
+ /** Quantas linhas de skeleton desenhar na primeira carga. Padrao 5. */
34
+ loadingRows?: number;
22
35
  onRowClick?: (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>, data: any) => void;
23
36
  /** Optional per-row className. Receives the row's data object and its
24
37
  * zero-based index. Useful for transient state highlights (e.g. a row
25
38
  * that just finished processing in real-time). */
26
39
  rowClassName?: (data: any, index: number) => string | undefined;
27
40
  };
28
- declare const Table: ({ id, className, height, type, columns, data, empty, headlesss, onRowClick, rowClassName, }: TableProps) => React.JSX.Element;
41
+ declare const Table: ({ id, className, height, type, columns, data, empty, headlesss, loading, loadingRows, onRowClick, rowClassName, }: TableProps) => React.JSX.Element;
29
42
  export { Table };
@@ -1,33 +1,65 @@
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
- };
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/Skeleton/index.css";
50
+ import "./components/PickerPopover/index.css";
51
+ import "./components/MultiSelectPicker/index.css";
52
+ import "./components/RuleSearchPicker/index.css";
53
+ import "./components/OperatorPicker/index.css";
54
+ import "./components/ContextMenu/index.css";
55
+ import "./components/StatusTag/index.css";
56
+ import "./components/Switch/index.css";
57
+ import "./components/SyncChip/index.css";
58
+ import "./components/Table/index.css";
59
+ import "./components/Tabs/index.css";
60
+ import "./components/Tag/index.css";
61
+ import "./components/Tooltip/index.css";
62
+ import "./components/Stepper/index.css";
63
+ import "./components/TourGuide/index.css";
64
+ import theme from "./theme";
65
+ export default theme;
@@ -15,6 +15,12 @@ type CardProps = {
15
15
  media?: React.ReactNode;
16
16
  disabled?: boolean;
17
17
  loading?: boolean;
18
+ /**
19
+ * Placeholder exibido no lugar do conteudo enquanto `loading`. O padrao e um
20
+ * skeleton de linhas de texto; passe um skeleton com a forma do conteudo real
21
+ * (grafico, tabela, lista) quando isso ajudar a evitar o pulo de layout.
22
+ */
23
+ loadingContent?: React.ReactNode;
18
24
  collapsible?: boolean;
19
25
  defaultCollapsed?: boolean;
20
26
  collapsed?: boolean;
@@ -23,5 +29,5 @@ type CardProps = {
23
29
  headerContent?: React.ReactNode;
24
30
  children?: React.ReactNode;
25
31
  };
26
- declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
32
+ declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, loadingContent, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
27
33
  export { Card };
@@ -3,8 +3,25 @@ import "./index.css";
3
3
  type EmptyProps = {
4
4
  id?: string;
5
5
  className?: string;
6
+ /**
7
+ * Ilustracao opcional. Use SO em zero state de pagina ou area inteira, do
8
+ * tipo "primeiro uso, ainda nao ha nada aqui", onde ela vem acompanhada de
9
+ * um titulo e de uma acao.
10
+ *
11
+ * Dentro de card ou de tabela de seção o padrao e' texto puro, sem grafico:
12
+ * a mesma ilustracao repetida dezenas de vezes na mesma pagina vira ruido e
13
+ * compete com o dado que importa. E' o que Stripe e Linear fazem em tabela.
14
+ */
6
15
  icon?: React.ReactNode;
7
16
  text?: string;
8
17
  };
9
- declare const Empty: ({ id, className, icon, text, }: EmptyProps) => React.JSX.Element;
18
+ /**
19
+ * Estado vazio: diz que nao ha nada ali, sem roubar a atencao do que ha.
20
+ *
21
+ * Discreto de proposito, em texto secundario. Uma lista vazia raramente e' o
22
+ * assunto da tela, e num relatorio de credito ela costuma ate ser boa noticia
23
+ * ("nenhuma sanção encontrada"), entao nao deve parecer erro nem falha de
24
+ * carregamento.
25
+ */
26
+ declare const Empty: ({ id, className, icon, text }: EmptyProps) => React.JSX.Element;
10
27
  export { Empty };
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ type SkeletonProps = {
4
+ id?: string;
5
+ className?: string;
6
+ /**
7
+ * Forma do placeholder:
8
+ * - `text`: linhas de texto (a ultima sai mais curta, como um paragrafo real)
9
+ * - `block`: retangulo cheio (grafico, mapa, tabela, imagem)
10
+ * - `circle`: avatar, badge, icone
11
+ */
12
+ variant?: "text" | "block" | "circle";
13
+ /** Quantidade de linhas. So vale para `variant="text"`. */
14
+ lines?: number;
15
+ /** Diametro do circulo. So vale para `variant="circle"`. */
16
+ size?: number;
17
+ width?: number | string;
18
+ height?: number | string;
19
+ /**
20
+ * Liga o brilho que varre o bloco. Padrao `true`.
21
+ *
22
+ * Passe `false` para o que esta ESPERANDO em vez de acontecendo (item na
23
+ * fila, seção que ainda nao comecou). O bloco parado marca o espaco sem
24
+ * prometer trabalho que nao esta em curso, e o movimento fica reservado
25
+ * para o que de fato esta sendo processado.
26
+ */
27
+ animated?: boolean;
28
+ /**
29
+ * Marca o bloco como decorativo: sai da arvore de acessibilidade e nao
30
+ * anuncia nada.
31
+ *
32
+ * Use quando VARIOS skeletons compoem um placeholder so (as celulas de uma
33
+ * tabela, as linhas de um feed) e quem anuncia o estado e' um elemento de
34
+ * status unico, fora deles. Sem isso, cada bloco vira uma live region e o
35
+ * leitor de tela repete "Carregando" uma vez por celula.
36
+ */
37
+ decorative?: boolean;
38
+ };
39
+ /**
40
+ * Placeholder de carregamento no formato do conteudo que esta chegando.
41
+ *
42
+ * Substitui o spinner: em vez de um indicador generico no meio da tela, o
43
+ * usuario ve a silhueta do que vai aparecer, entao o layout nao pula quando o
44
+ * dado chega. E o padrao dos apps modernos (Stripe, Linear, GitHub).
45
+ *
46
+ * A animacao e um brilho que varre o bloco, desligado sob
47
+ * `prefers-reduced-motion`.
48
+ */
49
+ declare const Skeleton: ({ id, className, variant, lines, size, width, height, animated, decorative, }: SkeletonProps) => React.JSX.Element;
50
+ export { Skeleton };
@@ -0,0 +1 @@
1
+ export * from "./Skeleton";
@@ -19,11 +19,24 @@ type TableProps = {
19
19
  text?: string;
20
20
  };
21
21
  headlesss?: boolean;
22
+ /**
23
+ * Estado de carregamento da tabela. O desenho depende de JA existir dado:
24
+ *
25
+ * - **sem linhas** (primeira carga): linhas de skeleton na forma das
26
+ * `columns`, entao a tabela nao muda de largura quando o dado chega.
27
+ * - **com linhas** (refetch por filtro, busca ou acao de linha): as linhas
28
+ * ficam, esmaecidas, com uma barra fina de progresso no topo. Apagar o
29
+ * que o usuario esta lendo para mostrar um placeholder e' pior do que
30
+ * deixar o dado velho a vista por um instante.
31
+ */
32
+ loading?: boolean;
33
+ /** Quantas linhas de skeleton desenhar na primeira carga. Padrao 5. */
34
+ loadingRows?: number;
22
35
  onRowClick?: (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>, data: any) => void;
23
36
  /** Optional per-row className. Receives the row's data object and its
24
37
  * zero-based index. Useful for transient state highlights (e.g. a row
25
38
  * that just finished processing in real-time). */
26
39
  rowClassName?: (data: any, index: number) => string | undefined;
27
40
  };
28
- declare const Table: ({ id, className, height, type, columns, data, empty, headlesss, onRowClick, rowClassName, }: TableProps) => React.JSX.Element;
41
+ declare const Table: ({ id, className, height, type, columns, data, empty, headlesss, loading, loadingRows, onRowClick, rowClassName, }: TableProps) => React.JSX.Element;
29
42
  export { Table };
@@ -1,94 +1,65 @@
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;
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/Skeleton/index.css";
50
+ import "./components/PickerPopover/index.css";
51
+ import "./components/MultiSelectPicker/index.css";
52
+ import "./components/RuleSearchPicker/index.css";
53
+ import "./components/OperatorPicker/index.css";
54
+ import "./components/ContextMenu/index.css";
55
+ import "./components/StatusTag/index.css";
56
+ import "./components/Switch/index.css";
57
+ import "./components/SyncChip/index.css";
58
+ import "./components/Table/index.css";
59
+ import "./components/Tabs/index.css";
60
+ import "./components/Tag/index.css";
61
+ import "./components/Tooltip/index.css";
62
+ import "./components/Stepper/index.css";
63
+ import "./components/TourGuide/index.css";
64
+ import theme from "./theme";
65
+ export default theme;