UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

3 lines (2 loc) 3.25 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */ import{a as $}from"./DPU3UW4H.js";import{a as C}from"./WAA77FNZ.js";import{e as z,q as I}from"./ZQBZ5QPB.js";import"./CIYXQ5G6.js";import{E as g,F as v,Q as x,R as y,g as m,h as b,i as d,l as c}from"./G7AHLVJ5.js";var D={flipRtl:"flip-rtl",svg:"svg"},k={},u={},w={s:16,m:24,l:32};function N({icon:e,scale:t}){let s=w[t],i=L(e),n=i.charAt(i.length-1)==="F";return`${n?i.substring(0,i.length-1):i}${s}${n?"F":""}`}async function U(e){let t=N(e),s=P(t);if(s)return s;u[t]||(u[t]=fetch(y(`./assets/icon/${t}.json`)).then(n=>n.json()).catch(()=>($.error(`${e.icon} (${e.scale}) icon failed to load`),"")));let i=await u[t];return k[t]=i,i}function B(e){return P(N(e))}function P(e){return k[e]}function L(e){let t=!isNaN(Number(e.charAt(0))),s=e.split("-");if(s.length>0){let n=/[a-z]/i;e=s.map((a,l)=>a.replace(n,function(r,p){return l===0&&p===0?r:r.toUpperCase()})).join("")}return t?`i${e}`:e}var R=m`:host{display:inline-flex;color:var(--calcite-icon-color, var(--calcite-ui-icon-color, currentColor))}:host([scale=s]){inline-size:16px;block-size:16px;min-inline-size:16px;min-block-size:16px}:host([scale=m]){inline-size:24px;block-size:24px;min-inline-size:24px;min-block-size:24px}:host([scale=l]){inline-size:32px;block-size:32px;min-inline-size:32px;min-block-size:32px}.flip-rtl{transform:scaleX(-1)}.svg{display:block}:host([hidden]){display:none}[hidden]{display:none}`,f=class extends g{constructor(){super(...arguments),this.visible=!1,this.flipRtl=!1,this.icon=null,this.preload=!1,this.scale="m"}static{this.properties={pathData:[16,{},{state:!0}],visible:[16,{},{state:!0}],flipRtl:[7,{},{reflect:!0,type:Boolean}],icon:[3,{type:String},{reflect:!0}],preload:[7,{},{reflect:!0,type:Boolean}],scale:[3,{},{reflect:!0}],textLabel:1}}static{this.styles=R}connectedCallback(){if(super.connectedCallback(),this.preload){this.visible=!0,this.loadIconPathData();return}this.visible||this.waitUntilVisible(()=>{this.visible=!0,this.loadIconPathData()})}willUpdate(t){(t.has("icon")&&(this.hasUpdated||this.icon!==null)||t.has("scale")&&(this.hasUpdated||this.scale!=="m"))&&this.loadIconPathData()}disconnectedCallback(){super.disconnectedCallback(),this.intersectionObserver?.disconnect(),this.intersectionObserver=null}async loadIconPathData(){let{icon:t,scale:s,visible:i}=this;if(!t||!i)return;let n={icon:t,scale:s},a=B(n)||await U(n);t===this.icon&&(this.pathData=a)}waitUntilVisible(t){if(this.intersectionObserver=C("intersection",s=>{s.forEach(i=>{i.isIntersecting&&(this.intersectionObserver.disconnect(),this.intersectionObserver=null,t())})},{rootMargin:"50px"}),!this.intersectionObserver){t();return}this.intersectionObserver.observe(this.el)}render(){let{el:t,flipRtl:s,pathData:i,scale:n,textLabel:a}=this,l=z(t),h=w[n],r=!!a,p=[].concat(i||"");return this.el.ariaHidden=I(!r),this.el.ariaLabel=r?a:null,this.el.role=r?"img":null,b`<svg aria-hidden=true class=${v({[D.flipRtl]:l==="rtl"&&s,[D.svg]:!0})} fill=currentColor height=100% viewBox=${`0 0 ${h} ${h}`} width=100% xmlns=http://www.w3.org/2000/svg>${p.map(o=>typeof o=="string"?d`<path d=${o??c} />`:d`<path d=${o.d??c} opacity=${("opacity"in o?o.opacity:1)??c} />`)}</svg>`}};x("calcite-icon",f);export{f as Icon};