@pipelinesolucoes/button 1.0.0-beta.0 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,78 @@
1
+ LICENÇA COMERCIAL – PIPELINE SOLUÇÕES
2
+
3
+ Copyright (c) Pipeline Soluções
4
+
5
+ Este software é de propriedade da Pipeline Soluções e é disponibilizado
6
+ publicamente para instalação e avaliação. O uso comercial está sujeito
7
+ a licenciamento conforme os termos abaixo.
8
+
9
+ ────────────────────────────────────────────────────────────
10
+
11
+ 1. CONCESSÃO DE LICENÇA
12
+
13
+ A Pipeline Soluções concede ao Licenciado uma licença não exclusiva,
14
+ intransferível e revogável para utilizar este software em 1 (um)
15
+ projeto comercial, mediante aquisição de licença válida.
16
+
17
+ Projeto é definido como uma única aplicação em produção, incluindo
18
+ seus ambientes de desenvolvimento, homologação e staging.
19
+
20
+ ────────────────────────────────────────────────────────────
21
+
22
+ 2. USO PERMITIDO
23
+
24
+ É permitido:
25
+ - Instalar e avaliar o software livremente.
26
+ - Utilizar o software em projetos comerciais mediante licença válida.
27
+ - Modificar o código para uso interno no projeto licenciado.
28
+
29
+ ────────────────────────────────────────────────────────────
30
+
31
+ 3. USO PROIBIDO
32
+
33
+ É expressamente proibido:
34
+ - Utilizar o software em projetos comerciais sem licença válida.
35
+ - Redistribuir, sublicenciar, vender ou alugar este software,
36
+ integralmente ou em partes.
37
+ - Publicar o software como parte de outra biblioteca, framework
38
+ ou produto concorrente.
39
+ - Remover ou alterar avisos de copyright ou licenciamento.
40
+
41
+ ────────────────────────────────────────────────────────────
42
+
43
+ 4. SUPORTE E ATUALIZAÇÕES
44
+
45
+ A aquisição da licença pode incluir suporte básico e atualizações,
46
+ conforme acordado no momento da compra. A Pipeline Soluções não é
47
+ obrigada a fornecer suporte gratuito.
48
+
49
+ ────────────────────────────────────────────────────────────
50
+
51
+ 5. GARANTIAS E RESPONSABILIDADE
52
+
53
+ Este software é fornecido "NO ESTADO EM QUE SE ENCONTRA",
54
+ sem garantias de qualquer tipo, expressas ou implícitas.
55
+ Em nenhuma hipótese a Pipeline Soluções será responsabilizada
56
+ por danos diretos ou indiretos decorrentes do uso do software.
57
+
58
+ ────────────────────────────────────────────────────────────
59
+
60
+ 6. RESCISÃO
61
+
62
+ Esta licença será automaticamente rescindida em caso de violação
63
+ de qualquer um dos termos aqui estabelecidos. Em caso de rescisão,
64
+ o uso do software deverá ser interrompido imediatamente.
65
+
66
+ ────────────────────────────────────────────────────────────
67
+
68
+ 7. CONTATO
69
+
70
+ Para aquisição de licença comercial ou esclarecimento de dúvidas:
71
+
72
+ E-mail: contato@pipelinesolucoes.com.br
73
+ Site: https://www.pipelinesolucoes.com.br
74
+
75
+ ────────────────────────────────────────────────────────────
76
+
77
+ Ao utilizar este software em um projeto comercial, você declara ter
78
+ lido, compreendido e concordado com os termos desta licença.
package/README.md CHANGED
@@ -1,44 +1,177 @@
1
- # Sobre
2
-
3
- Este projeto é uma biblioteca React preparada para publicação no npm.
4
- Essa biblioteca contem componentes de botao.
5
-
6
- - ActionButton: Botão de ação estilizado baseado no tema e com tipografia configurável via `variant`.
7
- - FormButtonGroup: Agrupador de botões "Deletar", Cancelar" e "Salvar" para uso **dentro** de formulários.
8
- - NavigationButton: Botão de navegação reutilizável baseado em um link (`<a>`), estilizado com Material UI.
9
- - NavigationLink: Link de navegação reutilizável baseado em um link (`<a>`), estilizado com Material UI.
10
-
11
-
12
- Abaixo está o passo a passo para publicar ou atualizar a lib.
13
-
14
- # Pré-requisitos
15
-
16
- 1. Node.js instalado
17
- - Recomenda-se uma versão LTS. Verifique com: node -v
18
-
19
- # Como Publicar a biblioteca:
20
-
21
- 1. Instalar dependências: npm install
22
-
23
- 2. No package.json, altere o campo version de acordo com a semântica de versionamento.
24
- 1.0.1 – correção de bug
25
- 1.1.0 – nova funcionalidade compatível
26
- 2.0.0 mudanças incompatíveis
27
-
28
- - para publicar versão beta: "1.0.0-beta.x"
29
-
30
- 3. Este pacote é publicado exclusivamente via CI/CD (GitHub Actions).
31
-
32
- - Releases são disparados apenas por tags Git (vX.Y.Z)
33
- - Publicações manuais (npm publish) são desabilitadas
34
- - A autenticação no npm utiliza Trusted Publishing (OIDC)
35
- - Nenhum token npm é armazenado ou utilizado
36
- - Tokens de publicação estão explicitamente desabilitados
37
- - Autenticação em dois fatores (2FA) é obrigatória
38
- - Versionamento segue Semantic Versioning (SemVer)
39
-
40
- Esse modelo garante publicações seguras, rastreáveis e reprodutíveis.
41
-
42
- # Comando:
43
-
44
- 1. npm view pipesol-button versions --json - verifica todas as versões publicadas no npm.
1
+ # @pipelinesolucoes/button
2
+
3
+ Biblioteca de **componentes de botão para React**, desenvolvida para **padronização visual**, **reutilização** e **escalabilidade** em aplicações modernas e design systems.
4
+
5
+ Este pacote faz parte do ecossistema de componentes da **Pipeline Soluções**.
6
+
7
+ ---
8
+
9
+ ## 📦 Componentes disponíveis
10
+
11
+ A biblioteca inclui os seguintes componentes:
12
+
13
+ - **ActionButton**
14
+ Botão de ação estilizado, baseado no tema e com tipografia configurável via `variant`.
15
+
16
+ - **CircularIconLink**
17
+ Componente que exibe um ícone/imagem dentro de um container circular clicável, ideal para links de redes sociais ou ações rápidas com aparência consistente.
18
+
19
+ - **DownloadButton**
20
+ Componente que renderiza um link estilizado como botão para **download de arquivos** usando a tag `<a>` com o atributo `download`, permitindo customização visual via props.
21
+
22
+ - **FormButtonGroup**
23
+ Agrupador de botões *Deletar*, *Cancelar* e *Salvar* para uso **dentro de formulários**.
24
+
25
+ - **NavigationButton**
26
+ Botão de navegação reutilizável baseado em link (`<a>`), estilizado com Material UI.
27
+
28
+ - **NavigationLink**
29
+ Link de navegação reutilizável, estilizado com Material UI.
30
+
31
+ ---
32
+
33
+ ## Características
34
+
35
+ - Pronto para produção
36
+ - 🎨 Integração com Material UI
37
+ - Foco em acessibilidade
38
+ - 🧩 Ideal para design systems
39
+ - 🔄 Reutilizável em múltiplos projetos
40
+ - 📦 Publicado no npm com versionamento semântico
41
+ - 🔐 Preparado para licenciamento por projeto
42
+
43
+ ---
44
+
45
+ ## 📥 Instalação
46
+
47
+ ```bash
48
+ npm install @pipelinesolucoes/button
49
+ ou
50
+ yarn add @pipelinesolucoes/button
51
+
52
+ ```
53
+
54
+ ## 🚀 Uso básico
55
+
56
+ ```
57
+ import { ActionButton } from "@pipelinesolucoes/button";
58
+
59
+ export function Example() {
60
+ return (
61
+ <ActionButton variant="contained" color="primary">
62
+ Ação
63
+ </ActionButton>
64
+ );
65
+ }
66
+ ```
67
+
68
+ ## 🧩 Uso em Design Systems
69
+
70
+ Este pacote foi projetado para:
71
+
72
+ - padronização de ações e navegação
73
+ - reutilização entre projetos
74
+ - evolução incremental de UI
75
+ - integração com temas e tokens de design
76
+
77
+ Pode ser utilizado de forma isolada ou como parte de um design system maior.
78
+
79
+ ---
80
+
81
+ ## 🔐 Licença de uso comercial
82
+
83
+ Este pacote é publicamente acessível no npm, porém:
84
+
85
+ O uso comercial é licenciado por projeto.
86
+
87
+ **O que isso significa?**
88
+
89
+ O pacote pode ser instalado e avaliado livremente.
90
+
91
+ Para uso em projetos comerciais, é necessária a aquisição de uma licença válida por projeto.
92
+
93
+ **Definição de projeto**
94
+
95
+ Projeto = 1 aplicação em produção
96
+ (ex.: site institucional, sistema interno ou aplicação SaaS).
97
+ Ambientes de desenvolvimento, staging e homologação estão incluídos no mesmo projeto.
98
+
99
+ ---
100
+
101
+ ## 📄 O que a licença inclui
102
+
103
+ ✔ Uso em 1 projeto
104
+ ✔ Atualizações enquanto a licença estiver ativa
105
+ ✔ Correções de bugs
106
+ ✔ Suporte básico
107
+ ✔ Evolução contínua do pacote
108
+
109
+ ---
110
+
111
+ ## ⚙️ Configuração de licença (mock)
112
+
113
+ Após adquirir a licença, você receberá um Project ID e uma License Key.
114
+
115
+ No projeto, configure as variáveis de ambiente:
116
+
117
+ PIPESOL_PROJECT_ID=meu-projeto
118
+ PIPESOL_BUTTON_LICENSE_KEY=SUA-LICENSE-KEY-AQUI
119
+
120
+
121
+ Atualmente, a validação é local e não bloqueante, servindo como preparação para automação futura.
122
+
123
+ ---
124
+
125
+ ## 🔁 Versionamento
126
+
127
+ Este projeto segue Semantic Versioning (SemVer):
128
+
129
+ 1.0.1 – Correção de bugs
130
+
131
+ 1.1.0 – Nova funcionalidade compatível
132
+
133
+ 2.0.0 – Mudança incompatível
134
+
135
+ 1.0.0-beta.x – Versões beta
136
+
137
+ Para listar as versões publicadas:
138
+
139
+ ```
140
+ npm view @pipelinesolucoes/button versions --json
141
+ ```
142
+
143
+ ## 🚀 Processo de publicação
144
+
145
+ Este pacote é publicado exclusivamente via CI/CD utilizando GitHub Actions.
146
+
147
+ Características do processo:
148
+
149
+ - Publicação apenas por tags Git (vX.Y.Z)
150
+ - Autenticação via Trusted Publishing (OIDC)
151
+ - Nenhum token npm armazenado
152
+ - Tokens clássicos desabilitados
153
+ - Autenticação em dois fatores (2FA) obrigatória
154
+ - Publicações seguras, rastreáveis e reprodutíveis
155
+
156
+ ---
157
+
158
+ ## 📬 Aquisição de licença e contato
159
+
160
+ Para adquirir uma licença comercial ou obter mais informações:
161
+
162
+ 📧 contato@pipelinesolucoes.com.br
163
+ 🌐 https://www.pipelinesolucoes.com.br
164
+
165
+ ---
166
+
167
+ ## 📄 Licença
168
+
169
+ Copyright © Pipeline Soluções
170
+ Este software está sujeito a licença comercial por projeto.
171
+ Consulte o arquivo LICENSE para mais informações.
172
+
173
+ ```
174
+ Se você quiser, eu também posso gerar agora o **arquivo `LICENSE`** (texto curto e claro) no mesmo padrão profissional pra você copiar e colar como `LICENSE` no repo.
175
+ ```
176
+
177
+
@@ -1,43 +1,48 @@
1
1
  import React, { ReactElement } from 'react';
2
2
  import { SvgIconProps } from '@mui/material';
3
- /**
4
- * Propriedades do componente `CircularIconLink`.
5
- */
6
3
  export interface CircularIconLinkProps {
7
- /**
8
- * Ícone do Material UI (`<SvgIcon>`) ou uma imagem (`<img>`).
9
- * Aceita:
10
- * ```tsx
11
- * <Instagram sx={{ color: 'white' }} />
12
- * // ou
13
- * <img src="/logo.png" alt="logo" width={24} height={24} />
14
- * ```
15
- */
16
4
  children: ReactElement<HTMLImageElement> | ReactElement<SvgIconProps>;
17
- /** URL a ser aberta (opcional se onClick for usado) */
18
5
  url?: string;
19
- /** Cor de fundo do círculo */
20
6
  background_color: string;
21
- /** Texto para acessibilidade (`aria-label`) */
22
7
  aria_label: string;
23
- /** Padding interno do círculo. @default "4px" */
24
8
  padding?: string;
25
- /** Estilo da borda. @default "2px solid transparent" */
26
9
  border?: string;
27
- /** Define se o link será aberto em nova aba. @default true */
28
10
  openInNewTab?: boolean;
29
- /** Evento de clique customizado. Se definido, sobrescreve o comportamento padrão */
30
11
  onClick?: () => void;
31
12
  }
32
13
  /**
33
- * **CircularIconLink**
14
+ * Componente que exibe um ícone/imagem dentro de um container circular clicável,
15
+ * ideal para links de redes sociais ou ações rápidas com aparência consistente.
16
+ *
17
+ * @param {React.ReactElement<HTMLImageElement> | React.ReactElement<SvgIconProps>} children Ícone do Material UI (`<SvgIcon>`) ou uma imagem (`<img>`) renderizada dentro do botão. Obrigatório.
18
+ * @param {string} [url] URL a ser aberta ao clicar (opcional se `onClick` for usado).
19
+ * @param {string} background_color Cor de fundo do círculo. Obrigatório.
20
+ * @param {string} aria_label Texto de acessibilidade aplicado no `aria-label` do botão. Obrigatório.
21
+ * @param {string} [padding="4px"] Espaçamento interno do círculo.
22
+ * @param {string} [border="none"] Estilo da borda do círculo.
23
+ * @param {boolean} [openInNewTab=true] Se `true`, abre a `url` em nova aba; caso contrário abre na mesma aba.
24
+ * @param {() => void} [onClick] Callback de clique customizado. Se definido, tem prioridade sobre a abertura da `url`.
34
25
  *
35
- * Componente que exibe um **ícone ou imagem dentro de um círculo clicável**,
36
- * permitindo criar links visuais para redes sociais, sites ou qualquer URL externa.
26
+ * @example
27
+ * ```tsx
28
+ * import InstagramIcon from '@mui/icons-material/Instagram';
29
+ * import { CircularIconLink } from '@/components';
37
30
  *
38
- * - Aceita ícones do Material UI (`<SvgIcon>`) ou imagens (`<img>`).
39
- * - O círculo possui cor de fundo, padding e borda personalizáveis.
40
- * - Ao clicar, executa o `onClick` se definido, caso contrário abre a `url` em nova aba ou na mesma aba.
31
+ * const Example = () => {
32
+ * return (
33
+ * <CircularIconLink
34
+ * url="https://instagram.com/sua_conta"
35
+ * aria_label="Abrir Instagram"
36
+ * background_color="#E1306C"
37
+ * padding="6px"
38
+ * border="2px solid rgba(255,255,255,0.3)"
39
+ * openInNewTab
40
+ * >
41
+ * <InstagramIcon sx={{ color: '#fff' }} />
42
+ * </CircularIconLink>
43
+ * );
44
+ * };
45
+ * ```
41
46
  */
42
47
  declare const CircularIconLink: React.FC<CircularIconLinkProps>;
43
48
  export default CircularIconLink;
@@ -12,14 +12,38 @@ const StyledBox = styled(Box, {
12
12
  border: border,
13
13
  }));
14
14
  /**
15
- * **CircularIconLink**
15
+ * Componente que exibe um ícone/imagem dentro de um container circular clicável,
16
+ * ideal para links de redes sociais ou ações rápidas com aparência consistente.
16
17
  *
17
- * Componente que exibe um **ícone ou imagem dentro de um círculo clicável**,
18
- * permitindo criar links visuais para redes sociais, sites ou qualquer URL externa.
18
+ * @param {React.ReactElement<HTMLImageElement> | React.ReactElement<SvgIconProps>} children Ícone do Material UI (`<SvgIcon>`) ou uma imagem (`<img>`) renderizada dentro do botão. Obrigatório.
19
+ * @param {string} [url] URL a ser aberta ao clicar (opcional se `onClick` for usado).
20
+ * @param {string} background_color Cor de fundo do círculo. Obrigatório.
21
+ * @param {string} aria_label Texto de acessibilidade aplicado no `aria-label` do botão. Obrigatório.
22
+ * @param {string} [padding="4px"] Espaçamento interno do círculo.
23
+ * @param {string} [border="none"] Estilo da borda do círculo.
24
+ * @param {boolean} [openInNewTab=true] Se `true`, abre a `url` em nova aba; caso contrário abre na mesma aba.
25
+ * @param {() => void} [onClick] Callback de clique customizado. Se definido, tem prioridade sobre a abertura da `url`.
19
26
  *
20
- * - Aceita ícones do Material UI (`<SvgIcon>`) ou imagens (`<img>`).
21
- * - O círculo possui cor de fundo, padding e borda personalizáveis.
22
- * - Ao clicar, executa o `onClick` se definido, caso contrário abre a `url` em nova aba ou na mesma aba.
27
+ * @example
28
+ * ```tsx
29
+ * import InstagramIcon from '@mui/icons-material/Instagram';
30
+ * import { CircularIconLink } from '@/components';
31
+ *
32
+ * const Example = () => {
33
+ * return (
34
+ * <CircularIconLink
35
+ * url="https://instagram.com/sua_conta"
36
+ * aria_label="Abrir Instagram"
37
+ * background_color="#E1306C"
38
+ * padding="6px"
39
+ * border="2px solid rgba(255,255,255,0.3)"
40
+ * openInNewTab
41
+ * >
42
+ * <InstagramIcon sx={{ color: '#fff' }} />
43
+ * </CircularIconLink>
44
+ * );
45
+ * };
46
+ * ```
23
47
  */
24
48
  const CircularIconLink = ({ url, background_color = 'transparent', aria_label, padding = '4px', border = 'none', children, openInNewTab = true, onClick, }) => {
25
49
  const handleClick = () => {
@@ -31,5 +55,6 @@ const CircularIconLink = ({ url, background_color = 'transparent', aria_label, p
31
55
  };
32
56
  return (_jsx(StyledBox, { background_color: background_color, padding: padding, border: border, children: _jsx(IconButton, { "aria-label": aria_label, onClick: onClick || handleClick, children: children }) }));
33
57
  };
58
+ CircularIconLink.displayName = 'CircularIconLink';
34
59
  export default CircularIconLink;
35
60
  //# sourceMappingURL=CircularIconLink.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CircularIconLink.js","sourceRoot":"","sources":["../../src/components/CircularIconLink.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAE,UAAU,EAAgB,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE;IAC5B,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAC1B,CAAC,CAAC,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAc,CAAC;CACtE,CAAC,CAIC,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,eAAe,EAAE,gBAAgB;IACjC,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,MAAM;CACf,CAAC,CAAC,CAAC;AAuCJ;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GAAoC,CAAC,EACzD,GAAG,EACH,gBAAgB,GAAG,aAAa,EAChC,UAAU,EACV,OAAO,GAAG,KAAK,EACf,MAAM,GAAG,MAAM,EACf,QAAQ,EACR,YAAY,GAAG,IAAI,EACnB,OAAO,GACR,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,SAAS,IAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAC7E,KAAC,UAAU,kBAAa,UAAU,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,YAChE,QAAQ,GACE,GACH,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"CircularIconLink.js","sourceRoot":"","sources":["../../src/components/CircularIconLink.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAE,UAAU,EAAgB,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE;IAC5B,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAc,CAAC;CACjG,CAAC,CAIC,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,eAAe,EAAE,gBAAgB;IACjC,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,MAAM;CACf,CAAC,CAAC,CAAC;AAcJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,gBAAgB,GAAoC,CAAC,EACzD,GAAG,EACH,gBAAgB,GAAG,aAAa,EAChC,UAAU,EACV,OAAO,GAAG,KAAK,EACf,MAAM,GAAG,MAAM,EACf,QAAQ,EACR,YAAY,GAAG,IAAI,EACnB,OAAO,GACR,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,SAAS,IAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAC7E,KAAC,UAAU,kBAAa,UAAU,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,YAChE,QAAQ,GACE,GACH,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAClD,eAAe,gBAAgB,CAAC"}
@@ -1,115 +1,55 @@
1
1
  import React from 'react';
2
- /**
3
- * Interface de propriedades para o componente `DownloadButton`.
4
- *
5
- * Use este botão para disponibilizar o download de um arquivo mantendo
6
- * controle total sobre cores, raio de borda, sombra, dimensões e ícone.
7
- *
8
- * As propriedades marcadas com `@default` indicam o valor que será utilizado
9
- * quando a prop não for fornecida ao componente.
10
- */
11
2
  export interface DownloadButtonProps {
12
- /**
13
- * URL do arquivo a ser baixado.
14
- */
15
3
  file: string;
16
- /**
17
- * Nome do arquivo que será salvo no disco.
18
- */
19
4
  fileName: string;
20
- /**
21
- * Cor de fundo do botão.
22
- * @default "#1976d2"
23
- */
24
5
  background?: string;
25
- /**
26
- * Cor de fundo exibida no estado hover.
27
- * @default "#1565c0"
28
- */
29
6
  backgroundHover?: string;
30
- /**
31
- * Cor do texto do botão.
32
- * @default "#fff"
33
- */
34
7
  color?: string;
35
- /**
36
- * Cor do texto exibida no estado hover.
37
- * Se não informada, herda a mesma cor definida em `color`.
38
- */
39
8
  colorHover?: string;
40
- /**
41
- * Raio da borda do botão (qualquer valor CSS válido).
42
- * @default "8px"
43
- */
44
9
  borderRadius?: string;
45
- /**
46
- * Sombra do botão (valor CSS de box-shadow).
47
- * @default "none"
48
- */
49
10
  boxShadow?: string;
50
- /**
51
- * Ícone opcional exibido à esquerda do conteúdo.
52
- */
53
11
  icon?: React.ReactNode;
54
- /**
55
- * Conteúdo textual do botão (recomendado utilizar `Typography`).
56
- */
57
12
  children: React.ReactNode;
58
- /**
59
- * Texto de acessibilidade que descreve a função do botão
60
- * para leitores de tela (atributo `aria-label`).
61
- */
62
13
  arialLabel: string;
63
- /**
64
- * Largura do botão (valor CSS).
65
- * @default "auto"
66
- */
67
14
  width?: string;
68
- /**
69
- * Altura do botão (valor CSS).
70
- * @default "fit-content"
71
- */
72
15
  height?: string;
73
16
  }
74
17
  /**
75
- * Botão de download customizável com suporte a ícone e conteúdo centralizado.
76
- * O texto deve ser passado via `Typography` como children.
18
+ * Componente que renderiza um link estilizado como botão para **download de arquivos**
19
+ * usando a tag `<a>` com o atributo `download`, permitindo customização visual via props.
77
20
  *
78
- * ### Parâmetros
79
21
  * @param {string} file URL do arquivo a ser baixado.
80
- * @param {string} fileName Nome do arquivo que será salvo.
81
- * @param {string} [background="#1976d2"] Cor de fundo padrão do botão. **@default** "#1976d2"
82
- * @param {string} [backgroundHover="#1565c0"] Cor de fundo no hover. **@default** "#1565c0"
83
- * @param {string} [color="#fff"] Cor do texto padrão. **@default** "#fff"
84
- * @param {string} [colorHover] Cor do texto no hover (herda `color` quando ausente).
85
- * @param {string} [borderRadius="8px"] Raio da borda do botão. **@default** "8px"
86
- * @param {string} [boxShadow="none"] Sombra do botão. **@default** "none"
87
- * @param {string} arialLabel Texto de acessibilidade (atributo `aria-label`).
88
- * @param {React.ReactNode} [icon] Ícone opcional exibido à esquerda do conteúdo.
89
- * @param {React.ReactNode} children Conteúdo do botão (ex.: `Typography`).
90
- * @param {string} [width="auto"] Largura do botão (valor CSS). **@default** "auto"
91
- * @param {string} [height="fit-content"] Altura do botão (valor CSS). **@default** "fit-content"
22
+ * @param {string} fileName Nome do arquivo que será salvo no disco via atributo `download`.
23
+ * @param {string} [background="#1976d2"] Cor de fundo do botão.
24
+ * @param {string} [backgroundHover="#1565c0"] Cor de fundo no hover.
25
+ * @param {string} [color="#fff"] Cor do texto do botão.
26
+ * @param {string} [colorHover] Cor do texto no hover (quando ausente, herda `color`).
27
+ * @param {string} [borderRadius="8px"] Raio da borda do botão.
28
+ * @param {string} [boxShadow="none"] Sombra do botão.
29
+ * @param {React.ReactNode} [icon] Ícone exibido à esquerda do conteúdo.
30
+ * @param {React.ReactNode} children Conteúdo do botão.
31
+ * @param {string} arialLabel Texto de acessibilidade (`aria-label`).
32
+ * @param {string} [width="auto"] Largura do botão.
33
+ * @param {string} [height="fit-content"] Altura do botão.
92
34
  *
93
35
  * @example
94
36
  * ```tsx
37
+ * import DownloadIcon from '@mui/icons-material/Download';
95
38
  * import { Typography } from '@mui/material';
96
- * import { Download as DownloadIcon } from '@mui/icons-material';
39
+ * import { DownloadButton } from '@/components/DownloadButton';
97
40
  *
98
- * <DownloadButton
99
- * file="/docs/manual.pdf"
100
- * fileName="manual.pdf"
101
- * arialLabel="Baixar manual do produto"
102
- * background="#28a745"
103
- * backgroundHover="#218838"
104
- * color="#fff"
105
- * borderRadius="12px"
106
- * boxShadow="0 2px 8px rgba(0,0,0,0.15)"
107
- * width="220px"
108
- * height="44px"
109
- * icon={<DownloadIcon />}
110
- * >
111
- * <Typography variant="button">Baixar Manual</Typography>
112
- * </DownloadButton>
41
+ * const Example = () => (
42
+ * <DownloadButton
43
+ * file="/docs/manual.pdf"
44
+ * fileName="manual.pdf"
45
+ * arialLabel="Baixar manual"
46
+ * icon={<DownloadIcon />}
47
+ * width="200px"
48
+ * height="44px"
49
+ * >
50
+ * <Typography variant="button">Baixar</Typography>
51
+ * </DownloadButton>
52
+ * );
113
53
  * ```
114
54
  */
115
55
  declare const DownloadButton: React.FC<DownloadButtonProps>;