@expofp/floorplan 3.45.11 → 3.45.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/{Button-wvbcVeFB.js → Button-CRDP5tCg.js} +5 -5
- package/dist/browser/{CookieConsent-Culs9sI1.js → CookieConsent-BsPfYrwB.js} +7 -7
- package/dist/browser/{Debug-BM8bkKs4.js → Debug-BecJzEG-.js} +7 -7
- package/dist/browser/{DebugTools-fmsxTLzp.js → DebugTools-DS4bgIEf.js} +6 -6
- package/dist/browser/{Demo-C3o1FEbw.js → Demo-D7FBxB3R.js} +9 -9
- package/dist/browser/{Free-D1AZmJe7.js → Free-DnjUGTjD.js} +10 -10
- package/dist/browser/{GalleryContainer-Bbj-p43R.js → GalleryContainer-Bj8NAG3S.js} +11 -11
- package/dist/browser/{GpsLoader-BNqyoowH.js → GpsLoader-C05PU1j1.js} +13 -13
- package/dist/browser/{KioskStore-BiM1CrZM.js → KioskStore-BVCEYCzk.js} +10 -10
- package/dist/browser/{LayerStore-CYhUcBJN.js → LayerStore-k2gvCLhr.js} +825 -819
- package/dist/browser/{MaplibreAdapter-Cr1b2MUz.js → MaplibreAdapter-DFo29ESa.js} +144 -144
- package/dist/browser/{ModalContainer-bhF8uauy.js → ModalContainer-BcElOeJ-.js} +10 -10
- package/dist/browser/{PermissionNotice-Cp33Dup_.js → PermissionNotice-Bu9vqb_4.js} +6 -6
- package/dist/browser/{RouteStore-BnA20xcN.js → RouteStore-LJeUl8tg.js} +127 -127
- package/dist/browser/{SetKioskMode-DlEk89q8.js → SetKioskMode-CaQ4UMCy.js} +14 -14
- package/dist/browser/{ShowKiosk-C_2hw-6E.js → ShowKiosk-BcAeJ0Fi.js} +10 -10
- package/dist/browser/{UIState-B9mFI9_m.js → UIState-X5Q9PwMX.js} +89 -89
- package/dist/browser/{ViewerMenuPanel-DlXU3ixM.js → ViewerMenuPanel-BnUwfWS9.js} +11 -11
- package/dist/browser/{add-debug-secret-listener-xal_XewS.js → add-debug-secret-listener-DneFnknI.js} +1 -1
- package/dist/browser/{adopt-global-settings-BDiKKjee.js → adopt-global-settings-DgH2Nn_8.js} +9 -9
- package/dist/browser/{boolean-editor-Sma15U6s.js → boolean-editor-BHGGEMnO.js} +9 -9
- package/dist/browser/{bootIntercom-CvT_A8p8.js → bootIntercom-BKRjfcRC.js} +2 -2
- package/dist/browser/bundle.json +85 -85
- package/dist/browser/{camera-events-DtEEOjHJ.js → camera-events-Bp5aMamY.js} +1 -1
- package/dist/browser/{classnames-DOWh55m7.js → classnames-CzqYMEz4.js} +2 -2
- package/dist/browser/{client-Bq8KC_Gd.js → client-BekOsoIf.js} +5 -5
- package/dist/browser/{components-DAgPmGLN.js → components-D1oyhcDF.js} +151 -151
- package/dist/browser/{create-live-plan-CyeXLvG9.js → create-live-plan-aMAiUYTV.js} +73 -73
- package/dist/browser/{debug-context-DgfLIP_z.js → debug-context-1NBU7EsG.js} +5 -5
- package/dist/browser/{debug-overlay-DjhkoXTh.js → debug-overlay-DjvhIY8H.js} +10 -10
- package/dist/browser/{debug-ui-C5Ov9nWP.js → debug-ui-flULqhXs.js} +6 -6
- package/dist/browser/{dist-BPgTae9z.js → dist-BTo6i8Hu.js} +6 -6
- package/dist/browser/{dist-D7R1HRT6.js → dist-BxP9tL6r.js} +5 -5
- package/dist/browser/{dist-D8q30ciB.js → dist-CIlit6Zo.js} +3 -3
- package/dist/browser/{efp-debug-init-CI7-9-EF.js → efp-debug-init-BSFBVV1y.js} +3 -3
- package/dist/browser/{enum-editor-DgdrIT6p.js → enum-editor-CQ1DXCzl.js} +4 -4
- package/dist/browser/{es5-CKWQYgqj.js → es5-BIr-i8Ja.js} +2 -2
- package/dist/browser/{event-head-CGnPGf8r.js → event-head-BZOaCqbu.js} +1 -1
- package/dist/browser/{event-not-found-BczHwPfj.js → event-not-found-CJL8MZjO.js} +3 -3
- package/dist/browser/{event-scoped-cache-D2VS2gfE.js → event-scoped-cache-C9DjEqlr.js} +2 -2
- package/dist/browser/{expofpUrl-BjxV_NsI.js → expofpUrl-CY5ITSBJ.js} +1 -1
- package/dist/browser/{exports-Ck0hSnNP.js → exports-BS9yuUDe.js} +1 -1
- package/dist/browser/{favicon-DXRCQyX8.js → favicon-xBZv-cxl.js} +1 -1
- package/dist/browser/{fetch-retry.umd-BpErXOBo.js → fetch-retry.umd-DcxeSTii.js} +2 -2
- package/dist/browser/{flex-BQOoxB4K.js → flex-5FqYfEu4.js} +5 -5
- package/dist/browser/{floorplan.loader-BevvQXsH.js → floorplan.loader-BNTd5WnJ.js} +12 -12
- package/dist/browser/{floorplan.ready-CfjIq-tD.js → floorplan.ready-B3MuQfII.js} +30 -30
- package/dist/browser/{framing-rect-DMoOdaT6.js → framing-rect-VUrV6oqA.js} +355 -363
- package/dist/browser/{freeBanner-BLUQe1wS.js → freeBanner-CJNLRo6z.js} +2 -2
- package/dist/browser/{fuse-ZrYQLa2i.js → fuse-B9cOk_lN.js} +2 -2
- package/dist/browser/{i18n-BLaFErhY.js → i18n-Bg9oysVh.js} +6 -6
- package/dist/browser/index.js +17 -17
- package/dist/browser/{index.module-Cgw9eIFs.js → index.module-Cb8dhnVA.js} +4 -4
- package/dist/browser/{init-ui-C168qd--.js → init-ui-idRwV029.js} +13 -13
- package/dist/browser/{integrateKiosk-CItUrjqr.js → integrateKiosk-B74sTu2o.js} +5 -5
- package/dist/browser/{is-debug-5Wx1pzmC.js → is-debug-h_MAA0vT.js} +4 -4
- package/dist/browser/{is-own-domain-CQwNRlOP.js → is-own-domain-C0yte9ZX.js} +1 -1
- package/dist/browser/{is-webview-M2z00we8.js → is-webview-Vzf66YAj.js} +1 -1
- package/dist/browser/{jsx-runtime-BUD3cKrd.js → jsx-runtime-CEn3DmvQ.js} +2 -2
- package/dist/browser/{kiosk-mode-oR6Qku6R.js → kiosk-mode-DvHrNFsy.js} +3 -3
- package/dist/browser/{kiosk-record-B4TPlUVM.js → kiosk-record-DJlPleCt.js} +1 -1
- package/dist/browser/{kioskApi-Bjbnt2QJ.js → kioskApi-PfBFbTr5.js} +7 -7
- package/dist/browser/{lib-DCkZiNTx.js → lib-D72VRmCp.js} +3 -3
- package/dist/browser/{loadImage-CsHBlWDX.js → loadImage-C9WhBEVX.js} +1 -1
- package/dist/browser/{logDeviceInfo-CBp39wle.js → logDeviceInfo-CLreGIbg.js} +9 -9
- package/dist/browser/{mobx-BKuZa-uE.js → mobx-CF4qOwIb.js} +4 -4
- package/dist/browser/{mobx.module-DLfbGzOu.js → mobx.module-Bld24lDp.js} +1 -1
- package/dist/browser/{optional-boolean-editor-C_nG8KPk.js → optional-boolean-editor-BFjLyngH.js} +3 -3
- package/dist/browser/{optional-enum-editor-Cz65owXN.js → optional-enum-editor-Cn22Eotn.js} +4 -4
- package/dist/browser/{optional-string-editor-CiixI5VU.js → optional-string-editor-DtPGGsjm.js} +4 -4
- package/dist/browser/{particles.min-Dg9rhGQw.js → particles.min-CNpS5I-V.js} +2 -2
- package/dist/browser/{react-dom-BnQ0aR5T.js → react-dom-Dmeqr6Ih.js} +3 -3
- package/dist/browser/{react-9fRUfYcQ.js → react-jM_gvhh_.js} +2 -2
- package/dist/browser/{rolldown-runtime-DW9kw2-Z.js → rolldown-runtime-BvcUA6Ul.js} +1 -1
- package/dist/browser/{scene-CfgUV6qo.js → scene-C2Ph7vMa.js} +9 -9
- package/dist/browser/{scheduler-2CNHK3J9.js → scheduler-VjuMtUPg.js} +2 -2
- package/dist/browser/{select-DhztBWaW.js → select-OEbn0UxW.js} +10 -10
- package/dist/browser/{settings-CQJfzF0P.js → settings-BpKs8Nb_.js} +2 -2
- package/dist/browser/{settings-item-C8z-VDRo.js → settings-item-Ci9bHqX0.js} +6 -6
- package/dist/browser/{store-CToL6ro6.js → store-DxzMbDAn.js} +2 -2
- package/dist/browser/{string-editor-CfDpSKQj.js → string-editor-DeGRtfp9.js} +4 -4
- package/dist/browser/{text-field-Cc4OOu_O.js → text-field-Bnb1278l.js} +5 -5
- package/dist/browser/{theme-DyT10pAe.js → theme-aRuFDTe2.js} +8 -8
- package/dist/browser/{ui-oWcLvPG5.js → ui-BDhcNOy1.js} +8 -8
- package/dist/browser/{useRenderTarget-QHju4vdT.js → useRenderTarget-BtqSLLkH.js} +4 -4
- package/dist/browser/{viewport-DtGAyX5m.js → viewport-BcTdYyUU.js} +3 -3
- package/dist/browser/{wayfinding-xq3uzwvp.js → wayfinding-Cyts8CmL.js} +228 -228
- package/dist/esm/components/Map/drawing/config/config-markers.js +1 -1
- package/dist/esm/components/Map/traffic/useManageTraffic.js +1 -1
- package/dist/esm/engine/utils/rotation.d.ts +8 -0
- package/dist/esm/engine/utils/rotation.js +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Box as T}from"@expofp/geometry";import{update as M}from"@expofp/renderer";import{reaction as R}from"mobx";import{createImageDef as L}from"../../../../engine/defs";import
|
|
1
|
+
import{Box as T}from"@expofp/geometry";import{update as M}from"@expofp/renderer";import{reaction as R}from"mobx";import{createImageDef as L}from"../../../../engine/defs";import{attachExactRoll as V}from"../../../../engine/utils/rotation.js";import u,{layersStore as P,uiState as W}from"../../../../store";import{setMarkerResolver as B}from"../../pointer";import{createImageCanvas as Y,getBounds as y,imageCanvasCssSize as A}from"./canvases";const _="_selected";export const MARKER_LAYER_NAME="markers";export function rescaleMarker(s,h,f){const{center:r,rotation:a,elevation:o}=s.bounds,{width:i,height:m}=h;return s.bounds=y(r.x,r.y,i,m,f,a,o),[s]}function j(s){b=s}export function configMarkers(s){const{scene:h}=s,f=[],r=new Map,a=new Map;let o=[];const i=h.rootLayer.children.find(e=>e.name===MARKER_LAYER_NAME);i.onScale=({pixelSize:e})=>j(e),B(markerAt),M(i);async function m(e){const t=[];e.forEach(c=>{const{name:d,content:n,width:l,height:g,scale:k}=c;if(r.has(d))return;const p=new Image,x=new Promise((w,D)=>{p.onload=()=>{r.set(d,{img:p,width:l,height:g,scale:k}),w()},p.onerror=v=>{D(v)}});t.push(x),p.src=n,p.crossOrigin="anonymous"}),await Promise.all(t)}const E=(e,t)=>{e.onScale=({pixelSize:c})=>rescaleMarker(e,t,c)},$=e=>{e.screenSpace||V(e)};function I(e,t){const c=a.get(e);if(c)return c;const d=Y(t.img,t.width,t.height,window.devicePixelRatio,t.scale||1);return a.set(e,d),d}function F(){const e=u.routeStore.markersData.markers;if(!e.length)return;o=[];const t=1,c=0,d=W.is3DView;e.forEach(n=>{const l=r.get(n.icon);if(!l)return;const g=r.get(n.selectedIcon);if(!g)return;const k=l.scale||1,p=I(n.icon,l),x=I(n.selectedIcon,g),w=P.findLayer(n.z)?.visible??!0,D=A(l.img,l.width,l.height,k),v=A(g.img,g.width,g.height,k),N=y(n.x,n.y,D.width,D.height,t,c),O=y(n.x,n.y,v.width,v.height,t,c);let S;switch(n.position){case"lefttop":S=[0,0];break;case"centertop":S=[.5,0];break;case"centerbottom":S=[.5,1];break;default:S=[.5,.5]}const C={...L(p,N,{hidden:!w,origin:S}),id:n.id,scale:k,screenSpace:d},z={...L(x,O,{hidden:!(w&&n.active),origin:S}),id:`${n.id}${_}`,scale:k,screenSpace:d};E(C,D),E(z,v),o.push(C,z)}),i.children=o,o.forEach($)}function H(){i.children=[],o=[]}function K(){const e=u.routeStore.markersData.markers;e.length&&e.forEach(t=>{const c=o.find(l=>l.id===t.id),d=o.find(l=>l.id===`${t.id}${_}`);if(!c||!d)return;const n=P.findLayer(t.z)?.visible??!0;t.active?(c.hidden=!0,d.hidden=!(n&&t.active)):(c.hidden=!n,d.hidden=!0)})}return f.push(R(()=>[u.routeStore.selectedMarkers,u.layerStore.visible],()=>{if(!u.routeStore.markersData.markers.length){H(),M(i);return}K(),M(...o)})),f.push(R(()=>u.routeStore.markersData.markers,()=>{m(u.routeStore.markersData.icons).then(()=>{F(),M(i)})},{fireImmediately:!0})),function(){f.forEach(t=>t()),f.length=0,i.onScale=void 0,B(),b=1,M(i)}}export function markerAt(s,h){return getMarkerFromClick(s,h,b)}export function getMarkerFromClick(s,h,f){for(const r of u.routeStore.markersData.markers){const a=u.routeStore.markersData.icons.find(m=>m.name===r.icon);if(!a)continue;const o=a.width*(a.scale||1)*f,i=a.height*(a.scale||1)*f;if(q(s,h,r.x,r.y,o,i)){const m=u.layerStore.findLayer(r.z);if(!m||m&&m.visible)return r}}return null}function q(s,h,f,r,a,o){return T.fromCenter({x:f,y:r},{x:2*a,y:2*o}).containsPoint({x:s,y:h})}let b=1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{lineAngle as fe,pointDistance as he,Rect as be}from"@expofp/geometry";import{update as z}from"@expofp/renderer";import{useEffect as
|
|
1
|
+
import{lineAngle as fe,pointDistance as he,Rect as be}from"@expofp/geometry";import{update as z}from"@expofp/renderer";import{useEffect as ve,useRef as S}from"react";import{attachExactRoll as Ce}from"../../../engine/utils/rotation.js";import _e from"../../../tools/base-runtime-url";import{loadImage as Fe}from"../../../utils/loadImage";import{mapCamera as Pe}from"../camera";import{createCanvas as ge,createImageCanvas as Ne,getBounds as B,imageCanvasCssSize as De}from"../drawing/config/canvases";import{getRouteLayerRegex as Oe,getRouteStopLayerRegex as He,TRAFFIC_VEHICLES as ce}from"./trafficLayers";import{UpdateQueue as Ve}from"./UpdateQueue";const se=2,ze=se*3.5,J=se*12,K=J*.7,We=8,ie=2,me=.6,pe=8,ke="transport_locations",Ge=150,Ye="#a4aab6",we=1e3,$e=2e4,Ie=500;export function useManageTraffic({permission:e,scene:n,dataJsonUrl:o,websocketUrl:a}){const t=S(1),r=S(new Map),c=S(new Map),s=S(null),f=S(null),d=S(0),w=S(1),b=S(new Ve),R=S(new Map),E=S(we),m=S(new Map),x=S(void 0);ve(()=>{if(!e||!n)return;let l=!1,_;const T=n.rootLayer.children,p=c.current,I=r.current,y=b.current;async function Re(){try{let u;try{const i=await fetch(o,{method:"GET",headers:{"Content-Type":"application/json"}});if(!i.ok||i.status===204)return;u=await i.json()}catch(i){console.warn("useManageTraffic failed to get JSON",i)}if(l||!u||u.disabled||u.error)return;t.current=Ee(Pe()?.state().pixelSize??1);const W=new Map(u.routes.map(({id:i,color:h})=>[i,h])),v=new Map;W.forEach(i=>{v.set(i,qe({radius:ze,color:i,scale:window.devicePixelRatio}))});const Y=Oe(),$=T.filter(i=>Y.test(i.name)),X=He(),U=T.filter(i=>X.test(i.name));u.routes.slice(0,$.length).forEach(({id:i,color:h,path:g,stops:O,hiddenPoints:L},k)=>{R.current.set(i,g);const M=$[k];if(M){const H=new Map(L?.map(P=>[ue(P),P])??[]);for(let P=1;P<g.length;P++){const A=g[P-1],V=g[P];H.has(ue(A))||H.has(ue(V))||M.children.push({points:{p0:A,p1:V},color:h,width:se})}M.children.length&&y.add(()=>z(M))}const C=U[k],F=v.get(h);C&&F&&O?.length&&(O.forEach(H=>{C.children.push({source:F,bounds:B(H.x,H.y,...Q(F),t.current)})}),C.children.length&&y.add(()=>z(C)))});const D=T.find(i=>i.name===ce);if(!D){console.warn(`useManageTraffic: the scene has no "${ce}" layer`);return}const j=new Map;D.onScale=({pixelSize:i})=>{t.current=Ee(i);const h=[];for(const g of U){const O=g.children;for(const L of O){const k=L.source;L.bounds=B(L.bounds.center.x,L.bounds.center.y,...Q(k),t.current,L.bounds.rotation),h.push(L)}}for(const g of r.current.values()){const O=g.source;g.bounds=B(g.bounds.center.x,g.bounds.center.y,...Q(O),t.current,g.bounds.rotation),h.push(g)}return h},y.add(()=>z(D)),W.forEach((i,h)=>{j.set(h,xe({id:h,width:J,height:J,color:i,scale:window.devicePixelRatio}))});const Le=xe({id:"orphan",width:J,height:J,color:Ye,scale:window.devicePixelRatio});let q=null;try{const i=await Fe(`${_e}icons/bus-white.svg`);if(l)return;q=Ne(i,K,K,window.devicePixelRatio);const{width:h,height:g}=De(i,K,K);ne.set(q,[h,g])}catch(i){console.error(i)}f.current=i=>{try{const h=JSON.parse(i.data);if(h.type!==ke)return;const g=i.timeStamp||performance.now();w.current=Math.round(g-d.current),d.current=g;const O=Math.max(w.current??Ie,Ie),L=D.children;let k=!1;h.data.forEach(({id:M,x:C,y:F,route_id:H,hidden:P})=>{p.has(M)&&(p.get(M)?.(),p.delete(M));const A=I.get(M),V=I.get(le(M))??null;if(P&&A&&V){A.hidden=!0,V.hidden=!0,y.add(()=>z(A,V));return}if(m.current.set(M,performance.now()),!A){const G=j.get(H)??Le,N={source:G,bounds:B(C,F,...Q(G),t.current,0)};if(I.set(M,N),q){const Z=le(M),re={source:q,bounds:B(C,F,...Q(q),t.current,0)};Ce(re),q.setAttribute("id",Z),I.set(Z,re),L.push(N,re)}else L.push(N);k=!0;return}const Ae=A.bounds.center,oe=Qe(Ae,{x:C,y:F},R.current.get(H));if(oe.reduce((G,N,Z)=>Z===0?G:G+ae(oe[Z-1],N),0)>=Ge||document.hidden)Me({updateQueue:y,vehicle:A,vehicleFinery:V,x:C,y:F,scale:t.current,angle:je(A.bounds.center,{x:C,y:F})});else{const G=Xe(oe,O,N=>{Me({updateQueue:y,vehicle:A,vehicleFinery:V,x:N.x,y:N.y,scale:t.current,angle:N.angle})});p.set(M,G)}}),k&&y.add(()=>z(D))}catch(h){console.error("handleSocketMessage",h)}},d.current=performance.now(),te(),window.addEventListener("online",de),Te(u.config?(Number(u.config.vehicle_inactive_interval)||20)*1e3:$e)}catch(u){console.warn(u)}}Re();function te(){l||s.current?.readyState===WebSocket.OPEN||s.current?.readyState===WebSocket.CONNECTING||(s.current=new WebSocket(a),s.current.onmessage=f.current,s.current.onopen=()=>{E.current=we},s.current.onclose=()=>{if(l||!navigator.onLine)return;_=window.setTimeout(te,E.current);const u=3e4;E.current=Math.min(E.current*2,u)})}function de(){te()}function Te(u){clearInterval(x.current),!l&&(x.current=window.setInterval(()=>{const W=performance.now(),v=[],Y=[];m.current.forEach(($,X)=>{if(W-$<u)return;const U=I.get(X);U&&(U.hidden=!0,Y.push(U),v.push(X));const D=le(X),j=I.get(D);j&&(j.hidden=!0,Y.push(j),v.push(D))}),Y.length&&y.add(()=>z(...Y)),v.forEach($=>m.current.delete($))},u))}return()=>{l=!0,clearTimeout(_);const u=s.current;u&&(u.onopen=null,u.onmessage=null,u.onclose=null,u.close(),s.current=null),f.current=null;const W=T.find(v=>v.name===ce);W&&(W.onScale=void 0),p.forEach(v=>v?.()),p.clear(),I.clear(),y.destroy(),window.removeEventListener("online",de),clearInterval(x.current)}},[e,n,o,a])}function Q(e){const n=ne.get(e);if(!n)throw new Error("useManageTraffic: an icon was drawn without a recorded CSS size");return n}function ye(e){return e*2}function Ue(e,n){const o=n*me,a=pe*2;return[n+ie+o/2+a,e+o+ie+a]}function Ee(e){return Math.min(e||1,We)}function je(e,n){return fe(e,n)}function qe({radius:e,scale:n,color:o}){const a=Math.ceil(e*2*n),t=ge(a,a,n);ne.set(t,[ye(e),ye(e)]);const r=t.getContext("2d");r.imageSmoothingEnabled=!1;const c=a/2,s=e*.78,f=e*.33;return r.translate(c,c),r.scale(n,n),r.beginPath(),r.arc(0,0,e,0,2*Math.PI),r.fillStyle="#FFFFFF",r.fill(),r.beginPath(),r.arc(0,0,s,0,2*Math.PI),r.fillStyle=o,r.fill(),r.beginPath(),r.arc(0,0,f,0,2*Math.PI),r.fillStyle="#FFFFFF",r.fill(),t}function xe({id:e,width:n,height:o,color:a,scale:t}){const r=ie*t,c=n/2*t,s=o*t,f=me,d=.01,w=s*f,b=s,R=pe*t,E=b+r+w/2+R*2,m=c*2+w+r+R*2,x=ge(E,m,t);ne.set(x,Ue(n,o)),x.setAttribute("id",e);const l=x.getContext("2d"),_=E/2,T=m/2;l.save(),l.translate(_,T),l.rotate(-Math.PI/2),l.translate(-_,-T);const p=_,I=T-b/2+c,y=I+w;return l.shadowColor="rgba(16, 24, 40, 0.2)",l.shadowBlur=R/2,l.beginPath(),l.arc(p,I,c,Math.PI,0,!1),l.bezierCurveTo(p+c,I+s*.3,p+d*c,y,p,y),l.bezierCurveTo(p-d*c,y,p-c,I+s*.3,p-c,I),l.closePath(),l.fillStyle=a,l.fill(),l.strokeStyle="#FFFFFF",l.lineWidth=r,l.stroke(),l.restore(),x}function ae(e,n){return he(e,n)}function le(e){return`${e}_finery`}function Me({updateQueue:e,vehicle:n,vehicleFinery:o,x:a,y:t,scale:r,angle:c}){const s=n.source;if(n.bounds=B(a,t,...Q(s),r,c),n.hidden=!1,o){const{size:f,rotation:d,elevation:w}=o.bounds;o.bounds=new be({x:a,y:t},f,d,w),o.hidden=!1,e.add(()=>z(o,n))}else e.add(()=>z(n))}function ee(e,n,o){return{x:e.x+(n.x-e.x)*o,y:e.y+(n.y-e.y)*o}}function Se(e,n){let o=1/0,a={index:0,t:0};for(let t=0;t<n.length-1;t++){const r=n[t],c=n[t+1],s=c.x-r.x,f=c.y-r.y,d=s*s+f*f,w=d?((e.x-r.x)*s+(e.y-r.y)*f)/d:0,b=Math.max(0,Math.min(1,w)),R=ee(r,c,b),E=ae(e,R);E<o&&(o=E,a={index:t,t:b})}return a}function Be(e,n,o){const a=ae(e,n),t=Math.max(2,Math.ceil(a/o)+1),r=[];for(let c=0;c<t;c++){const s=c/(t-1),f=ee(e,n,s);r.push(f)}return r}function Qe(e,n,o){if(!o||!o.length)return Be(e,n,10);const a=Se(e,o),t=Se(n,o),r=[],c=s=>r.push(s);a.index+1<o.length?c(ee(o[a.index],o[a.index+1],a.t)):c(o[a.index]);for(let s=a.index+1;s<=t.index&&s<o.length;s++)c(o[s]);return t.index+1<o.length?c(ee(o[t.index],o[t.index+1],t.t)):c(o[t.index]),r}function Xe(e,n,o,a){if(e.length<2)return()=>{};let t=null,r;const c=[];let s=0;for(let d=0;d<e.length-1;d++){const w=he(e[d],e[d+1]);c.push(w),s+=w}const f=d=>{t||(t=d);const w=d-t,b=Math.min(w/n,1),R=b*s;let E=0,m=0;for(;m<c.length&&E+c[m]<R;)E+=c[m],m++;m>=c.length&&(m=c.length-1);const x=e[m],l=e[Math.min(m+1,e.length-1)],_=c[m]||0,T=_===0?0:(R-E)/_,p=x.x+(l.x-x.x)*T,I=x.y+(l.y-x.y)*T,y=fe(x,l);o({x:p,y:I,angle:y}),b<1?r=requestAnimationFrame(f):a&&a()};return r=requestAnimationFrame(f),()=>{r&&cancelAnimationFrame(r)}}function ue(e){return`${e.x},${e.y}`}const ne=new WeakMap;
|
|
@@ -9,5 +9,13 @@ export declare function flipImageDef(imageDef: ImageDef, angle: number): boolean
|
|
|
9
9
|
* @returns The same def.
|
|
10
10
|
*/
|
|
11
11
|
export declare function attachCardinalSnap(imageDef: ImageDef): ImageDef;
|
|
12
|
+
/**
|
|
13
|
+
* Declares the camera-roll rule on a def that has to stay upright on screen: it turns to the plan's
|
|
14
|
+
* exact roll, where {@link attachCardinalSnap} follows it in quarter turns. So an unchanged roll is
|
|
15
|
+
* the only no-op.
|
|
16
|
+
* @param imageDef - The def to keep upright.
|
|
17
|
+
* @returns The same def.
|
|
18
|
+
*/
|
|
19
|
+
export declare function attachExactRoll(imageDef: ImageDef): ImageDef;
|
|
12
20
|
export declare function rotateImageDef(imageDef: ImageDef, angle: number): boolean;
|
|
13
21
|
//# sourceMappingURL=rotation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{flipAngle as h,getQuarterTurns as
|
|
1
|
+
import{flipAngle as h,getQuarterTurns as y,shouldFlip as f}from"../update-def";export function isInnerInsideOuter(n,o){if(!o)return!1;const t=Math.cos(o.rotation??0),s=Math.sin(o.rotation??0),r=o.size.x/2,c=o.size.y/2;return l(n,n.rotation+Math.PI/2).every(a=>{const i=a.x-o.center.x,u=a.y-o.center.y,e=i*t+u*s,x=u*t-i*s;return Math.abs(e)<=r&&Math.abs(x)<=c})}function l(n,o=n.rotation){const t=n.size.x/2,s=n.size.y/2,r=Math.sin(o),c=Math.cos(o),a=n.center.x,i=n.center.y;return[{x:-t,y:-s},{x:t,y:-s},{x:t,y:s},{x:-t,y:s}].map(e=>({x:a+e.x*c-e.y*r,y:i+e.x*r+e.y*c}))}export function flipImageDef(n,o){const t=n.bounds;return f(o,t.rotation)?(t.rotate(h(t.rotation)-t.rotation,t),!0):!1}export function attachCardinalSnap(n){return n.onRoll=({roll:o})=>rotateImageDef(n,o)?[n]:void 0,n}export function attachExactRoll(n){return n.onRoll=({roll:o})=>{const{bounds:t}=n;if(o!==t.rotation)return t.set(t.center.x,t.center.y,t.size.x,t.size.y,o,t.elevation),[n]},n}export function rotateImageDef(n,o){const t=n.bounds,s=y(o,t.rotation);return s===0?!1:(t.rotate(s*Math.PI/2,t),!0)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expofp/floorplan",
|
|
3
|
-
"version": "3.45.
|
|
3
|
+
"version": "3.45.12",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/expofp/efp-app.git",
|
|
@@ -69,15 +69,15 @@
|
|
|
69
69
|
"tslib": "^2.3.0",
|
|
70
70
|
"uuid": "^9.0.1",
|
|
71
71
|
"zod": "4.4.3",
|
|
72
|
-
"@expofp/config": "3.45.
|
|
73
|
-
"@expofp/debug": "3.45.
|
|
74
|
-
"@expofp/geometry": "3.45.
|
|
75
|
-
"@expofp/renderer": "3.45.
|
|
76
|
-
"@expofp/resolve": "3.45.
|
|
77
|
-
"@expofp/schema": "3.45.
|
|
78
|
-
"@expofp/ui": "3.45.
|
|
79
|
-
"@expofp/utils": "3.45.
|
|
80
|
-
"@expofp/wayfinding": "3.45.
|
|
72
|
+
"@expofp/config": "3.45.12",
|
|
73
|
+
"@expofp/debug": "3.45.12",
|
|
74
|
+
"@expofp/geometry": "3.45.12",
|
|
75
|
+
"@expofp/renderer": "3.45.12",
|
|
76
|
+
"@expofp/resolve": "3.45.12",
|
|
77
|
+
"@expofp/schema": "3.45.12",
|
|
78
|
+
"@expofp/ui": "3.45.12",
|
|
79
|
+
"@expofp/utils": "3.45.12",
|
|
80
|
+
"@expofp/wayfinding": "3.45.12"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@babel/plugin-proposal-decorators": "^8.0.2",
|