UNPKG

maz-ui

Version:

A standalone components library for Vue.Js 3 & Nuxt.Js 3

2 lines (1 loc) 2.27 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("vue"),T=require("./index.CnuH12oV.cjs"),z=["innerHTML"],x=o.defineComponent({__name:"MazIcon",props:{src:{type:String,default:void 0},path:{type:String,default:void 0},name:{type:String,default:void 0},size:{type:String,default:void 0},title:{type:String,default:void 0},transformSource:{type:Function,default:a=>a}},emits:["loaded","unloaded","error"],setup(a,{emit:m}){const s=a,d=m,l={},i=o.ref(),f=o.ref();function g(){try{return T.injectStrict("mazIconPath")}catch{return}}const v=o.computed(()=>s.path??g()),p=o.computed(()=>s.src?s.src:v.value?`${v.value}/${s.name}.svg`:`/${s.name}.svg`);o.onMounted(()=>{!s.name&&!s.src&&console.error('[maz-ui](MazIcon) you should provide "name" or "src" as prop')});function S(e,r){const t=e.querySelectorAll("title");if(t.length>0)t[0].textContent=r;else{const n=document.createElementNS("http://www.w3.org/2000/svg","title");n.textContent=r,e.append(n)}}function h(e){return Object.keys(e).reduce((r,t)=>(e[t]!==!1&&e[t]!==null&&e[t]!==void 0&&(r[t]=e[t]),r),{})}function y(e){const r={},t=e.attributes;if(!t)return r;for(let n=t.length-1;n>=0;n--)r[t[n].name]=t[n].value;return r}function w(e){e.cloneNode(!0);const r=s.transformSource(e);return s.title&&S(r,s.title),e.innerHTML}async function E(e){l[e]||(l[e]=M(e));try{i.value=await l[e],await o.nextTick(),d("loaded",f.value)}catch(r){i.value&&(i.value=void 0,d("unloaded")),delete l[e],d("error",r)}}function M(e){return new Promise((r,t)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.addEventListener("load",()=>{if(n.status>=200&&n.status<400)try{let c=new DOMParser().parseFromString(n.responseText,"text/xml").querySelectorAll("svg")[0];c?(c=s.transformSource(c),r(c)):t(new Error('Loaded file is not valid SVG"'))}catch(u){t(u)}else t(new Error("Error loading SVG"))}),n.addEventListener("error",u=>t(u)),n.send()})}return o.watchEffect(()=>E(p.value)),(e,r)=>i.value?(o.openBlock(),o.createElementBlock("svg",o.mergeProps({key:0,ref_key:"svgElem",ref:f,class:"m-icon m-reset-css",width:"1em",height:"1em"},{...y(i.value),...h(e.$attrs)},{style:`font-size: ${a.size}`,innerHTML:w(i.value)}),null,16,z)):o.createCommentVNode("v-if",!0)}});exports.default=x;