@gyramais/gyra-design 0.2.50 → 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 (52) 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/ContextMenu/index.js +1 -1
  6. package/dist/components/ContextMenu/index.js.map +1 -1
  7. package/dist/components/DropdownMenu/index.js +1 -1
  8. package/dist/components/DropdownMenu/index.js.map +1 -1
  9. package/dist/components/Empty/Empty.d.ts +18 -1
  10. package/dist/components/Empty/index.js +2 -40
  11. package/dist/components/Empty/index.js.map +1 -1
  12. package/dist/components/FloatingCard/index.js +7 -7
  13. package/dist/components/FloatingCard/index.js.map +1 -1
  14. package/dist/components/List/index.js +2 -40
  15. package/dist/components/List/index.js.map +1 -1
  16. package/dist/components/MultiSelectPicker/index.js +7 -7
  17. package/dist/components/MultiSelectPicker/index.js.map +1 -1
  18. package/dist/components/OperatorPicker/index.js +1 -1
  19. package/dist/components/OperatorPicker/index.js.map +1 -1
  20. package/dist/components/Rail/Rail.d.ts +6 -1
  21. package/dist/components/Rail/index.js +6 -6
  22. package/dist/components/Rail/index.js.map +1 -1
  23. package/dist/components/Rail/types.d.ts +12 -2
  24. package/dist/components/RuleSearchPicker/index.js +1 -1
  25. package/dist/components/RuleSearchPicker/index.js.map +1 -1
  26. package/dist/components/SegmentedPicker/index.js +1 -1
  27. package/dist/components/SegmentedPicker/index.js.map +1 -1
  28. package/dist/components/Skeleton/Skeleton.d.ts +50 -0
  29. package/dist/components/Skeleton/index.d.ts +1 -0
  30. package/dist/components/Skeleton/index.js +7 -0
  31. package/dist/components/Skeleton/index.js.map +1 -0
  32. package/dist/components/Table/Table.d.ts +14 -1
  33. package/dist/components/Table/index.js +2 -40
  34. package/dist/components/Table/index.js.map +1 -1
  35. package/dist/emails/balance-sheet-finalized/components/Card/Card.d.ts +7 -1
  36. package/dist/emails/balance-sheet-finalized/components/Empty/Empty.d.ts +18 -1
  37. package/dist/emails/balance-sheet-finalized/components/Rail/Rail.d.ts +6 -1
  38. package/dist/emails/balance-sheet-finalized/components/Rail/types.d.ts +12 -2
  39. package/dist/emails/balance-sheet-finalized/components/Skeleton/Skeleton.d.ts +50 -0
  40. package/dist/emails/balance-sheet-finalized/components/Skeleton/index.d.ts +1 -0
  41. package/dist/emails/balance-sheet-finalized/components/Table/Table.d.ts +14 -1
  42. package/dist/emails/balance-sheet-finalized/index.d.ts +1 -0
  43. package/dist/emails/email/components/Card/Card.d.ts +7 -1
  44. package/dist/emails/email/components/Empty/Empty.d.ts +18 -1
  45. package/dist/emails/email/components/Rail/Rail.d.ts +6 -1
  46. package/dist/emails/email/components/Rail/types.d.ts +12 -2
  47. package/dist/emails/email/components/Skeleton/Skeleton.d.ts +50 -0
  48. package/dist/emails/email/components/Skeleton/index.d.ts +1 -0
  49. package/dist/emails/email/components/Table/Table.d.ts +14 -1
  50. package/dist/emails/email/index.d.ts +1 -0
  51. package/dist/index.css +353 -42
  52. package/package.json +2 -2
package/dist/index.css CHANGED
@@ -696,6 +696,12 @@ video {
696
696
  .w-\[360px\] {
697
697
  width: 360px;
698
698
  }
699
+ .w-\[420px\] {
700
+ width: 420px;
701
+ }
702
+ .w-\[560px\] {
703
+ width: 560px;
704
+ }
699
705
  .w-\[800px\] {
700
706
  width: 800px;
701
707
  }
@@ -779,6 +785,9 @@ video {
779
785
  .gap-4 {
780
786
  gap: 1rem;
781
787
  }
788
+ .gap-6 {
789
+ gap: 1.5rem;
790
+ }
782
791
  .gap-x-1 {
783
792
  -moz-column-gap: 0.25rem;
784
793
  column-gap: 0.25rem;
@@ -813,6 +822,9 @@ video {
813
822
  .rounded-\[6px\] {
814
823
  border-radius: 6px;
815
824
  }
825
+ .rounded-\[var\(--radius-lg\)\] {
826
+ border-radius: var(--radius-lg);
827
+ }
816
828
  .rounded-full {
817
829
  border-radius: 9999px;
818
830
  }
@@ -825,6 +837,9 @@ video {
825
837
  .border {
826
838
  border-width: 1px;
827
839
  }
840
+ .border-\[var\(--color-border-secondary\)\] {
841
+ border-color: var(--color-border-secondary);
842
+ }
828
843
  .bg-\[var\(--background-color\)\] {
829
844
  background-color: var(--background-color);
830
845
  }
@@ -849,6 +864,10 @@ video {
849
864
  --tw-bg-opacity: 1;
850
865
  background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));
851
866
  }
867
+ .bg-white {
868
+ --tw-bg-opacity: 1;
869
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
870
+ }
852
871
  .fill-current {
853
872
  fill: currentColor;
854
873
  }
@@ -948,6 +967,9 @@ video {
948
967
  .text-\[var\(--color-text-secondary\)\] {
949
968
  color: var(--color-text-secondary);
950
969
  }
970
+ .text-\[var\(--color-text-tertiary\)\] {
971
+ color: var(--color-text-tertiary);
972
+ }
951
973
  .text-\[var\(--primary-button-color\)\] {
952
974
  color: var(--primary-button-color);
953
975
  }
@@ -1149,6 +1171,11 @@ video {
1149
1171
  --gyra-blue-subtle: #F5F8FF;
1150
1172
  --gyra-teal: #1FB58A;
1151
1173
  --gyra-teal-light: #E6F7F1;
1174
+ /* Teal escurecido para texto/glifo sobre --gyra-teal-light (o brand teal
1175
+ puro da 2,36:1 ali e reprova em AA). Par medido: 4,77:1 sobre
1176
+ --gyra-teal-light e 5,29:1 sobre branco, na mesma faixa dos
1177
+ --status-*-text. */
1178
+ --gyra-teal-text: #0F7A60;
1152
1179
  --gyra-black: #1D1D1F;
1153
1180
 
1154
1181
  /* ---- Neutrals (Apple gray scale) ----------------------------------- */
@@ -4401,25 +4428,40 @@ h6 {
4401
4428
  padding-top: 1rem;
4402
4429
  }
4403
4430
  .gyramais-card.gyramais-card-loading .gyramais-card-content {
4404
- min-height: 4rem;
4431
+ min-height: 6rem;
4432
+ /* A regra de esconder abaixo usa `> *`, que casa so ELEMENTO. Um children
4433
+ que seja string/numero solto (ou vindo de fragmento) escaparia e
4434
+ apareceria ao lado do skeleton. Zerar a tipografia aqui colapsa esse texto;
4435
+ o placeholder restaura a sua logo em seguida. */
4436
+ font-size: 0;
4437
+ line-height: 0;
4405
4438
  }
4406
4439
 
4407
- .gyramais-card .gyramais-card-loading {
4408
- position: absolute;
4409
- top: 0px;
4410
- left: 0px;
4411
- z-index: 10;
4440
+ /* `gyramais-card-loading` (modificador da RAIZ) e `gyramais-card-placeholder`
4441
+ (o bloco desenhado) sao nomes distintos de proposito. Quando os dois eram a
4442
+ mesma classe, o seletor de descendente abaixo casava tambem a raiz de um
4443
+ <Card loading> ANINHADO dentro de outro Card, e aplicava o layout do
4444
+ placeholder no card inteiro.
4445
+
4446
+ Estado de carregando: o skeleton entra NO FLUXO, nao sobreposto. Assim ele
4447
+ e' quem dita a altura do card, e um `loadingContent` alto (grafico, tabela)
4448
+ nao fica cortado pela altura do conteudo vazio que ele esta substituindo.
4449
+ O conteudo real continua montado, so escondido pela regra abaixo, para nao
4450
+ perder estado no meio do carregamento. */
4451
+ .gyramais-card .gyramais-card-placeholder {
4412
4452
  display: flex;
4413
- height: 100%;
4414
4453
  width: 100%;
4415
- --tw-scale-x: 102%;
4416
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
4417
- align-items: center;
4418
- justify-content: center;
4419
- background-color: #ffffff80;
4420
- padding-top: 1rem;
4421
- --tw-backdrop-blur: blur(4px);
4422
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
4454
+ flex-direction: column;
4455
+ align-items: stretch;
4456
+ background-color: var(--color-surface-primary);
4457
+ font-size: var(--fs-body);
4458
+ line-height: var(--lh-normal);
4459
+ }
4460
+
4461
+ .gyramais-card.gyramais-card-loading
4462
+ .gyramais-card-content
4463
+ > *:not(.gyramais-card-placeholder) {
4464
+ display: none;
4423
4465
  }
4424
4466
 
4425
4467
  .gyramais-chart .recharts-legend-item {
@@ -5775,30 +5817,39 @@ h6 {
5775
5817
  }
5776
5818
 
5777
5819
  .gyramais-empty {
5778
- padding-top: 1rem;
5779
- padding-bottom: 1rem
5820
+ display: flex;
5821
+ flex-direction: column;
5822
+ align-items: center;
5823
+ justify-content: center;
5824
+ gap: 0.75rem;
5825
+ padding-left: 1rem;
5826
+ padding-right: 1rem;
5827
+ padding-top: 1.5rem;
5828
+ padding-bottom: 1.5rem
5780
5829
  }
5830
+
5781
5831
  .gyramais-empty .gyramais-empty-icon {
5782
- display: flex;
5783
- justify-content: center
5832
+ display: flex;
5833
+ justify-content: center
5784
5834
  }
5835
+
5836
+ /* O tamanho vai no SVG, nao no wrapper: icone do MUI declara o proprio
5837
+ `font-size`, entao `text-[40px]` no pai nao chega nele e ele encolhe para o
5838
+ padrao do MUI. */
5785
5839
  .gyramais-empty .gyramais-empty-icon svg {
5786
- font-size: 40px;
5787
- --tw-text-opacity: 1;
5788
- color: rgb(184 184 184 / var(--tw-text-opacity, 1))
5840
+ font-size: 40px;
5841
+ color: var(--color-text-quaternary)
5789
5842
  }
5843
+
5844
+ /* Texto secundario, nao preto: lista vazia informa, nao anuncia. Em preto ela
5845
+ pesava igual ao dado de verdade da tabela ao lado. */
5790
5846
  .gyramais-empty .gyramais-empty-text {
5791
- display: flex;
5792
- justify-content: center;
5793
- padding-top: 0.5rem;
5794
- padding-bottom: 0.5rem;
5795
- font-size: 0.875rem;
5796
- line-height: 1.25rem;
5797
- font-weight: 400;
5798
- line-height: 22px;
5799
- --tw-text-opacity: 1;
5800
- color: rgb(0 0 0 / var(--tw-text-opacity, 1))
5847
+ text-align: center;
5848
+ font-size: var(--fs-subheadline);
5849
+ line-height: var(--lh-normal);
5850
+ color: var(--color-text-tertiary)
5801
5851
  }
5852
+
5802
5853
  .gyramais-filter .gyramais-filter-button-container {
5803
5854
  position: relative;
5804
5855
  width: -moz-fit-content;
@@ -6329,6 +6380,17 @@ h6 {
6329
6380
  0;
6330
6381
  }
6331
6382
 
6383
+ /*
6384
+ * Text-area nao tem onde flutuar o rotulo: o placeholder subia para top-0 e
6385
+ * ficava em cima da primeira linha digitada. Com valor, some, como o
6386
+ * placeholder nativo.
6387
+ */
6388
+ .gyramais-input-controller.gyramais-input-text-area
6389
+ .gyramais-input-placeholder.gyramais-input-with-value {
6390
+ opacity:
6391
+ 0;
6392
+ }
6393
+
6332
6394
  .gyramais-input {
6333
6395
  min-height:
6334
6396
  40px;
@@ -7377,7 +7439,7 @@ h6 {
7377
7439
 
7378
7440
  Escala: tipografia 15 (nome) / 13 (linha 2) / 12 (estado, conector, motivo);
7379
7441
  espacamento em multiplos de 4: padding do cartao 12, gap entre linhas 2,
7380
- gap entre cartoes 8 (via o conector de 32px: 24 de pilula + 4 + 4).
7442
+ gap entre cartoes 20 (via o conector de 44px: 24 de pilula + 10 + 10).
7381
7443
 
7382
7444
  Armadilha do repositorio: o index.css global tem `* { outline: none
7383
7445
  !important }` e `*:focus { box-shadow: none !important }`. Anel de foco
@@ -7432,16 +7494,38 @@ h6 {
7432
7494
  display: none;
7433
7495
  }
7434
7496
 
7497
+ /* Linha do tempo (modo run): o trilho fica preenchido ate a etapa atual e
7498
+ apagado depois. E a mesma linha de 1px, so que agora ela diz onde a
7499
+ execucao esta sem precisar de mais nada na tela. */
7500
+ .gyramais-rail-run .gyramais-rail-item.is-tracked .gyramais-rail-connector::before,
7501
+ .gyramais-rail-run .gyramais-rail-item.is-tracked .gyramais-rail-step::before {
7502
+ background: var(--gyra-blue);
7503
+ }
7504
+ /* Na etapa atual o preenchimento para no marcador (23px, a mesma altura em
7505
+ que a primeira etapa comeca a desenhar o trilho). */
7506
+ .gyramais-rail-run .gyramais-rail-item.is-current .gyramais-rail-step::before {
7507
+ background: linear-gradient(
7508
+ to bottom,
7509
+ var(--gyra-blue) 23px,
7510
+ var(--color-border-secondary) 23px
7511
+ );
7512
+ }
7513
+ /* A primeira etapa ja desenha a partir do marcador: se ela e a atual, nao
7514
+ sobra nada preenchido abaixo dele. */
7515
+ .gyramais-rail-run .gyramais-rail-item:first-child.is-current .gyramais-rail-step::before {
7516
+ background: var(--color-border-secondary);
7517
+ }
7518
+
7435
7519
  /* ---- Conector (pilula de 24px alinhada ao trilho) ----------------------- */
7436
7520
 
7437
7521
  .gyramais-rail-connector {
7438
7522
  position: relative;
7439
7523
  display: flex;
7440
- min-height: 32px;
7524
+ min-height: 44px;
7441
7525
  align-items: center;
7442
7526
  gap: 6px;
7443
- padding-top: 4px;
7444
- padding-bottom: 4px;
7527
+ padding-top: 10px;
7528
+ padding-bottom: 10px;
7445
7529
  }
7446
7530
 
7447
7531
  .gyramais-rail-gate-editor {
@@ -7698,10 +7782,36 @@ h6 {
7698
7782
  background-color: var(--gyra-blue-subtle);
7699
7783
  }
7700
7784
 
7701
- /* Etapa que nao disparou: cartao translucido. O motivo NAO entra aqui,
7702
- fica fora do cartao, em contraste cheio. */
7785
+ /* Elevacao SO na etapa atual do modo run: sombra sutil e borda um tom mais
7786
+ forte. Todo o resto da esteira continua plano, senao a elevacao deixa de
7787
+ apontar para onde a execucao esta. */
7788
+ .gyramais-rail-run .gyramais-rail-step.is-active .gyramais-rail-step-card.gyramais-card {
7789
+ border-color: var(--color-border-strong);
7790
+ box-shadow: var(--shadow-dropdown);
7791
+ }
7792
+
7793
+ /* O unico cartao que pede acao humana: acento ambar na borda esquerda. Sem
7794
+ piscar e sem animacao; o botao primario "Decidir" vem do consumer. O
7795
+ padding esquerdo cai 2px para compensar os 2px extras da borda e o
7796
+ conteudo nao andar. */
7797
+ .gyramais-rail-run .gyramais-rail-step.is-waiting .gyramais-rail-step-card.gyramais-card {
7798
+ border-left-width: 3px;
7799
+ border-left-color: var(--color-warning);
7800
+ padding-left: 10px;
7801
+ }
7802
+
7803
+ /* Etapa que nao disparou: cartao apagado. A opacidade fica no CONTEUDO, nao no
7804
+ cartao inteiro: no cartao ela tambem apagava o glifo, e o #8E8E93 que vale
7805
+ 3,26:1 sobre o branco chegava a tela como #C7C7C9, 1,69:1. Medir o token nao
7806
+ e medir o pixel. Borda e conteudo recebem o apagamento explicito; o glifo
7807
+ fica de fora e chega inteiro. */
7703
7808
  .gyramais-rail-step.is-skipped .gyramais-rail-step-card.gyramais-card {
7704
7809
  border-style: dashed;
7810
+ border-color: var(--color-border-secondary);
7811
+ }
7812
+ .gyramais-rail-step.is-skipped .gyramais-rail-step-main,
7813
+ .gyramais-rail-step.is-skipped .gyramais-rail-step-side,
7814
+ .gyramais-rail-step.is-skipped .gyramais-rail-step-content {
7705
7815
  opacity: 0.5;
7706
7816
  }
7707
7817
  .gyramais-rail-step.is-disabled .gyramais-rail-step-card.gyramais-card {
@@ -7714,8 +7824,9 @@ h6 {
7714
7824
  gap: 10px;
7715
7825
  }
7716
7826
 
7717
- /* Glifo do tipo: chip neutro de 24px. O tipo vive aqui e no tooltip, nunca
7718
- como texto no cartao. */
7827
+ /* Glifo do tipo: chip de 24px. O tipo vive aqui e no tooltip, nunca como
7828
+ texto no cartao. O fundo neutro e o fallback; cada tipo pinta o seu logo
7829
+ abaixo. */
7719
7830
  .gyramais-rail-step-glyph {
7720
7831
  display: inline-flex;
7721
7832
  height: 24px;
@@ -7728,10 +7839,75 @@ h6 {
7728
7839
  color: var(--color-text-secondary);
7729
7840
  margin-top: -2px;
7730
7841
  }
7731
- .gyramais-rail-step.is-active .gyramais-rail-step-glyph {
7842
+
7843
+ /* Cor semantica por FAMILIA de consulta, nao por tipo. Duas cores, e as duas
7844
+ se distinguem de verdade:
7845
+ azul = analise (Analise e Aprofundar consultam o mesmo relatorio),
7846
+ teal = vinculos (consulta OUTROS documentos).
7847
+ A cor e REDUNDANTE de proposito: o glifo e o tooltip continuam carregando o
7848
+ tipo, entao quem nao distingue as cores nao perde informacao nenhuma.
7849
+
7850
+ Por que Aprofundar NAO ganha uma cor propria (intencional, medido): o par
7851
+ #EEF1FB x #EBF4FF tinha dE2000 = 2,7, no limiar de percepcao (JND ~2,3), ou
7852
+ seja, prometia quatro sinais e entregava tres. Nao ha no design system um
7853
+ quarto fundo diluido que fique a dE >= 8 dos outros dois sem roubar a cor de
7854
+ um estado (verde/vermelho). Entre inventar um sinal que ninguem enxerga e
7855
+ assumir a familia, assumimos a familia: uma camada E uma analise a mais
7856
+ sobre o mesmo relatorio, e o glifo (camadas x alvo) separa as duas.
7857
+ Medido (dE2000 entre os fundos): azul x teal 10,7; azul x neutro 3,8 (o
7858
+ neutro nao e um sinal, e a ausencia dele).
7859
+
7860
+ Por que o Checkpoint perdeu o ambar: no resto do produto ambar significa
7861
+ ESTADO ("aguardando"). Um checkpoint parado ficava ambar por dois motivos
7862
+ diferentes (tipo e estado) no mesmo cartao, sem como saber qual. O
7863
+ checkpoint tambem nao consulta fonte nenhuma, entao nao pertence a familia
7864
+ nenhuma: chip neutro, e o ambar volta a significar so estado.
7865
+ Contraste medido do glifo sobre o proprio chip: azul 4,90:1, teal 4,77:1,
7866
+ neutro 5,50:1 (todos acima de 4,5:1). */
7867
+ .gyramais-rail-step.is-analysis .gyramais-rail-step-glyph,
7868
+ .gyramais-rail-step.is-deepen .gyramais-rail-step-glyph {
7869
+ background-color: var(--gyra-blue-light);
7870
+ color: var(--gyra-blue);
7871
+ }
7872
+ /* O chip neutro do Checkpoint ganha CONTORNO, nao outra cor: sobre o cartao
7873
+ branco o fundo #F5F5F7 esta a dE2000 2,25 (no limiar de percepcao) e quase
7874
+ nao lia como chip. A borda #E8E8ED e uma aresta, nao um pigmento: resolve a
7875
+ leitura sem mexer nas distancias medidas entre os fundos (azul x neutro
7876
+ 3,8) nem no contraste do glifo (5,50:1). */
7877
+ .gyramais-rail-step.is-checkpoint .gyramais-rail-step-glyph {
7878
+ border-width: 1px;
7879
+ border-color: var(--color-border-secondary);
7880
+ background-color: var(--color-gray-50);
7881
+ color: var(--color-text-secondary);
7882
+ }
7883
+ .gyramais-rail-step.is-relationships .gyramais-rail-step-glyph {
7884
+ background-color: var(--gyra-teal-light);
7885
+ color: var(--gyra-teal-text);
7886
+ }
7887
+ .gyramais-rail-step.is-result .gyramais-rail-step-glyph,
7888
+ .gyramais-rail-step.is-offer_review .gyramais-rail-step-glyph,
7889
+ .gyramais-rail-step.is-authority .gyramais-rail-step-glyph {
7732
7890
  background-color: var(--gyra-blue-light);
7733
7891
  color: var(--gyra-blue);
7734
7892
  }
7893
+ .gyramais-rail-step.is-committee .gyramais-rail-step-glyph {
7894
+ color: #5945b8;
7895
+ background: #f0edff;
7896
+ }
7897
+ /* Etapa que nao rodou nao merece o pigmento do tipo: o cartao inteiro ja
7898
+ esta translucido e a cor cheia so competiria com quem rodou.
7899
+
7900
+ E ela tambem nao herda o chip NEUTRO: o neutro e o tipo Checkpoint, e o
7901
+ mesmo fundo em dois papeis fazia o cinza significar duas coisas. Aqui o chip
7902
+ simplesmente nao existe (sem fundo, sem contorno), que e o que a etapa pulada
7903
+ e: ausencia. O glifo assenta no branco do cartao e, com a opacidade fora do
7904
+ cartao (acima), o #8E8E93 chega a tela inteiro: 3,26:1 medido no pixel
7905
+ renderizado, e nao no token (WCAG 1.4.11 pede 3:1). */
7906
+ .gyramais-rail-step.is-skipped .gyramais-rail-step-glyph {
7907
+ border-width: 0px;
7908
+ background-color: transparent;
7909
+ color: var(--color-text-tertiary);
7910
+ }
7735
7911
 
7736
7912
  .gyramais-rail-step-main {
7737
7913
  display: flex;
@@ -7848,7 +8024,7 @@ h6 {
7848
8024
  padding-left: 6px;
7849
8025
  padding-right: 4px;
7850
8026
  font-size: var(--fs-subheadline);
7851
- font-weight: 500;
8027
+ font-weight: 400;
7852
8028
  line-height: 18px;
7853
8029
  color: var(--color-text-primary);
7854
8030
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
@@ -7857,6 +8033,20 @@ h6 {
7857
8033
  animation-duration: 150ms;
7858
8034
  font-family: inherit;
7859
8035
  }
8036
+ /* Mesmo papel, mesmo peso nos dois modos: a linha da politica e 13/400 no
8037
+ edit (aqui) e 13/400 no run (`.gyramais-rail-step-text`). O que diz que
8038
+ este e clicavel e o chevron e o hover, nao meio grau de peso. */
8039
+
8040
+ /* Quando o nome da etapa E a politica, o seletor sobe para a linha 1 e passa
8041
+ a ser o titulo: 15/600, a mesma tipografia de `.gyramais-rail-step-name`.
8042
+ Nao ha dois textos, ha um so, e ele e clicavel. */
8043
+ .gyramais-rail-step-line1.is-policy-title .gyramais-rail-inline-select {
8044
+ height: 20px;
8045
+ font-size: var(--fs-body);
8046
+ font-weight: 600;
8047
+ line-height: 20px;
8048
+ letter-spacing: var(--tracking-normal);
8049
+ }
7860
8050
  .gyramais-rail-inline-select:hover:not(:disabled) {
7861
8051
  background-color: var(--color-surface-active);
7862
8052
  }
@@ -9926,6 +10116,68 @@ h6 {
9926
10116
  left: 0.5rem !important
9927
10117
  }
9928
10118
 
10119
+ .gyramais-skeleton {
10120
+ position: relative;
10121
+ display: block;
10122
+ overflow: hidden;
10123
+ background-color: var(--color-gray-100);
10124
+ border-radius: var(--radius-sm);
10125
+ }
10126
+
10127
+ /* O brilho que varre o bloco. Pseudo-elemento para nao exigir um filho no DOM. */
10128
+ .gyramais-skeleton::after {
10129
+ position: absolute;
10130
+ inset: 0px;
10131
+ content: "";
10132
+ transform: translateX(-100%);
10133
+ background-image: linear-gradient(
10134
+ 90deg,
10135
+ rgba(255, 255, 255, 0) 0%,
10136
+ rgba(255, 255, 255, 0.7) 50%,
10137
+ rgba(255, 255, 255, 0) 100%
10138
+ );
10139
+ animation: gyramais-skeleton-shimmer 1.6s ease-in-out infinite;
10140
+ }
10141
+
10142
+ /* Parado de proposito: item na fila, nao em processamento. */
10143
+ .gyramais-skeleton.gyramais-skeleton-static::after {
10144
+ animation: none;
10145
+ }
10146
+
10147
+ .gyramais-skeleton.gyramais-skeleton-circle {
10148
+ flex-shrink: 0;
10149
+ border-radius: var(--radius-full);
10150
+ }
10151
+
10152
+ .gyramais-skeleton.gyramais-skeleton-block {
10153
+ border-radius: var(--radius-md);
10154
+ }
10155
+
10156
+ .gyramais-skeleton-lines {
10157
+ display: flex;
10158
+ width: 100%;
10159
+ flex-direction: column;
10160
+ gap: 0.75rem;
10161
+ }
10162
+
10163
+ .gyramais-skeleton-lines .gyramais-skeleton-line {
10164
+ height: 0.75rem;
10165
+ }
10166
+
10167
+ @keyframes gyramais-skeleton-shimmer {
10168
+ 100% {
10169
+ transform: translateX(100%);
10170
+ }
10171
+ }
10172
+
10173
+ /* Sem animacao para quem pediu menos movimento: o bloco continua marcando o
10174
+ espaco, so nao pulsa. */
10175
+ @media (prefers-reduced-motion: reduce) {
10176
+ .gyramais-skeleton::after {
10177
+ animation: none;
10178
+ }
10179
+ }
10180
+
9929
10181
  /* PickerPopover — shell base de popovers tipo command-palette / tag-picker. */
9930
10182
 
9931
10183
  /* Container override do Popover base — chrome flat com elevação de dropdown */
@@ -11362,6 +11614,65 @@ h6 {
11362
11614
  }
11363
11615
  }
11364
11616
 
11617
+ /* GYR-1646: refetch (troca de filtro, busca, acao de linha) NAO apaga as
11618
+ linhas. Elas ficam esmaecidas enquanto a barra fina no topo indica que algo
11619
+ esta vindo. Trocar dado visivel por placeholder e' regressao de UX: o
11620
+ usuario perde o que estava lendo por causa de uma acao dele mesmo. */
11621
+ .gyramais-table-container .gyramais-table-refetching {
11622
+ opacity: 0.45;
11623
+ transition: opacity 150ms ease-out;
11624
+ pointer-events: none;
11625
+ }
11626
+
11627
+ .gyramais-table-container .gyramais-table-refetching-bar {
11628
+ position: relative;
11629
+ height: 2px;
11630
+ overflow: hidden;
11631
+ background-color: var(--color-gray-100);
11632
+ }
11633
+
11634
+ .gyramais-table-container .gyramais-table-refetching-bar::after {
11635
+ content: "";
11636
+ position: absolute;
11637
+ top: 0;
11638
+ bottom: 0;
11639
+ width: 35%;
11640
+ background-color: var(--gyra-blue);
11641
+ animation: gyramais-table-refetching-slide 1.1s ease-in-out infinite;
11642
+ }
11643
+
11644
+ @keyframes gyramais-table-refetching-slide {
11645
+ 0% {
11646
+ left: -35%;
11647
+ }
11648
+ 100% {
11649
+ left: 100%;
11650
+ }
11651
+ }
11652
+
11653
+ /* Sem movimento para quem pediu menos: a barra continua marcando o estado. */
11654
+ @media (prefers-reduced-motion: reduce) {
11655
+ .gyramais-table-container .gyramais-table-refetching-bar::after {
11656
+ animation: none;
11657
+ width: 100%;
11658
+ opacity: 0.4;
11659
+ }
11660
+ }
11661
+
11662
+ /* Estado anunciado uma vez para leitor de tela, invisivel na tela. As celulas
11663
+ de skeleton sao decorativas (`aria-hidden`), entao nao repetem o anuncio. */
11664
+ .gyramais-table-container .gyramais-table-status {
11665
+ position: absolute;
11666
+ width: 1px;
11667
+ height: 1px;
11668
+ padding: 0;
11669
+ margin: -1px;
11670
+ overflow: hidden;
11671
+ clip: rect(0, 0, 0, 0);
11672
+ white-space: nowrap;
11673
+ border-width: 0;
11674
+ }
11675
+
11365
11676
  .gyramais-tabs {
11366
11677
 
11367
11678
  width: 100%
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gyramais/gyra-design",
3
- "version": "0.2.50",
3
+ "version": "0.2.53",
4
4
  "description": "Gyramais Design System",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -9,7 +9,7 @@
9
9
  "dist"
10
10
  ],
11
11
  "scripts": {
12
- "test": "npm run test",
12
+ "test": "echo \"gyra-design ainda nao tem suite de testes — nada foi executado\" && exit 1",
13
13
  "build-rollup": "node --max-old-space-size=8192 node_modules/rollup/dist/bin/rollup -c rollup.config.js",
14
14
  "build": "node ./scripts/build-prod.js",
15
15
  "storybook": "storybook dev -p 6006",