NX.Svg
— komponen SVG (DOM)
Factory NX.Svg(options) membangun ilustrasi SVG di browser / Electron: mengembalikan
satu HTMLElement (wrapper div.svg-container) berisi <svg>
hasil parse. Pola vanilla DOM (bukan JSX).
Lokasi kode
| Bagian | Path |
|---|---|
Factory Svg |
assets/modules/Svg/index.js |
Koleksi name |
assets/modules/Svg/svgContent.js |
| Asset string per key | assets/modules/Svg/localImage.js (assetsImage) |
| Ekspor global | assets/modules/nxdom.js → NX.Svg, NX.svgContent |
| Demo route SPA | templates/Svg.js (rute svg di App.js) |
Fitur
-
Sumber:
xml(string),name(kuncisvgContent), atausource(string SVG terdaftar diassetsImage) -
Ukuran:
width/height(default100) → atribut pada<svg>(angka atau string, mis."100%") -
Aksen warna:
fill(ataucolor, deprecated) mengganti literal#17B8A6di string SVG (pola undraw) - Gaya:
stylepada container,svgStylepada<svg> -
Markup:
classNamepada container;id,class,data-*lewat sisa opsi → atribut pada<svg> -
Error: jika nama / sumber tidak ada atau parse gagal →
div.svg-errordengan pesan singkat
Prioritas sumber konten
- Jika
xmlada (string non-kosong), dipakai dulu. - Jika belum ada konten dan
namediisi →NX.svgContent[name]. -
Jika masih belum ada dan
sourcediisi →assetsImage.get(source)di modul Svg; nilai harus string isi SVG. Key default bisa kosong sampairegisterdilocalImage.js.
Penggunaan dasar
1. Dari koleksi (name)
Kunci bawaan saat ini: forgot, nxdom, qr (lihat svgContent.js).
const el = NX.Svg({
name: 'forgot',
width: 200,
height: 178,
fill: '#CB2F2F',
className: 'demo-svg-forgot',
});
document.querySelector('#row').appendChild(el);2. Dari string XML (xml)
const el = NX.Svg({
xml: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" fill="#17B8A6"/></svg>',
width: 56,
height: 56,
id: 'ikon-custom',
});
container.appendChild(el);3. fill / color
Hanya substring fill="#17B8A6" dan fill='#17B8A6' yang
diganti. SVG tanpa warna itu tidak berubah.
NX.Svg({ name: 'nexa', width: 220, height: 176, fill: '#2563eb' });4. Container vs inner SVG
NX.Svg({
name: 'qr',
width: 180,
height: 110,
style: { padding: '8px', background: '#f8fafc' },
svgStyle: { filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.08))' },
className: 'kartu-qr',
});5. Akses koleksi mentah (NX.svgContent)
const keys = Object.keys(NX.svgContent);
const xmlString = NX.svgContent.forgot;
// NX.Svg({ xml: xmlString, ... })6. source + assetsImage
source membaca singleton assetsImage di modul Svg. Key harus mengarah ke string SVG penuh,
biasanya lewat register(key, svgString) di registerDefaultAssets() atau init Anda di
localImage.js. NX tidak mengekspor assetsImage; integrasi di sisi modul Svg
(impor langsung dari index.js jika perlu).
// Di localImage.js: register('logoSvg', '<svg ...>...</svg>');
NX.Svg({ source: 'logoSvg', width: 64, height: 64 });Bukan konstruktor
Panggil sebagai fungsi, bukan new:
NX.Svg({ name: 'nexa', width: 120, height: 120 });
// new NX.Svg({ ... }) // salahDemo di SPA (NexaRoute)
Halaman /svg memuat contoh seperti templates/Svg.js: forgot +
fill, nxdom, qr, dan satu SVG xml inline. Pastikan rute
'svg' terdaftar di App.js dan Nexa sudah memuat NX.
NX.Svg(options) — API
| Opsi | Tipe | Default | Keterangan |
|---|---|---|---|
xml |
string |
— | SVG mentah; menang atas name / source jika terisi |
name |
string |
— | Kunci di NX.svgContent |
source |
string |
— | Key assetsImage; nilai string SVG |
width |
number | string |
100 |
Atribut width pada <svg> |
height |
number | string |
100 |
Atribut height pada <svg> |
fill |
string |
— | Ganti fill="#17B8A6" / '#17B8A6' |
color |
string |
— | Alias fill (deprecated) |
style |
object |
{} |
Object.assign ke style wrapper |
svgStyle |
object |
{} |
Style pada node <svg> |
className |
string |
'' |
Kelas pada wrapper svg-container |
| …props | object |
— | id, class, data-* → atribut pada <svg> |
Return: HTMLElement — .svg-container berisi <svg>, atau
.svg-error jika gagal.
NX.svgContent
Objek string SVG (isi sama dengan export di svgContent.js).
SvgComponent (modul)
Di index.js: SvgComponent(props) = Svg(props). Dari bundel
utama pakai NX.Svg.
Menambah SVG baru
- Tambah konstanta template di
svgContent.js(atau import terpisah). - Registrasikan di object
svgContent:
export const svgContent = {
forgot: forgotSvg,
nexa: nexaSvg,
qr: qrSvg,
custom: customSvg,
};Untuk undraw yang ingin di-recolor dengan fill, pertahankan aksen #17B8A6 pada path yang ingin diganti.
Tips
Animasi / event pada <svg>
const wrap = NX.Svg({ name: 'nexa', width: 160, height: 128 });
const svg = wrap.querySelector('svg');
svg.style.transition = 'transform 0.2s ease';
wrap.addEventListener('mouseenter', () => { svg.style.transform = 'scale(1.05)'; });
wrap.addEventListener('mouseleave', () => { svg.style.transform = 'scale(1)'; });Responsif
width / height bisa string px atau persen; kombinasikan
style: { maxWidth: '100%' } pada wrapper bila perlu.
Troubleshooting
| Gejala | Cek |
|---|---|
NX.Svg undefined |
Skrip Nexa utama sudah di-load sebelum route/template jalan. |
| “SVG not found” | console.log(Object.keys(NX.svgContent)) — pastikan name benar. |
fill tidak mengubah warna |
SVG harus memakai literal #17B8A6 pada fill yang ingin diganti. |
source error / not found |
Key belum terdaftar atau nilainya bukan string SVG penuh. |
Impor modul langsung
import Svg, { svgContent, SvgComponent, assetsImage } from "/assets/modules/Svg/index.js";
const el = Svg({ name: "nexa", width: 100, height: 100 });
// assetsImage untuk register key custom (register di init)Setelah nxdom.js, pakai NX.Svg dan NX.svgContent.
Lisensi
MIT — bagian dari kerangka Nexa / NX.
QR di canvas:
NX.Qrcode.