@edusites/bancos-brasil 1.0.5 → 1.0.7

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/core.js +38 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edusites/bancos-brasil",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Biblioteca JavaScript para renderizar ícones SVG de bancos brasileiros",
5
5
  "author": {
6
6
  "name": "Eduardo Sites",
package/src/core.js CHANGED
@@ -82,15 +82,34 @@ function criarFundo(formato, tamanho, corFundo) {
82
82
  return ''
83
83
  }
84
84
 
85
- function aplicarCor(conteudoSVG, cor) {
86
- return conteudoSVG.replace(/fill="[^"]*"/g, `fill="${cor}"`)
85
+ function extrairConteudo(svgCompleto) {
86
+ // Extrai só o conteúdo interno do SVG (paths, circles, etc)
87
+ const match = svgCompleto.match(/<svg[^>]*>([\s\S]*)<\/svg>/)
88
+ return match ? match[1].trim() : ''
87
89
  }
88
90
 
89
- function centralizarIcone(conteudoSVG, tamanhoOriginal, tamanhoFinal, padding = 0.2) {
90
- const escala = 1 - padding
91
- const offset = (tamanhoFinal * padding) / 2
91
+ function extrairViewBox(svgCompleto) {
92
+ // Extrai o viewBox original
93
+ const match = svgCompleto.match(/viewBox=["']([^"']+)["']/)
94
+ return match ? match[1] : '0 0 108 108'
95
+ }
92
96
 
93
- return `<g transform="translate(${offset}, ${offset}) scale(${(escala * tamanhoFinal) / tamanhoOriginal})">${conteudoSVG}</g>`
97
+ function aplicarCor(conteudo, cor) {
98
+ // Aplica a cor a todos os elementos gráficos
99
+ const elementos = ['path', 'circle', 'rect', 'polygon', 'ellipse', 'line', 'polyline']
100
+ let resultado = conteudo
101
+
102
+ elementos.forEach((elemento) => {
103
+ // Regex para encontrar cada elemento e seus atributos
104
+ const regex = new RegExp(`<${elemento}([^>]*)(\\/?>)`, 'g')
105
+ resultado = resultado.replace(regex, (match, attrs, fechamento) => {
106
+ // Remove fill existente e adiciona o novo
107
+ const attrsLimpos = attrs.replace(/\s*fill="[^"]*"/g, '')
108
+ return `<${elemento}${attrsLimpos} fill="${cor}"${fechamento}`
109
+ })
110
+ })
111
+
112
+ return resultado
94
113
  }
95
114
 
96
115
  export function svgBanco(options) {
@@ -112,16 +131,24 @@ export function svgBanco(options) {
112
131
  tamanho: tamanho || preset.tamanho
113
132
  }
114
133
 
115
- const iconeOriginal = obterIcone(nomeNormalizado)
116
- if (!iconeOriginal) return null
134
+ const svgOriginal = obterIcone(nomeNormalizado)
135
+ if (!svgOriginal) return null
136
+
137
+ const viewBoxOriginal = extrairViewBox(svgOriginal)
138
+ const conteudoOriginal = extrairConteudo(svgOriginal)
139
+ const conteudoColorido = aplicarCor(conteudoOriginal, config.cor)
117
140
 
118
- let conteudoIcone = aplicarCor(iconeOriginal, config.cor)
119
- conteudoIcone = centralizarIcone(conteudoIcone, 108, config.tamanho)
141
+ // Calcula padding e escala para centralizar o ícone
142
+ const padding = config.tamanho * 0.15
143
+ const tamanhoIcone = config.tamanho - padding * 2
144
+ const [, , vbWidth, vbHeight] = viewBoxOriginal.split(' ').map(Number)
145
+ const escala = tamanhoIcone / Math.max(vbWidth, vbHeight)
120
146
 
121
147
  const elementoFundo = config.formato !== 'sem' ? criarFundo(config.formato, config.tamanho, config.fundo) : ''
122
148
 
123
149
  const classAttr = className ? ` class="${className}"` : ''
124
- return `<svg width="${config.tamanho}" height="${config.tamanho}" viewBox="0 0 ${config.tamanho} ${config.tamanho}" fill="none" xmlns="http://www.w3.org/2000/svg"${classAttr}>${elementoFundo}${conteudoIcone}</svg>`
150
+
151
+ return `<svg width="${config.tamanho}" height="${config.tamanho}" viewBox="0 0 ${config.tamanho} ${config.tamanho}" fill="none" xmlns="http://www.w3.org/2000/svg"${classAttr}>${elementoFundo}<g transform="translate(${padding}, ${padding}) scale(${escala})">${conteudoColorido}</g></svg>`
125
152
  }
126
153
 
127
154
  export function listarBancos() {