/* COPYRIGHT Esri - https://js.arcgis.com/5.1.0/LICENSE.txt */
import{__decorate as t,__param as i}from"tslib";import{location as e,uniform as o,option as l,input as r,UniformGroup as a}from"../../GraphShaderModule.js";import{Vec4 as s,Vec2 as n,Float as p,step as u,min as m,ifElse as d,greaterThan as y,max as c,Vec3 as f,length as h,clamp as v}from"../../graph/glsl.js";import{BaseHittestVertexInput as w,FeatureVertexInput as b,AFeatureShader as V,FeatureFragmentInput as S}from"./AFeatureShader.js";import{noHit as g,trueHit as x,epsilon as j,thinLineWidthFactor as z,thinLineHalfWidth as W}from"./constants.js";import{isRectHittest as M,distPointSegment as R,hittestScreenRect as C}from"./hittestUtils.js";import{VisualVariableColor as H}from"./VisualVariableColor.js";import{VisualVariableOpacity as O}from"./VisualVariableOpacity.js";import{VisualVariableSizeMinMaxValue as U}from"./VisualVariableSizeMinMaxValue.js";import{VisualVariableSizeScaleStops as q}from"./VisualVariableSizeScaleStops.js";import{VisualVariableSizeStops as F}from"./VisualVariableSizeStops.js";import{VisualVariableSizeUnitValue as P}from"./VisualVariableSizeUnitValue.js";import{getVisualVariableColor as A,getVisualVariableOpacity as T,hasVisualVariableSize as D,getVisualVariableSize as G}from"./vvUtils.js";class L extends b{}t([e(3,s)],L.prototype,"color",void 0),t([e(4,n)],L.prototype,"offset",void 0),t([e(5,n)],L.prototype,"normal",void 0),t([e(6,p)],L.prototype,"halfWidth",void 0),t([e(7,p)],L.prototype,"referenceHalfWidth",void 0),t([e(8,n)],L.prototype,"zoomRange",void 0);class k extends S{}class B extends a{}function E(t){return c(new p(z).multiply(u(t,new p(W))),new p(1))}function I(t,i){const{halfWidth:e,normal:o}=t,l=E(e),r=h(o).multiply(e);return v(l.multiply(e.subtract(r)).divide(i.add(l).subtract(new p(1))),new p(0),new p(1))}function J(t,i){const{id:e,halfWidth:o,referenceHalfWidth:l}=i;if(D(t)){const i=new p(2).multiply(l),r=G(t,e,i),a=new p(j),s=d(y(o,a),o.divide(c(l,a)),new p(1));return new p(.5).multiply(s).multiply(r)}return o}function K(t,i){const{id:e,offset:o,pos:l,normal:r,zoomRange:a}=i,{displayViewScreenMat3:n,displayViewMat3:m}=t.view,d=A(t,e,i.color),y=T(t,e),h=J(t,i),v=new p(.5).multiply(t.antialiasingControls.antialiasing),w=c(h.add(v),new p(.45)).add(new p(.1).multiply(v)),b=E(w).multiply(w).multiply(o).multiply(t.view.scaleFactor),V=m.multiply(new f(b,new p(0))),S=n.multiply(new f(l,new p(1))).add(V),g=new p(2).multiply(u(h,new p(0))).add(t.clip(e,a)),x=new s(S.xy,g,1);return{color:d,opacity:y,halfWidth:w,normal:r,scaledOffset:b,scaledHalfWidth:h,glPosition:new s(x.xy,g,1)}}function N(t,i){const{opacity:e,color:o}=t,l=I(t,i);return e.multiply(o).multiply(l)}t([o(p)],B.prototype,"antialiasing",void 0),t([o(p)],B.prototype,"blur",void 0);class Q extends V{constructor(){super(...arguments),this.type="LineShader",this.computeAttributes={pos:["nextPos1","nextPos2"]}}vertex(t,i){const e=K(this,t);return{...e,...this.maybeRunHittest(t,i,e.halfWidth)}}fragment(t){const i=N(t,this.antialiasingControls.blur);return this.getFragmentOutput(i,t)}hittest(t,i,e){const{pos0:o,pos1:l,pos2:r}=this.computeHittestTriangle(t,i,null),a=M(this.hittestRequest),{distance:s,smallSymbolDistance:n,smallSymbolSizeThreshold:c,tlbr:f}=this.hittestRequest,h=u(e,c.multiply(.5)).multiply(s.subtract(n)),v=this.hittestRequest.position,w=m(R(v,o,l),R(v,o,r)).subtract(e).add(h);return d(a,C(o,l,r,f),d(y(w,s),new p(g),new p(x)))}}t([o(B)],Q.prototype,"antialiasingControls",void 0),t([l(H)],Q.prototype,"visualVariableColor",void 0),t([l(O)],Q.prototype,"visualVariableOpacity",void 0),t([l(U)],Q.prototype,"visualVariableSizeMinMaxValue",void 0),t([l(q)],Q.prototype,"visualVariableSizeScaleStops",void 0),t([l(F)],Q.prototype,"visualVariableSizeStops",void 0),t([l(P)],Q.prototype,"visualVariableSizeUnitValue",void 0),t([i(0,r(L)),i(1,r(w))],Q.prototype,"vertex",null),t([i(0,r(k))],Q.prototype,"fragment",null);export{B as AntialiasingControls,k as LineFragmentInput,Q as LineShader,L as LineVertexInput,I as getLineAntialiasing,N as getLineFragmentColor,E as getLineThinFactor,K as getLineVertexData};
