@gyramais/gyra-design 0.2.48 → 0.2.49

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 (87) hide show
  1. package/dist/components/Button/Button.d.ts +7 -0
  2. package/dist/components/Button/index.js.map +1 -1
  3. package/dist/components/Card/Card.d.ts +1 -7
  4. package/dist/components/Card/index.js +6 -6
  5. package/dist/components/Card/index.js.map +1 -1
  6. package/dist/components/ContextMenu/index.js +1 -1
  7. package/dist/components/ContextMenu/index.js.map +1 -1
  8. package/dist/components/DropdownMenu/index.js +1 -1
  9. package/dist/components/DropdownMenu/index.js.map +1 -1
  10. package/dist/components/Empty/Empty.d.ts +1 -18
  11. package/dist/components/Empty/index.js +40 -2
  12. package/dist/components/Empty/index.js.map +1 -1
  13. package/dist/components/Filter/index.js.map +1 -1
  14. package/dist/components/FloatingCard/index.js +7 -7
  15. package/dist/components/FloatingCard/index.js.map +1 -1
  16. package/dist/components/List/index.js +40 -2
  17. package/dist/components/List/index.js.map +1 -1
  18. package/dist/components/Modal/index.js.map +1 -1
  19. package/dist/components/MultiSelectPicker/index.js +1 -1
  20. package/dist/components/MultiSelectPicker/index.js.map +1 -1
  21. package/dist/components/OperatorPicker/index.js +1 -1
  22. package/dist/components/OperatorPicker/index.js.map +1 -1
  23. package/dist/components/PickerPopover/index.js +1 -1
  24. package/dist/components/PickerPopover/index.js.map +1 -1
  25. package/dist/components/Popover/Popover.d.ts +3 -1
  26. package/dist/components/Popover/index.js +1 -1
  27. package/dist/components/Popover/index.js.map +1 -1
  28. package/dist/components/Rail/Rail.d.ts +59 -0
  29. package/dist/components/Rail/RailGate.d.ts +22 -0
  30. package/dist/components/Rail/RailMini.d.ts +25 -0
  31. package/dist/components/Rail/RailStep.d.ts +45 -0
  32. package/dist/components/Rail/index.d.ts +6 -0
  33. package/dist/components/Rail/index.js +45 -0
  34. package/dist/components/Rail/index.js.map +1 -0
  35. package/dist/components/Rail/labels.d.ts +25 -0
  36. package/dist/components/Rail/types.d.ts +75 -0
  37. package/dist/components/RuleSearchPicker/index.js +1 -1
  38. package/dist/components/RuleSearchPicker/index.js.map +1 -1
  39. package/dist/components/SegmentedPicker/SegmentedPicker.d.ts +7 -1
  40. package/dist/components/SegmentedPicker/index.js +2 -2
  41. package/dist/components/SegmentedPicker/index.js.map +1 -1
  42. package/dist/components/Switch/Switch.d.ts +7 -1
  43. package/dist/components/Switch/index.js +1 -1
  44. package/dist/components/Switch/index.js.map +1 -1
  45. package/dist/components/Table/Table.d.ts +1 -14
  46. package/dist/components/Table/index.js +40 -2
  47. package/dist/components/Table/index.js.map +1 -1
  48. package/dist/emails/balance-sheet-finalized/components/Button/Button.d.ts +7 -0
  49. package/dist/emails/balance-sheet-finalized/components/Card/Card.d.ts +1 -7
  50. package/dist/emails/balance-sheet-finalized/components/Empty/Empty.d.ts +1 -18
  51. package/dist/emails/balance-sheet-finalized/components/Popover/Popover.d.ts +3 -1
  52. package/dist/emails/balance-sheet-finalized/components/Rail/Rail.d.ts +59 -0
  53. package/dist/emails/balance-sheet-finalized/components/Rail/RailGate.d.ts +22 -0
  54. package/dist/emails/balance-sheet-finalized/components/Rail/RailMini.d.ts +25 -0
  55. package/dist/emails/balance-sheet-finalized/components/Rail/RailStep.d.ts +45 -0
  56. package/dist/emails/balance-sheet-finalized/components/Rail/index.d.ts +6 -0
  57. package/dist/emails/balance-sheet-finalized/components/Rail/labels.d.ts +25 -0
  58. package/dist/emails/balance-sheet-finalized/components/Rail/types.d.ts +75 -0
  59. package/dist/emails/balance-sheet-finalized/components/SegmentedPicker/SegmentedPicker.d.ts +7 -1
  60. package/dist/emails/balance-sheet-finalized/components/Switch/Switch.d.ts +7 -1
  61. package/dist/emails/balance-sheet-finalized/components/Table/Table.d.ts +1 -14
  62. package/dist/emails/balance-sheet-finalized/index.d.ts +1 -1
  63. package/dist/emails/email/components/Button/Button.d.ts +7 -0
  64. package/dist/emails/email/components/Card/Card.d.ts +1 -7
  65. package/dist/emails/email/components/Empty/Empty.d.ts +1 -18
  66. package/dist/emails/email/components/Popover/Popover.d.ts +3 -1
  67. package/dist/emails/email/components/Rail/Rail.d.ts +59 -0
  68. package/dist/emails/email/components/Rail/RailGate.d.ts +22 -0
  69. package/dist/emails/email/components/Rail/RailMini.d.ts +25 -0
  70. package/dist/emails/email/components/Rail/RailStep.d.ts +45 -0
  71. package/dist/emails/email/components/Rail/index.d.ts +6 -0
  72. package/dist/emails/email/components/Rail/labels.d.ts +25 -0
  73. package/dist/emails/email/components/Rail/types.d.ts +75 -0
  74. package/dist/emails/email/components/SegmentedPicker/SegmentedPicker.d.ts +7 -1
  75. package/dist/emails/email/components/Switch/Switch.d.ts +7 -1
  76. package/dist/emails/email/components/Table/Table.d.ts +1 -14
  77. package/dist/emails/email/index.d.ts +1 -1
  78. package/dist/index.css +859 -372
  79. package/package.json +1 -1
  80. package/dist/components/Skeleton/Skeleton.d.ts +0 -50
  81. package/dist/components/Skeleton/index.d.ts +0 -1
  82. package/dist/components/Skeleton/index.js +0 -7
  83. package/dist/components/Skeleton/index.js.map +0 -1
  84. package/dist/emails/balance-sheet-finalized/components/Skeleton/Skeleton.d.ts +0 -50
  85. package/dist/emails/balance-sheet-finalized/components/Skeleton/index.d.ts +0 -1
  86. package/dist/emails/email/components/Skeleton/Skeleton.d.ts +0 -50
  87. package/dist/emails/email/components/Skeleton/index.d.ts +0 -1
@@ -12,6 +12,13 @@ export type ButtonProps = {
12
12
  loading?: boolean;
13
13
  icon?: React.ReactNode;
14
14
  fab?: boolean;
15
+ /**
16
+ * Nome do botao. Botao SO de icone nao tem texto para o leitor de tela
17
+ * anunciar nem dica para o mouse: sem um destes dois, ele e anunciado como
18
+ * "botao" e nada mais. Os dois chegam ao `<button>` pelo spread.
19
+ */
20
+ title?: string;
21
+ "aria-label"?: string;
15
22
  onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
16
23
  children?: React.ReactNode;
17
24
  };
@@ -15,12 +15,6 @@ 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;
24
18
  collapsible?: boolean;
25
19
  defaultCollapsed?: boolean;
26
20
  collapsed?: boolean;
@@ -29,5 +23,5 @@ type CardProps = {
29
23
  headerContent?: React.ReactNode;
30
24
  children?: React.ReactNode;
31
25
  };
32
- declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, loadingContent, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
26
+ declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
33
27
  export { Card };
@@ -3,25 +3,8 @@ 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
- */
15
6
  icon?: React.ReactNode;
16
7
  text?: string;
17
8
  };
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;
9
+ declare const Empty: ({ id, className, icon, text, }: EmptyProps) => React.JSX.Element;
27
10
  export { Empty };
@@ -6,11 +6,13 @@ type PopoverProps = {
6
6
  align?: "start" | "center" | "end";
7
7
  side?: "top" | "right" | "bottom" | "left";
8
8
  sideOffset?: number;
9
+ /** Folga minima entre o popover e a borda da janela. Default: 8. */
10
+ collisionPadding?: number;
9
11
  visible?: boolean;
10
12
  content: React.ReactNode;
11
13
  children?: React.ReactNode;
12
14
  onPointerDownOutside?: () => void;
13
15
  onOpenAutoFocus?: (event: Event) => void;
14
16
  };
15
- declare const Popover: ({ id, className, align, side, sideOffset, visible, content, children, onPointerDownOutside, onOpenAutoFocus, }: PopoverProps) => React.JSX.Element;
17
+ declare const Popover: ({ id, className, align, side, sideOffset, collisionPadding, visible, content, children, onPointerDownOutside, onOpenAutoFocus, }: PopoverProps) => React.JSX.Element;
16
18
  export { Popover };
@@ -0,0 +1,59 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ import type { RailGateCondition, RailLeaf, RailMode, RailStepData } from "./types";
4
+ /**
5
+ * Rail — a esteira Gyra+: uma lista ordenada e vertical de etapas, com um
6
+ * conector condicional entre elas.
7
+ *
8
+ * Uma linha, nao um grafo: le de cima para baixo na mesma ordem em que a
9
+ * decisao acontece. A referencia e o Atalhos da Apple, nao um editor de
10
+ * diagramas.
11
+ *
12
+ * Dois modos, uma arvore so:
13
+ * - `edit`: inserir etapa entre etapas, trocar a condicao do conector,
14
+ * reordenar.
15
+ * - `run`: a mesma linha com estado por etapa. Etapa que nao disparou fica
16
+ * translucida com o motivo a vista.
17
+ *
18
+ * Teclado: a esteira e UM ponto de tabulacao (roving tabindex). Setas
19
+ * cima/baixo andam entre etapas, Home/End vao para a primeira/ultima, e
20
+ * Alt+setas reordenam no modo edit. Todo controle dentro da etapa (conector,
21
+ * abrir relatorio, remover, folhas) e um botao ou link de verdade.
22
+ */
23
+ type RailProps = {
24
+ id?: string;
25
+ className?: string;
26
+ /** Default: "edit". */
27
+ mode?: RailMode;
28
+ steps: Array<RailStepData>;
29
+ /** Rotulo acessivel da lista. Default: "Esteira". */
30
+ ariaLabel?: string;
31
+ /** Etapa em foco na execucao ao vivo (modo run). */
32
+ activeStepId?: string;
33
+ /** Etapa selecionada no construtor (modo edit). */
34
+ selectedStepId?: string;
35
+ /** Condicoes oferecidas nos conectores. Default: as quatro. */
36
+ gateOptions?: Array<RailGateCondition>;
37
+ /** Folhas abertas (controlado). Sem isto, a expansao e interna. */
38
+ expandedStepIds?: Array<string>;
39
+ /** Folhas abertas na primeira renderizacao (nao controlado). */
40
+ defaultExpandedStepIds?: Array<string>;
41
+ /** Rotulo do botao que acrescenta etapa no fim. Default: "Adicionar etapa". */
42
+ addLabel?: string;
43
+ /** Texto da esteira vazia. */
44
+ emptyText?: string;
45
+ onSelectStep?: (step: RailStepData) => void;
46
+ onOpenStep?: (step: RailStepData) => void;
47
+ onOpenLeaf?: (leaf: RailLeaf, step: RailStepData) => void;
48
+ /** Trocar a condicao do conector que fica ACIMA da etapa `stepId`. */
49
+ onChangeGate?: (stepId: string, condition: RailGateCondition) => void;
50
+ /** Inserir etapa na posicao `index` (0 = antes da primeira). */
51
+ onInsertStep?: (index: number) => void;
52
+ onRemoveStep?: (step: RailStepData) => void;
53
+ /** Reordenar. `toIndex` ja vem calculado e dentro dos limites. */
54
+ onMoveStep?: (step: RailStepData, direction: "up" | "down", toIndex: number) => void;
55
+ onExpandStep?: (stepId: string, expanded: boolean) => void;
56
+ };
57
+ declare const Rail: ({ id, className, mode, steps, ariaLabel, activeStepId, selectedStepId, gateOptions, expandedStepIds, defaultExpandedStepIds, addLabel, emptyText, onSelectStep, onOpenStep, onOpenLeaf, onChangeGate, onInsertStep, onRemoveStep, onMoveStep, onExpandStep, }: RailProps) => React.JSX.Element;
58
+ export { Rail };
59
+ export type { RailProps };
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ import type { RailGateCondition } from "./types";
4
+ type RailGateState = "default" | "passed" | "blocked";
5
+ type RailGateProps = {
6
+ id?: string;
7
+ className?: string;
8
+ value?: RailGateCondition;
9
+ /** Quando falso, o conector e so leitura (modo run, ou etapa travada). */
10
+ editable?: boolean;
11
+ disabled?: boolean;
12
+ /** Quais condicoes oferecer. Default: as quatro, na ordem canonica. */
13
+ options?: Array<RailGateCondition>;
14
+ /** No modo run: se a condicao foi atendida, bloqueou, ou nem chegou a valer. */
15
+ state?: RailGateState;
16
+ /** Rotulo acessivel do grupo, ex: "Conector antes da etapa 2". */
17
+ ariaLabel?: string;
18
+ onChange?: (value: RailGateCondition) => void;
19
+ };
20
+ declare const RailGate: ({ id, className, value, editable, disabled, options, state, ariaLabel, onChange, }: RailGateProps) => React.JSX.Element;
21
+ export { RailGate };
22
+ export type { RailGateProps, RailGateState };
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ import type { RailStepData } from "./types";
4
+ /**
5
+ * RailMini — a MESMA esteira, do tamanho de uma linha de lista.
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.
12
+ *
13
+ * Nao e clicavel de proposito. Quem quer detalhe abre a linha; a miniatura e
14
+ * um indicador, e um alvo de clique dentro de outro alvo de clique so cria
15
+ * ambiguidade.
16
+ */
17
+ type RailMiniProps = {
18
+ className?: string;
19
+ steps: Array<RailStepData>;
20
+ /** Rotulo acessivel. Default: "Progresso da esteira". */
21
+ ariaLabel?: string;
22
+ };
23
+ declare const RailMini: ({ className, steps, ariaLabel }: RailMiniProps) => React.JSX.Element | null;
24
+ export { RailMini };
25
+ export type { RailMiniProps };
@@ -0,0 +1,45 @@
1
+ import React from "react";
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
+ */
15
+ type RailStepProps = {
16
+ id?: string;
17
+ className?: string;
18
+ step: RailStepData;
19
+ mode?: RailMode;
20
+ /** Posicao 1-based na esteira. */
21
+ index?: number;
22
+ /** Total de etapas, para o "Etapa 2 de 5" lido pelo leitor de tela. */
23
+ total?: number;
24
+ /** Etapa em foco na execucao ao vivo. */
25
+ active?: boolean;
26
+ /** Etapa selecionada no construtor. */
27
+ selected?: boolean;
28
+ /** Folhas visiveis. */
29
+ expanded?: boolean;
30
+ canMoveUp?: boolean;
31
+ canMoveDown?: boolean;
32
+ /** Roving tabindex: o Rail decide qual etapa esta na ordem de tabulacao. */
33
+ tabIndex?: number;
34
+ onExpand?: (expanded: boolean) => void;
35
+ onOpen?: () => void;
36
+ onSelect?: () => void;
37
+ onRemove?: () => void;
38
+ onMove?: (direction: "up" | "down") => void;
39
+ onOpenLeaf?: (leaf: RailLeaf) => void;
40
+ onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
41
+ onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
42
+ };
43
+ declare const RailStep: React.ForwardRefExoticComponent<RailStepProps & React.RefAttributes<HTMLDivElement>>;
44
+ export { RailStep };
45
+ export type { RailStepProps };
@@ -0,0 +1,6 @@
1
+ export * from "./Rail";
2
+ export * from "./RailStep";
3
+ export * from "./RailMini";
4
+ export * from "./RailGate";
5
+ export * from "./labels";
6
+ export * from "./types";
@@ -0,0 +1,25 @@
1
+ import type { RailDecision, RailGateCondition, RailStepKind, RailStepStatus } from "./types";
2
+ import type { StatusTagVariant } from "../StatusTag";
3
+ /**
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.
7
+ */
8
+ export declare const KIND_LABEL: Record<RailStepKind, string>;
9
+ /** Glifo do card GYR-1623: ◉ análise · ⊕ aprofundar · ✋ checkpoint · ⌘ vínculos. */
10
+ export declare const KIND_GLYPH: Record<RailStepKind, string>;
11
+ export declare const GATE_LABEL: Record<RailGateCondition, string>;
12
+ export declare const GATE_DESCRIPTION: Record<RailGateCondition, string>;
13
+ export declare const GATE_ORDER: Array<RailGateCondition>;
14
+ export declare const STATUS_LABEL: Record<RailStepStatus, string>;
15
+ export declare const DECISION_LABEL: Record<RailDecision, string>;
16
+ export declare const DECISION_VARIANT: Record<RailDecision, StatusTagVariant>;
17
+ export declare const STATUS_VARIANT: Record<RailStepStatus, StatusTagVariant>;
18
+ /**
19
+ * O que a pilula de estado mostra: quando a etapa terminou e registrou uma
20
+ * decisao, a decisao vence o "concluida" (e o que o analista quer ler).
21
+ */
22
+ export declare const resolveStatusTag: (status?: RailStepStatus, decision?: RailDecision) => {
23
+ title: string;
24
+ variant: StatusTagVariant;
25
+ } | undefined;
@@ -0,0 +1,75 @@
1
+ import React from "react";
2
+ /**
3
+ * Rail — vocabulario da esteira Gyra+.
4
+ *
5
+ * O modelo espelha 1:1 o `OperationStep` do gyra-operation (kind + runIf +
6
+ * order), de proposito: o construtor e o acompanhamento ao vivo leem o MESMO
7
+ * array. Quem consome so troca `mode`.
8
+ */
9
+ /** edit = construtor. run = acompanhamento ao vivo. Mesma arvore. */
10
+ export type RailMode = "edit" | "run";
11
+ /** Os 4 tipos de etapa. Espelha `StepKind` do gyra-operation. */
12
+ export type RailStepKind = "ANALYSIS" | "DEEPEN" | "CHECKPOINT" | "RELATIONSHIPS";
13
+ /**
14
+ * A condicao do conector: sempre avaliada contra a ULTIMA decisao registrada
15
+ * na esteira. Espelha `Gate` do gyra-operation.
16
+ */
17
+ export type RailGateCondition = "ALWAYS" | "IF_APPROVED" | "IF_APPROVED_OR_ALERT" | "IF_REPROVED";
18
+ /** Estado de execucao de uma etapa (so tem significado no modo run). */
19
+ export type RailStepStatus = "PENDING" | "RUNNING" | "WAITING" | "DONE" | "SKIPPED" | "ERROR";
20
+ /** A decisao que a etapa registrou (nem toda etapa decide). */
21
+ export type RailDecision = "APPROVED" | "ALERT" | "REPROVED";
22
+ /**
23
+ * Folha de uma etapa de Vinculos: um relatorio derivado (socio, 1o nivel,
24
+ * filial...). Cada folha e linkavel.
25
+ */
26
+ export type RailLeaf = {
27
+ id: string;
28
+ title: string;
29
+ /** Ex: "Socia · Socio PF v3". */
30
+ subtitle?: string;
31
+ /** CPF/CNPJ. Renderizado em IBM Plex Mono. */
32
+ document?: string;
33
+ status?: RailStepStatus;
34
+ decision?: RailDecision;
35
+ /** Quando presente, a folha vira ancora. Senao, botao com `onOpen`. */
36
+ href?: string;
37
+ onOpen?: () => void;
38
+ disabled?: boolean;
39
+ };
40
+ /** Uma etapa da esteira (o dado; o componente que a desenha se chama RailStep). */
41
+ export type RailStepData = {
42
+ id: string;
43
+ kind: RailStepKind;
44
+ title: string;
45
+ /** Politica, camada, niveis de vinculo... */
46
+ subtitle?: React.ReactNode;
47
+ /**
48
+ * A condicao do conector que fica ACIMA desta etapa. A primeira etapa da
49
+ * esteira nao tem conector, entao o campo e ignorado nela.
50
+ */
51
+ runIf?: RailGateCondition;
52
+ status?: RailStepStatus;
53
+ decision?: RailDecision;
54
+ /**
55
+ * Por que a etapa nao disparou. Renderizado FORA do cartao translucido, em
56
+ * contraste cheio: etapa pulada mostra o motivo a vista.
57
+ */
58
+ reason?: string;
59
+ /** Chips/tags extras no header (camada, custo, tier...). */
60
+ meta?: React.ReactNode;
61
+ /** Acoes da etapa no modo run (ex: "Decidir agora"). */
62
+ actions?: React.ReactNode;
63
+ /** Slot livre de conteudo: seletor de politica, niveis, o que o consumer quiser. */
64
+ content?: React.ReactNode;
65
+ /** Folhas (relatorios derivados). So faz sentido em RELATIONSHIPS. */
66
+ leaves?: RailLeaf[];
67
+ /** Rotulo da lista de folhas. Default: "Relatorios derivados". */
68
+ leavesLabel?: string;
69
+ /** Quando presente, o titulo vira link para o relatorio da etapa. */
70
+ href?: string;
71
+ /** Etapa desabilitada (nao editavel, nao clicavel). */
72
+ disabled?: boolean;
73
+ /** Trava so o conector desta etapa (ex: etapa herdada de um modelo). */
74
+ gateLocked?: boolean;
75
+ };
@@ -21,7 +21,13 @@ type SegmentedPickerProps = {
21
21
  /** primary: solid filled trigger; secondary: outlined/ghost trigger. */
22
22
  variant?: "primary" | "secondary";
23
23
  disabled?: boolean;
24
+ /**
25
+ * Alinhamento do menu em relacao ao gatilho. Default `start`: o menu e mais
26
+ * largo que a pilula, e alinhado pelo fim ele cresce para a ESQUERDA — de
27
+ * dentro de uma gaveta ou de um card, isso o joga para fora do container.
28
+ */
29
+ align?: "start" | "center" | "end";
24
30
  };
25
- declare const SegmentedPicker: ({ id, className, value, options, onChange, variant, disabled, }: SegmentedPickerProps) => React.JSX.Element | null;
31
+ declare const SegmentedPicker: ({ id, className, value, options, onChange, variant, disabled, align, }: SegmentedPickerProps) => React.JSX.Element | null;
26
32
  export { SegmentedPicker };
27
33
  export type { SegmentedPickerProps, SegmentedPickerOption };
@@ -5,7 +5,13 @@ type SwitchProps = {
5
5
  className?: string;
6
6
  disabled?: boolean;
7
7
  checked?: boolean;
8
+ /**
9
+ * Nome do controle. Um switch sozinho numa linha de tabela nao tem rotulo
10
+ * visivel nenhum: sem isto o leitor de tela anuncia so "alternar".
11
+ */
12
+ title?: string;
13
+ "aria-label"?: string;
8
14
  onCheckedChange?: (checked: boolean) => void;
9
15
  };
10
- declare const Switch: ({ id, className, disabled, checked, onCheckedChange, }: SwitchProps) => React.JSX.Element;
16
+ declare const Switch: ({ id, className, disabled, checked, onCheckedChange, ...props }: SwitchProps) => React.JSX.Element;
11
17
  export { Switch };
@@ -19,24 +19,11 @@ 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;
35
22
  onRowClick?: (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>, data: any) => void;
36
23
  /** Optional per-row className. Receives the row's data object and its
37
24
  * zero-based index. Useful for transient state highlights (e.g. a row
38
25
  * that just finished processing in real-time). */
39
26
  rowClassName?: (data: any, index: number) => string | undefined;
40
27
  };
41
- declare const Table: ({ id, className, height, type, columns, data, empty, headlesss, loading, loadingRows, onRowClick, rowClassName, }: TableProps) => React.JSX.Element;
28
+ declare const Table: ({ id, className, height, type, columns, data, empty, headlesss, onRowClick, rowClassName, }: TableProps) => React.JSX.Element;
42
29
  export { Table };
@@ -37,6 +37,7 @@ import "./components/Popover/index.css";
37
37
  import "./components/ProcessingChip/index.css";
38
38
  import "./components/Progress/index.css";
39
39
  import "./components/RadioGroup/index.css";
40
+ import "./components/Rail/index.css";
40
41
  import "./components/RichInput/index.css";
41
42
  import "./components/Row/index.css";
42
43
  import "./components/ScoreBar/index.css";
@@ -45,7 +46,6 @@ import "./components/SegmentedToggle/index.css";
45
46
  import "./components/Select/index.css";
46
47
  import "./components/Selector/index.css";
47
48
  import "./components/SelectTree/index.css";
48
- import "./components/Skeleton/index.css";
49
49
  import "./components/PickerPopover/index.css";
50
50
  import "./components/MultiSelectPicker/index.css";
51
51
  import "./components/RuleSearchPicker/index.css";
@@ -12,6 +12,13 @@ export type ButtonProps = {
12
12
  loading?: boolean;
13
13
  icon?: React.ReactNode;
14
14
  fab?: boolean;
15
+ /**
16
+ * Nome do botao. Botao SO de icone nao tem texto para o leitor de tela
17
+ * anunciar nem dica para o mouse: sem um destes dois, ele e anunciado como
18
+ * "botao" e nada mais. Os dois chegam ao `<button>` pelo spread.
19
+ */
20
+ title?: string;
21
+ "aria-label"?: string;
15
22
  onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
16
23
  children?: React.ReactNode;
17
24
  };
@@ -15,12 +15,6 @@ 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;
24
18
  collapsible?: boolean;
25
19
  defaultCollapsed?: boolean;
26
20
  collapsed?: boolean;
@@ -29,5 +23,5 @@ type CardProps = {
29
23
  headerContent?: React.ReactNode;
30
24
  children?: React.ReactNode;
31
25
  };
32
- declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, loadingContent, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
26
+ declare const Card: ({ id, type, className, title, subtitle, media, disabled, loading, collapsible, defaultCollapsed, collapsed, onCollapse, onClick, headerContent, children, }: CardProps) => React.JSX.Element;
33
27
  export { Card };
@@ -3,25 +3,8 @@ 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
- */
15
6
  icon?: React.ReactNode;
16
7
  text?: string;
17
8
  };
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;
9
+ declare const Empty: ({ id, className, icon, text, }: EmptyProps) => React.JSX.Element;
27
10
  export { Empty };
@@ -6,11 +6,13 @@ type PopoverProps = {
6
6
  align?: "start" | "center" | "end";
7
7
  side?: "top" | "right" | "bottom" | "left";
8
8
  sideOffset?: number;
9
+ /** Folga minima entre o popover e a borda da janela. Default: 8. */
10
+ collisionPadding?: number;
9
11
  visible?: boolean;
10
12
  content: React.ReactNode;
11
13
  children?: React.ReactNode;
12
14
  onPointerDownOutside?: () => void;
13
15
  onOpenAutoFocus?: (event: Event) => void;
14
16
  };
15
- declare const Popover: ({ id, className, align, side, sideOffset, visible, content, children, onPointerDownOutside, onOpenAutoFocus, }: PopoverProps) => React.JSX.Element;
17
+ declare const Popover: ({ id, className, align, side, sideOffset, collisionPadding, visible, content, children, onPointerDownOutside, onOpenAutoFocus, }: PopoverProps) => React.JSX.Element;
16
18
  export { Popover };
@@ -0,0 +1,59 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ import type { RailGateCondition, RailLeaf, RailMode, RailStepData } from "./types";
4
+ /**
5
+ * Rail — a esteira Gyra+: uma lista ordenada e vertical de etapas, com um
6
+ * conector condicional entre elas.
7
+ *
8
+ * Uma linha, nao um grafo: le de cima para baixo na mesma ordem em que a
9
+ * decisao acontece. A referencia e o Atalhos da Apple, nao um editor de
10
+ * diagramas.
11
+ *
12
+ * Dois modos, uma arvore so:
13
+ * - `edit`: inserir etapa entre etapas, trocar a condicao do conector,
14
+ * reordenar.
15
+ * - `run`: a mesma linha com estado por etapa. Etapa que nao disparou fica
16
+ * translucida com o motivo a vista.
17
+ *
18
+ * Teclado: a esteira e UM ponto de tabulacao (roving tabindex). Setas
19
+ * cima/baixo andam entre etapas, Home/End vao para a primeira/ultima, e
20
+ * Alt+setas reordenam no modo edit. Todo controle dentro da etapa (conector,
21
+ * abrir relatorio, remover, folhas) e um botao ou link de verdade.
22
+ */
23
+ type RailProps = {
24
+ id?: string;
25
+ className?: string;
26
+ /** Default: "edit". */
27
+ mode?: RailMode;
28
+ steps: Array<RailStepData>;
29
+ /** Rotulo acessivel da lista. Default: "Esteira". */
30
+ ariaLabel?: string;
31
+ /** Etapa em foco na execucao ao vivo (modo run). */
32
+ activeStepId?: string;
33
+ /** Etapa selecionada no construtor (modo edit). */
34
+ selectedStepId?: string;
35
+ /** Condicoes oferecidas nos conectores. Default: as quatro. */
36
+ gateOptions?: Array<RailGateCondition>;
37
+ /** Folhas abertas (controlado). Sem isto, a expansao e interna. */
38
+ expandedStepIds?: Array<string>;
39
+ /** Folhas abertas na primeira renderizacao (nao controlado). */
40
+ defaultExpandedStepIds?: Array<string>;
41
+ /** Rotulo do botao que acrescenta etapa no fim. Default: "Adicionar etapa". */
42
+ addLabel?: string;
43
+ /** Texto da esteira vazia. */
44
+ emptyText?: string;
45
+ onSelectStep?: (step: RailStepData) => void;
46
+ onOpenStep?: (step: RailStepData) => void;
47
+ onOpenLeaf?: (leaf: RailLeaf, step: RailStepData) => void;
48
+ /** Trocar a condicao do conector que fica ACIMA da etapa `stepId`. */
49
+ onChangeGate?: (stepId: string, condition: RailGateCondition) => void;
50
+ /** Inserir etapa na posicao `index` (0 = antes da primeira). */
51
+ onInsertStep?: (index: number) => void;
52
+ onRemoveStep?: (step: RailStepData) => void;
53
+ /** Reordenar. `toIndex` ja vem calculado e dentro dos limites. */
54
+ onMoveStep?: (step: RailStepData, direction: "up" | "down", toIndex: number) => void;
55
+ onExpandStep?: (stepId: string, expanded: boolean) => void;
56
+ };
57
+ declare const Rail: ({ id, className, mode, steps, ariaLabel, activeStepId, selectedStepId, gateOptions, expandedStepIds, defaultExpandedStepIds, addLabel, emptyText, onSelectStep, onOpenStep, onOpenLeaf, onChangeGate, onInsertStep, onRemoveStep, onMoveStep, onExpandStep, }: RailProps) => React.JSX.Element;
58
+ export { Rail };
59
+ export type { RailProps };
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ import type { RailGateCondition } from "./types";
4
+ type RailGateState = "default" | "passed" | "blocked";
5
+ type RailGateProps = {
6
+ id?: string;
7
+ className?: string;
8
+ value?: RailGateCondition;
9
+ /** Quando falso, o conector e so leitura (modo run, ou etapa travada). */
10
+ editable?: boolean;
11
+ disabled?: boolean;
12
+ /** Quais condicoes oferecer. Default: as quatro, na ordem canonica. */
13
+ options?: Array<RailGateCondition>;
14
+ /** No modo run: se a condicao foi atendida, bloqueou, ou nem chegou a valer. */
15
+ state?: RailGateState;
16
+ /** Rotulo acessivel do grupo, ex: "Conector antes da etapa 2". */
17
+ ariaLabel?: string;
18
+ onChange?: (value: RailGateCondition) => void;
19
+ };
20
+ declare const RailGate: ({ id, className, value, editable, disabled, options, state, ariaLabel, onChange, }: RailGateProps) => React.JSX.Element;
21
+ export { RailGate };
22
+ export type { RailGateProps, RailGateState };
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import "./index.css";
3
+ import type { RailStepData } from "./types";
4
+ /**
5
+ * RailMini — a MESMA esteira, do tamanho de uma linha de lista.
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.
12
+ *
13
+ * Nao e clicavel de proposito. Quem quer detalhe abre a linha; a miniatura e
14
+ * um indicador, e um alvo de clique dentro de outro alvo de clique so cria
15
+ * ambiguidade.
16
+ */
17
+ type RailMiniProps = {
18
+ className?: string;
19
+ steps: Array<RailStepData>;
20
+ /** Rotulo acessivel. Default: "Progresso da esteira". */
21
+ ariaLabel?: string;
22
+ };
23
+ declare const RailMini: ({ className, steps, ariaLabel }: RailMiniProps) => React.JSX.Element | null;
24
+ export { RailMini };
25
+ export type { RailMiniProps };
@@ -0,0 +1,45 @@
1
+ import React from "react";
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
+ */
15
+ type RailStepProps = {
16
+ id?: string;
17
+ className?: string;
18
+ step: RailStepData;
19
+ mode?: RailMode;
20
+ /** Posicao 1-based na esteira. */
21
+ index?: number;
22
+ /** Total de etapas, para o "Etapa 2 de 5" lido pelo leitor de tela. */
23
+ total?: number;
24
+ /** Etapa em foco na execucao ao vivo. */
25
+ active?: boolean;
26
+ /** Etapa selecionada no construtor. */
27
+ selected?: boolean;
28
+ /** Folhas visiveis. */
29
+ expanded?: boolean;
30
+ canMoveUp?: boolean;
31
+ canMoveDown?: boolean;
32
+ /** Roving tabindex: o Rail decide qual etapa esta na ordem de tabulacao. */
33
+ tabIndex?: number;
34
+ onExpand?: (expanded: boolean) => void;
35
+ onOpen?: () => void;
36
+ onSelect?: () => void;
37
+ onRemove?: () => void;
38
+ onMove?: (direction: "up" | "down") => void;
39
+ onOpenLeaf?: (leaf: RailLeaf) => void;
40
+ onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;
41
+ onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
42
+ };
43
+ declare const RailStep: React.ForwardRefExoticComponent<RailStepProps & React.RefAttributes<HTMLDivElement>>;
44
+ export { RailStep };
45
+ export type { RailStepProps };