UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) 1.26 kB
function s(a,n){return a.toLowerCase()===n.toLowerCase()}function d(a,n){return a.findIndex(r=>s(r,n))}function C(a,n,r){const o=d(a,n),t=d(a,r);return o===-1||t===-1?"neutral":t>o?"up":"down"}function w(a,n,r){return a.find(o=>s(o.p0.layer,n)?!r.has(o.p1.layer.toLowerCase()):s(o.p1.layer,n)?!r.has(o.p0.layer.toLowerCase()):!1)}function h(a,n,r,o){if(n.has(o.toLowerCase()))return o;let t=o;const l=new Set([r.toLowerCase(),t.toLowerCase()]);let u=w(a,t,l);for(;u&&(t=s(u.p0.layer,t)?u.p1.layer:u.p0.layer,!n.has(t.toLowerCase()));)l.add(t.toLowerCase()),u=w(a,t,l);return t}export function computeTransitionPoints(a){const{routeLines:n,currentLayerName:r,floorOrder:o}=a,t=n.filter(e=>e.virtual&&!s(e.p0.layer,e.p1.layer)),l=new Set;for(const e of n)e.virtual||(l.add(e.p0.layer.toLowerCase()),l.add(e.p1.layer.toLowerCase()));const c=(r?t.filter(e=>s(e.p0.layer,r)||s(e.p1.layer,r)):t).map(e=>{const i=r?s(e.p0.layer,r):!0,y=i?e.p0:e.p1,x=i?e.p1:e.p0,p=h(t,l,y.layer,x.layer);return{x:y.x,y:y.y,layer:y.layer,targetLayer:p,direction:C(o,y.layer,p),role:r&&i?"entry":"exit"}}),L=new Set(c.filter(e=>e.role==="exit").map(e=>`${e.x}:${e.y}`)),f=new Set;return c.filter(e=>{const i=`${e.x}:${e.y}`;return e.role==="entry"&&L.has(i)||f.has(i)?!1:(f.add(i),!0)})}