@gyramais/gyra-design 0.2.44 → 0.2.46

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 (32) hide show
  1. package/dist/components/Card/Card.d.ts +7 -1
  2. package/dist/components/Card/index.js +6 -6
  3. package/dist/components/Card/index.js.map +1 -1
  4. package/dist/components/Empty/Empty.d.ts +18 -1
  5. package/dist/components/Empty/index.js +2 -40
  6. package/dist/components/Empty/index.js.map +1 -1
  7. package/dist/components/FloatingCard/index.js +7 -7
  8. package/dist/components/FloatingCard/index.js.map +1 -1
  9. package/dist/components/List/index.js +2 -40
  10. package/dist/components/List/index.js.map +1 -1
  11. package/dist/components/Skeleton/Skeleton.d.ts +40 -0
  12. package/dist/components/Skeleton/index.d.ts +1 -0
  13. package/dist/components/Skeleton/index.js +7 -0
  14. package/dist/components/Skeleton/index.js.map +1 -0
  15. package/dist/components/Table/index.js +2 -40
  16. package/dist/components/Table/index.js.map +1 -1
  17. package/dist/emails/balance-sheet-finalized/components/Card/Card.d.ts +7 -1
  18. package/dist/emails/balance-sheet-finalized/components/Empty/Empty.d.ts +18 -1
  19. package/dist/emails/balance-sheet-finalized/components/Skeleton/Skeleton.d.ts +40 -0
  20. package/dist/emails/balance-sheet-finalized/components/Skeleton/index.d.ts +1 -0
  21. package/dist/emails/balance-sheet-finalized/index.d.ts +1 -0
  22. package/dist/emails/email/components/Card/Card.d.ts +7 -1
  23. package/dist/emails/email/components/Empty/Empty.d.ts +18 -1
  24. package/dist/emails/email/components/Skeleton/Skeleton.d.ts +40 -0
  25. package/dist/emails/email/components/Skeleton/index.d.ts +1 -0
  26. package/dist/emails/email/index.d.ts +1 -0
  27. package/dist/index.css +136 -37
  28. package/package.json +1 -1
  29. package/dist/components/ListingPage/ListingPage.d.ts +0 -21
  30. package/dist/components/ListingPage/index.d.ts +0 -1
  31. package/dist/components/ListingPage/index.js +0 -7
  32. package/dist/components/ListingPage/index.js.map +0 -1
@@ -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,40 @@
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
+ /**
30
+ * Placeholder de carregamento no formato do conteudo que esta chegando.
31
+ *
32
+ * Substitui o spinner: em vez de um indicador generico no meio da tela, o
33
+ * usuario ve a silhueta do que vai aparecer, entao o layout nao pula quando o
34
+ * dado chega. E o padrao dos apps modernos (Stripe, Linear, GitHub).
35
+ *
36
+ * A animacao e um brilho que varre o bloco, desligado sob
37
+ * `prefers-reduced-motion`.
38
+ */
39
+ declare const Skeleton: ({ id, className, variant, lines, size, width, height, animated, }: SkeletonProps) => React.JSX.Element;
40
+ export { Skeleton };
@@ -0,0 +1 @@
1
+ export * from "./Skeleton";
@@ -45,6 +45,7 @@ import "./components/SegmentedToggle/index.css";
45
45
  import "./components/Select/index.css";
46
46
  import "./components/Selector/index.css";
47
47
  import "./components/SelectTree/index.css";
48
+ import "./components/Skeleton/index.css";
48
49
  import "./components/PickerPopover/index.css";
49
50
  import "./components/MultiSelectPicker/index.css";
50
51
  import "./components/RuleSearchPicker/index.css";
@@ -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,40 @@
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
+ /**
30
+ * Placeholder de carregamento no formato do conteudo que esta chegando.
31
+ *
32
+ * Substitui o spinner: em vez de um indicador generico no meio da tela, o
33
+ * usuario ve a silhueta do que vai aparecer, entao o layout nao pula quando o
34
+ * dado chega. E o padrao dos apps modernos (Stripe, Linear, GitHub).
35
+ *
36
+ * A animacao e um brilho que varre o bloco, desligado sob
37
+ * `prefers-reduced-motion`.
38
+ */
39
+ declare const Skeleton: ({ id, className, variant, lines, size, width, height, animated, }: SkeletonProps) => React.JSX.Element;
40
+ export { Skeleton };
@@ -0,0 +1 @@
1
+ export * from "./Skeleton";
@@ -45,6 +45,7 @@ import "./components/SegmentedToggle/index.css";
45
45
  import "./components/Select/index.css";
46
46
  import "./components/Selector/index.css";
47
47
  import "./components/SelectTree/index.css";
48
+ import "./components/Skeleton/index.css";
48
49
  import "./components/PickerPopover/index.css";
49
50
  import "./components/MultiSelectPicker/index.css";
50
51
  import "./components/RuleSearchPicker/index.css";
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
  }
@@ -770,6 +776,15 @@ video {
770
776
  .gap-2 {
771
777
  gap: 0.5rem;
772
778
  }
779
+ .gap-3 {
780
+ gap: 0.75rem;
781
+ }
782
+ .gap-4 {
783
+ gap: 1rem;
784
+ }
785
+ .gap-6 {
786
+ gap: 1.5rem;
787
+ }
773
788
  .gap-x-1 {
774
789
  -moz-column-gap: 0.25rem;
775
790
  column-gap: 0.25rem;
@@ -804,6 +819,9 @@ video {
804
819
  .rounded-\[6px\] {
805
820
  border-radius: 6px;
806
821
  }
822
+ .rounded-\[var\(--radius-lg\)\] {
823
+ border-radius: var(--radius-lg);
824
+ }
807
825
  .rounded-full {
808
826
  border-radius: 9999px;
809
827
  }
@@ -816,6 +834,9 @@ video {
816
834
  .border {
817
835
  border-width: 1px;
818
836
  }
837
+ .border-\[var\(--color-border-secondary\)\] {
838
+ border-color: var(--color-border-secondary);
839
+ }
819
840
  .bg-\[var\(--background-color\)\] {
820
841
  background-color: var(--background-color);
821
842
  }
@@ -840,6 +861,10 @@ video {
840
861
  --tw-bg-opacity: 1;
841
862
  background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));
842
863
  }
864
+ .bg-white {
865
+ --tw-bg-opacity: 1;
866
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
867
+ }
843
868
  .fill-current {
844
869
  fill: currentColor;
845
870
  }
@@ -929,6 +954,9 @@ video {
929
954
  .text-\[var\(--color-text-secondary\)\] {
930
955
  color: var(--color-text-secondary);
931
956
  }
957
+ .text-\[var\(--color-text-tertiary\)\] {
958
+ color: var(--color-text-tertiary);
959
+ }
932
960
  .text-\[var\(--primary-button-color\)\] {
933
961
  color: var(--primary-button-color);
934
962
  }
@@ -4382,25 +4410,32 @@ h6 {
4382
4410
  padding-top: 1rem;
4383
4411
  }
4384
4412
  .gyramais-card.gyramais-card-loading .gyramais-card-content {
4385
- min-height: 4rem;
4413
+ min-height: 6rem;
4386
4414
  }
4387
4415
 
4388
- .gyramais-card .gyramais-card-loading {
4389
- position: absolute;
4390
- top: 0px;
4391
- left: 0px;
4392
- z-index: 10;
4416
+ /* `gyramais-card-loading` (modificador da RAIZ) e `gyramais-card-placeholder`
4417
+ (o bloco desenhado) sao nomes distintos de proposito. Quando os dois eram a
4418
+ mesma classe, o seletor de descendente abaixo casava tambem a raiz de um
4419
+ <Card loading> ANINHADO dentro de outro Card, e aplicava o layout do
4420
+ placeholder no card inteiro.
4421
+
4422
+ Estado de carregando: o skeleton entra NO FLUXO, nao sobreposto. Assim ele
4423
+ e' quem dita a altura do card, e um `loadingContent` alto (grafico, tabela)
4424
+ nao fica cortado pela altura do conteudo vazio que ele esta substituindo.
4425
+ O conteudo real continua montado, so escondido pela regra abaixo, para nao
4426
+ perder estado no meio do carregamento. */
4427
+ .gyramais-card .gyramais-card-placeholder {
4393
4428
  display: flex;
4394
- height: 100%;
4395
4429
  width: 100%;
4396
- --tw-scale-x: 102%;
4397
- 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));
4398
- align-items: center;
4399
- justify-content: center;
4400
- background-color: #ffffff80;
4401
- padding-top: 1rem;
4402
- --tw-backdrop-blur: blur(4px);
4403
- 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);
4430
+ flex-direction: column;
4431
+ align-items: stretch;
4432
+ background-color: var(--color-surface-primary);
4433
+ }
4434
+
4435
+ .gyramais-card.gyramais-card-loading
4436
+ .gyramais-card-content
4437
+ > *:not(.gyramais-card-placeholder) {
4438
+ display: none;
4404
4439
  }
4405
4440
 
4406
4441
  .gyramais-chart .recharts-legend-item {
@@ -5724,30 +5759,33 @@ h6 {
5724
5759
  }
5725
5760
 
5726
5761
  .gyramais-empty {
5727
- padding-top: 1rem;
5728
- padding-bottom: 1rem
5762
+ display: flex;
5763
+ flex-direction: column;
5764
+ align-items: center;
5765
+ justify-content: center;
5766
+ gap: 0.75rem;
5767
+ padding-left: 1rem;
5768
+ padding-right: 1rem;
5769
+ padding-top: 1.5rem;
5770
+ padding-bottom: 1.5rem
5729
5771
  }
5772
+
5730
5773
  .gyramais-empty .gyramais-empty-icon {
5731
- display: flex;
5732
- justify-content: center
5733
- }
5734
- .gyramais-empty .gyramais-empty-icon svg {
5735
- font-size: 40px;
5736
- --tw-text-opacity: 1;
5737
- color: rgb(184 184 184 / var(--tw-text-opacity, 1))
5774
+ display: flex;
5775
+ justify-content: center;
5776
+ font-size: 40px;
5777
+ color: var(--color-text-quaternary)
5738
5778
  }
5779
+
5780
+ /* Texto secundario, nao preto: lista vazia informa, nao anuncia. Em preto ela
5781
+ pesava igual ao dado de verdade da tabela ao lado. */
5739
5782
  .gyramais-empty .gyramais-empty-text {
5740
- display: flex;
5741
- justify-content: center;
5742
- padding-top: 0.5rem;
5743
- padding-bottom: 0.5rem;
5744
- font-size: 0.875rem;
5745
- line-height: 1.25rem;
5746
- font-weight: 400;
5747
- line-height: 22px;
5748
- --tw-text-opacity: 1;
5749
- color: rgb(0 0 0 / var(--tw-text-opacity, 1))
5783
+ text-align: center;
5784
+ font-size: var(--fs-subheadline);
5785
+ line-height: var(--lh-normal);
5786
+ color: var(--color-text-tertiary)
5750
5787
  }
5788
+
5751
5789
  .gyramais-filter .gyramais-filter-button-container {
5752
5790
  position: relative;
5753
5791
  width: -moz-fit-content;
@@ -6101,9 +6139,9 @@ h6 {
6101
6139
 
6102
6140
  .gyramais-hover-card-content {
6103
6141
 
6104
- width: -moz-fit-content !important;
6142
+ width: -moz-fit-content;
6105
6143
 
6106
- width: fit-content !important;
6144
+ width: fit-content;
6107
6145
 
6108
6146
  border-radius: 20px;
6109
6147
 
@@ -6119,7 +6157,6 @@ h6 {
6119
6157
 
6120
6158
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
6121
6159
  }
6122
-
6123
6160
  .gyramais-icon {
6124
6161
  content: var(--icon-url);
6125
6162
  }
@@ -8880,6 +8917,68 @@ h6 {
8880
8917
  left: 0.5rem !important
8881
8918
  }
8882
8919
 
8920
+ .gyramais-skeleton {
8921
+ position: relative;
8922
+ display: block;
8923
+ overflow: hidden;
8924
+ background-color: var(--color-gray-100);
8925
+ border-radius: var(--radius-sm);
8926
+ }
8927
+
8928
+ /* O brilho que varre o bloco. Pseudo-elemento para nao exigir um filho no DOM. */
8929
+ .gyramais-skeleton::after {
8930
+ position: absolute;
8931
+ inset: 0px;
8932
+ content: "";
8933
+ transform: translateX(-100%);
8934
+ background-image: linear-gradient(
8935
+ 90deg,
8936
+ rgba(255, 255, 255, 0) 0%,
8937
+ rgba(255, 255, 255, 0.7) 50%,
8938
+ rgba(255, 255, 255, 0) 100%
8939
+ );
8940
+ animation: gyramais-skeleton-shimmer 1.6s ease-in-out infinite;
8941
+ }
8942
+
8943
+ /* Parado de proposito: item na fila, nao em processamento. */
8944
+ .gyramais-skeleton.gyramais-skeleton-static::after {
8945
+ animation: none;
8946
+ }
8947
+
8948
+ .gyramais-skeleton.gyramais-skeleton-circle {
8949
+ flex-shrink: 0;
8950
+ border-radius: var(--radius-full);
8951
+ }
8952
+
8953
+ .gyramais-skeleton.gyramais-skeleton-block {
8954
+ border-radius: var(--radius-md);
8955
+ }
8956
+
8957
+ .gyramais-skeleton-lines {
8958
+ display: flex;
8959
+ width: 100%;
8960
+ flex-direction: column;
8961
+ gap: 0.75rem;
8962
+ }
8963
+
8964
+ .gyramais-skeleton-lines .gyramais-skeleton-line {
8965
+ height: 0.75rem;
8966
+ }
8967
+
8968
+ @keyframes gyramais-skeleton-shimmer {
8969
+ 100% {
8970
+ transform: translateX(100%);
8971
+ }
8972
+ }
8973
+
8974
+ /* Sem animacao para quem pediu menos movimento: o bloco continua marcando o
8975
+ espaco, so nao pulsa. */
8976
+ @media (prefers-reduced-motion: reduce) {
8977
+ .gyramais-skeleton::after {
8978
+ animation: none;
8979
+ }
8980
+ }
8981
+
8883
8982
  /* PickerPopover — shell base de popovers tipo command-palette / tag-picker. */
8884
8983
 
8885
8984
  /* Container override do Popover base — chrome flat com elevação de dropdown */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gyramais/gyra-design",
3
- "version": "0.2.44",
3
+ "version": "0.2.46",
4
4
  "description": "Gyramais Design System",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -1,21 +0,0 @@
1
- import React from "react";
2
- import "./index.css";
3
- type ListingPageProps = {
4
- id?: string;
5
- className?: string;
6
- title: string;
7
- description?: string;
8
- /** Right-aligned actions in the head (e.g. "+ Novo"). */
9
- actions?: React.ReactNode;
10
- /** Filters / search row below the head. */
11
- toolbar?: React.ReactNode;
12
- /** Result count / density toggle row. */
13
- meta?: React.ReactNode;
14
- /** Table or cards. */
15
- children?: React.ReactNode;
16
- /** Pagination strip. */
17
- footer?: React.ReactNode;
18
- };
19
- declare const ListingPage: ({ id, className, title, description, actions, toolbar, meta, children, footer, }: ListingPageProps) => React.JSX.Element;
20
- export { ListingPage };
21
- export type { ListingPageProps };
@@ -1 +0,0 @@
1
- export * from "./ListingPage";
@@ -1,7 +0,0 @@
1
- "use client";import e from"react";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,r={exports:{}};
2
- /*!
3
- Copyright (c) 2018 Jed Watson.
4
- Licensed under the MIT License (MIT), see
5
- http://jedwatson.github.io/classnames
6
- */a=r,function(){var e={}.hasOwnProperty;function t(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=n(e,r(a)))}return e}function r(a){if("string"==typeof a||"number"==typeof a)return a;if("object"!=typeof a)return"";if(Array.isArray(a))return t.apply(null,a);if(a.toString!==Object.prototype.toString&&!a.toString.toString().includes("[native code]"))return a.toString();var r="";for(var i in a)e.call(a,i)&&a[i]&&(r=n(r,i));return r}function n(e,t){return t?e?e+" "+t:e+t:e}a.exports?(t.default=t,a.exports=t):window.classNames=t}();var n=t(r.exports);const i=({id:t,className:a,title:r,description:i,actions:l,toolbar:s,meta:o,children:c,footer:m})=>e.createElement("div",{id:t,className:n("gyramais-listing-page",a)},e.createElement("div",{className:"gyramais-listing-page-head"},e.createElement("div",null,e.createElement("h1",null,r),i&&e.createElement("p",{className:"lead"},i)),l&&e.createElement("div",{className:"actions"},l)),s&&e.createElement("div",{className:"gyramais-listing-page-toolbar"},s),o&&e.createElement("div",{className:"gyramais-listing-page-meta"},o),e.createElement("div",{className:"gyramais-listing-page-content"},c),m&&e.createElement("div",{className:"gyramais-listing-page-foot"},m));export{i as ListingPage};
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/classnames/index.js","../../../src/components/ListingPage/ListingPage.tsx"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport \"./index.css\";\n\n/* Listing page layout — title + description, optional right-aligned\n actions, optional toolbar (filters/search), optional meta strip\n (counts/density), the table/cards body, and an optional pagination\n footer. The visual rhythm matches the v2 listing pattern shared\n across Relatórios, Lotes, Política de Crédito, etc. */\n\ntype ListingPageProps = {\n id?: string;\n className?: string;\n title: string;\n description?: string;\n /** Right-aligned actions in the head (e.g. \"+ Novo\"). */\n actions?: React.ReactNode;\n /** Filters / search row below the head. */\n toolbar?: React.ReactNode;\n /** Result count / density toggle row. */\n meta?: React.ReactNode;\n /** Table or cards. */\n children?: React.ReactNode;\n /** Pagination strip. */\n footer?: React.ReactNode;\n};\n\nconst ListingPage = ({\n id,\n className,\n title,\n description,\n actions,\n toolbar,\n meta,\n children,\n footer,\n}: ListingPageProps) => {\n return (\n <div id={id} className={classNames(\"gyramais-listing-page\", className)}>\n <div className=\"gyramais-listing-page-head\">\n <div>\n <h1>{title}</h1>\n {description && <p className=\"lead\">{description}</p>}\n </div>\n {actions && <div className=\"actions\">{actions}</div>}\n </div>\n\n {toolbar && (\n <div className=\"gyramais-listing-page-toolbar\">{toolbar}</div>\n )}\n\n {meta && <div className=\"gyramais-listing-page-meta\">{meta}</div>}\n\n <div className=\"gyramais-listing-page-content\">{children}</div>\n\n {footer && <div className=\"gyramais-listing-page-foot\">{footer}</div>}\n </div>\n );\n};\n\nexport { ListingPage };\nexport type { ListingPageProps };\n"],"names":["hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","appendClass","parseValue","Array","isArray","apply","toString","Object","prototype","includes","key","call","value","newClass","module","exports","default","window","ListingPage","id","className","title","description","actions","toolbar","meta","children","footer","React","createElement"],"mappings":";;;;;MAOC,WAGA,IAAIA,EAAS,CAAA,EAAGC,eAEhB,SAASC,IAGR,IAFA,IAAIC,EAAU,GAELC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAC1C,IAAIG,EAAMF,UAAUD,GAChBG,IACHJ,EAAUK,EAAYL,EAASM,EAAWF,IAE9C,CAEE,OAAOJ,CACT,CAEC,SAASM,EAAYF,GACpB,GAAmB,iBAARA,GAAmC,iBAARA,EACrC,OAAOA,EAGR,GAAmB,iBAARA,EACV,MAAO,GAGR,GAAIG,MAAMC,QAAQJ,GACjB,OAAOL,EAAWU,MAAM,KAAML,GAG/B,GAAIA,EAAIM,WAAaC,OAAOC,UAAUF,WAAaN,EAAIM,SAASA,WAAWG,SAAS,iBACnF,OAAOT,EAAIM,WAGZ,IAAIV,EAAU,GAEd,IAAK,IAAIc,KAAOV,EACXP,EAAOkB,KAAKX,EAAKU,IAAQV,EAAIU,KAChCd,EAAUK,EAAYL,EAASc,IAIjC,OAAOd,CACT,CAEC,SAASK,EAAaW,EAAOC,GAC5B,OAAKA,EAIDD,EACIA,EAAQ,IAAMC,EAGfD,EAAQC,EAPPD,CAQV,CAEsCE,EAAOC,SAC3CpB,EAAWqB,QAAUrB,EACrBmB,UAAiBnB,GAOjBsB,OAAOtB,WAAaA,CAEtB,CArEA,sBCoBA,MAAMuB,EAAc,EAClBC,KACAC,YACAC,QACAC,cACAC,UACAC,UACAC,OACAC,WACAC,YAGEC,EAAAC,cAAA,MAAA,CAAKV,GAAIA,EAAIC,UAAWzB,EAAW,wBAAyByB,IAC1DQ,EAAAC,cAAA,MAAA,CAAKT,UAAU,8BACbQ,EAAAC,cAAA,MAAA,KACED,EAAAC,cAAA,KAAA,KAAKR,GACJC,GAAeM,qBAAGR,UAAU,QAAQE,IAEtCC,GAAWK,uBAAKR,UAAU,WAAWG,IAGvCC,GACCI,EAAAC,cAAA,MAAA,CAAKT,UAAU,iCAAiCI,GAGjDC,GAAQG,EAAAC,cAAA,MAAA,CAAKT,UAAU,8BAA8BK,GAEtDG,EAAAC,cAAA,MAAA,CAAKT,UAAU,iCAAiCM,GAE/CC,GAAUC,EAAAC,cAAA,MAAA,CAAKT,UAAU,8BAA8BO","x_google_ignoreList":[0]}