@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 8.27 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{e,f as t,g as i,m as s,L as o,h as l,r,M as a,C as n,P as h}from"./Theme.js";class p extends e{_beforeChanged(){super._beforeChanged(),(this.isDirty("pointerBaseWidth")||this.isDirty("cornerRadius")||this.isDirty("pointerLength")||this.isDirty("pointerX")||this.isDirty("pointerY")||this.isDirty("width")||this.isDirty("height"))&&(this._clear=!0)}_changed(){if(super._changed(),this._clear){this.markDirtyBounds();let e=this.width(),i=this.height();if(e>0&&i>0){let s=this.get("cornerRadius",8);s=t(s,0,Math.min(e/2,i/2));let o=this.get("pointerX",0),l=this.get("pointerY",0),r=this.get("pointerBaseWidth",15)/2,a=0,n=0,h=0,p=(o-a)*(i-n)-(l-n)*(e-a),u=(o-h)*(0-i)-(l-i)*(e-h);const d=this._display;if(d.moveTo(s,0),p>0&&u>0){let i=Math.round(t(o,s+r,e-r-s));l=t(l,-1/0,0),d.lineTo(i-r,0),d.lineTo(o,l),d.lineTo(i+r,0)}if(d.lineTo(e-s,0),d.arcTo(e,0,e,s,s),p>0&&u<0){let a=Math.round(t(l,s+r,i-r-s));o=t(o,e,1/0),d.lineTo(e,s),d.lineTo(e,Math.max(a-r,s)),d.lineTo(o,l),d.lineTo(e,a+r)}if(d.lineTo(e,i-s),d.arcTo(e,i,e-s,i,s),p<0&&u<0){let a=Math.round(t(o,s+r,e-r-s));l=t(l,i,1/0),d.lineTo(e-s,i),d.lineTo(a+r,i),d.lineTo(o,l),d.lineTo(a-r,i)}if(d.lineTo(s,i),d.arcTo(0,i,0,i-s,s),p<0&&u>0){let e=Math.round(t(l,s+r,i-s-r));o=t(o,-1/0,0),d.lineTo(0,i-s),d.lineTo(0,e+r),d.lineTo(o,l),d.lineTo(0,Math.max(e-r,s))}d.lineTo(0,s),d.arcTo(0,0,s,0,s),d.closePath()}}}}Object.defineProperty(p,"className",{enumerable:!0,configurable:!0,writable:!0,value:"PointedRectangle"}),Object.defineProperty(p,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:e.classNames.concat([p.className])});class u extends i{constructor(e,t,i,s=[]){super(e,t,i,s),Object.defineProperty(this,"_fx",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_fy",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_label",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_fillDp",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_strokeDp",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_labelDp",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_w",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_h",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_keepHoverDp",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_htmlContentHovered",{enumerable:!0,configurable:!0,writable:!0,value:!1})}_afterNew(){this._settings.themeTags=s(this._settings.themeTags,["tooltip"]),super._afterNew();this._setDefaultFn("background",(()=>p.new(this._root,{}))).set("themeTags",["tooltip","background"]),this._label=this.children.push(o.new(this._root,{})),this._disposers.push(this._label.events.on("boundschanged",(()=>{this._updateBackground()}))),this._disposers.push(this.on("bounds",(()=>{this._updateBackground()}))),this._updateTextColor(),this._root.tooltipContainer.children.push(this),this.hide(0),this._disposers.push(this.label.onPrivate("htmlElement",(e=>{e&&(this._disposers.push(l(e,"pointerover",(e=>{this._htmlContentHovered=!0}))),this._disposers.push(l(e,"pointerout",(e=>{this._htmlContentHovered=!1}))))}))),this.on("visible",(e=>{this._handleReaderAnnouncement()})),this.label.events.on("dataitemchanged",(e=>{this._handleReaderAnnouncement()})),this._root._tooltips.push(this)}_handleReaderAnnouncement(){this.get("readerAnnounce")&&this.isVisibleDeep()&&this._root.readerAlert(this.label.getAccessibleText())}get label(){return this._label}_dispose(){super._dispose(),r(this._root._tooltips,this)}_updateChildren(){super._updateChildren(),(this.isDirty("pointerOrientation")||this.isPrivateDirty("minWidth")||this.isPrivateDirty("minHeight"))&&this.get("background")._markDirtyKey("width");null!=this.get("labelText")&&this.label.set("text",this.get("labelText"));null!=this.get("labelHTML")&&this.label.set("html",this.get("labelHTML"));null!=this.get("labelAriaLabel")&&this.label.set("ariaLabel",this.get("labelAriaLabel"))}_changed(){if(super._changed(),(this.isDirty("pointTo")||this.isDirty("pointerOrientation"))&&this._updateBackground(),this.isDirty("tooltipTarget")&&this.updateBackgroundColor(),this.isDirty("keepTargetHover")){if(this.get("keepTargetHover")){const e=this.get("background");this._keepHoverDp=new a([e.events.on("pointerover",(e=>{let t=this.get("tooltipTarget");t&&(t.parent&&t.parent.getPrivate("tooltipTarget")==t&&(t=t.parent),t.hover())})),e.events.on("pointerout",(e=>{let t=this.get("tooltipTarget");t&&(t.parent&&t.parent.getPrivate("tooltipTarget")==t&&(t=t.parent),this._htmlContentHovered||t.unhover())}))]),this.label.onPrivate("htmlElement",(t=>{this._keepHoverDp&&t&&this._keepHoverDp.disposers.push(l(t,"pointerleave",(t=>{const i=this.root._renderer.getEvent(t);e.events.dispatch("pointerout",{type:"pointerout",originalEvent:i.event,point:i.point,simulated:!1,target:e})})))}))}else this._keepHoverDp&&(this._keepHoverDp.dispose(),this._keepHoverDp=void 0)}}_onShow(){super._onShow(),this.updateBackgroundColor()}updateBackgroundColor(){let e=this.get("tooltipTarget");const t=this.get("background");let i,s;e&&t&&(i=e.get("fill"),s=e.get("stroke"),null==i&&(i=s),this.get("getFillFromSprite")&&(this._fillDp&&this._fillDp.dispose(),null!=i&&t.set("fill",i),this._fillDp=e.on("fill",(e=>{null!=e&&(t.set("fill",e),this._updateTextColor(e))})),this._disposers.push(this._fillDp)),this.get("getStrokeFromSprite")&&(this._strokeDp&&this._strokeDp.dispose(),null!=i&&t.set("stroke",i),this._strokeDp=e.on("fill",(e=>{null!=e&&t.set("stroke",e)})),this._disposers.push(this._strokeDp)),this.get("getLabelFillFromSprite")&&(this._labelDp&&this._labelDp.dispose(),null!=i&&this.label.set("fill",i),this._labelDp=e.on("fill",(e=>{null!=e&&this.label.set("fill",e)})),this._disposers.push(this._labelDp))),this._updateTextColor(i)}_updateTextColor(e){this.get("autoTextColor")&&(null==e&&(e=this.get("background").get("fill")),null==e&&(e=this._root.interfaceColors.get("background")),e instanceof n&&this.label.set("fill",n.alternative(e,this._root.interfaceColors.get("alternativeText"),this._root.interfaceColors.get("text"))))}_setDataItem(e){super._setDataItem(e),this.label._setDataItem(e)}_updateBackground(){super.updateBackground();const e=this._root.container;if(e){let i=.5,s=.5,o=this.get("centerX");o instanceof h&&(i=o.value);let l=this.get("centerY");l instanceof h&&(s=l.value);let r=e.width(),a=e.height(),n=this.parent,u=0,d=0;if(n){u=n.x(),d=n.y();const e=n.get("layerMargin");e&&(u+=e.left||0,d+=e.top||0,r+=(e.left||0)+(e.right||0),a+=(e.top||0)+(e.bottom||0))}const g=this.get("bounds",{left:-u,top:-d,right:r-u,bottom:a-d});this._updateBounds();let b=this.width(),c=this.height();0===b&&(b=this._w),0===c&&(c=this._h);let _=this.get("pointTo",{x:r/2,y:a/2}),f=_.x,m=_.y,v=this.get("pointerOrientation"),T=this.get("background"),y=0,D=0,k=0;T instanceof p&&(y=T.get("pointerLength",0),D=T.get("strokeWidth",0)/2,k=D,T.set("width",b),T.set("height",c));let w=0,x=0,P=g.right-g.left,C=g.bottom-g.top;"horizontal"==v||"left"==v||"right"==v?(D=0,"horizontal"==v?f>g.left+P/2?(f-=b*(1-i)+y,k*=-1):f+=b*i+y:"left"==v?f+=b*(1-i)+y:(f-=b*i+y,k*=-1)):(k=0,"vertical"==v?m>g.top+c/2+y?m-=c*(1-s)+y:(m+=c*s+y,D*=-1):"down"==v?m-=c*(1-s)+y:(m+=c*s+y,D*=-1)),f=t(f,g.left+b*i,g.left+P-b*(1-i))+k,m=t(m,g.top+c*s,g.top+C-c*(1-s))-D,w=_.x-f+b*i+k,x=_.y-m+c*s-D,this._fx=f,this._fy=m;const O=this.get("animationDuration",0);if(O>0&&this.get("visible")&&this.get("opacity")>.1){const e=this.get("animationEasing");this.animate({key:"x",to:f,duration:O,easing:e}),this.animate({key:"y",to:m,duration:O,easing:e})}else this.set("x",f),this.set("y",m);T instanceof p&&(T.set("pointerX",w),T.set("pointerY",x)),b>0&&(this._w=b),c>0&&(this._h=c)}}}Object.defineProperty(u,"className",{enumerable:!0,configurable:!0,writable:!0,value:"Tooltip"}),Object.defineProperty(u,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:i.classNames.concat([u.className])});export{u as T};