@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
5 lines (4 loc) • 3.34 kB
JavaScript
/*! All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://github.com/Esri/calcite-design-system/blob/dev/LICENSE.md for details.
v3.2.1 */
import{a as C}from"./M7EAHGE3.js";import{e as z,r as I}from"./3ADX47DD.js";import{a as $}from"./JOSABGK6.js";import"./NNVH7JUI.js";import{E as g,F as v,R as x,S as y,c as m,d as b,e as d,h as c}from"./BJZTU5BQ.js";var O={flipRtl:"flip-rtl"},D={},f={},k={s:16,m:24,l:32};function w({icon:e,scale:t}){let s=k[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=w(e),s=N(t);if(s)return s;f[t]||(f[t]=fetch(y(`./assets/icon/${t}.json`)).then(n=>n.json()).catch(()=>($.error(`${e.icon} (${e.scale}) icon failed to load`),"")));let i=await f[t];return D[t]=i,i}function B(e){return N(w(e))}function N(e){return D[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(o,p){return l===0&&p===0?o:o.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}`,u=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,{},{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=k[n],o=!!a,p=[].concat(i||"");return this.el.ariaHidden=I(!o),this.el.ariaLabel=o?a:null,this.el.role=o?"img":null,b`<svg aria-hidden=true class=${v({[O.flipRtl]:l==="rtl"&&s,svg:!0})} fill=currentColor height=100% viewBox=${`0 0 ${h} ${h}`} width=100% xmlns=http://www.w3.org/2000/svg>${p.map(r=>typeof r=="string"?d`<path d=${r??c} />`:d`<path d=${r.d??c} opacity=${("opacity"in r?r.opacity:1)??c} />`)}</svg>`}};x("calcite-icon",u);export{u as Icon};