@expofp/floorplan 3.25.1 → 3.25.2

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.
Files changed (69) hide show
  1. package/dist/browser/{Button-4H7Y1oIu.js → Button-DZ5RJVoX.js} +5 -5
  2. package/dist/browser/{CookieConsent-CoWK7bx_.js → CookieConsent-CNE-7zNI.js} +7 -7
  3. package/dist/browser/{Debug-D-XXdsjt.js → Debug-TDQ_xzea.js} +7 -7
  4. package/dist/browser/{Demo-c-7YAVSW.js → Demo-A0X5mRqG.js} +9 -9
  5. package/dist/browser/{Free-MaZo2dmm.js → Free-BjYK0xDM.js} +9 -9
  6. package/dist/browser/{GalleryContainer-DOnJhv4I.js → GalleryContainer-BsQuHOrj.js} +10 -10
  7. package/dist/browser/{GpsLoader-f-s46e4s.js → GpsLoader-DoutzmU_.js} +10 -10
  8. package/dist/browser/{KioskStore-B5S4imVV.js → KioskStore-CRN9B487.js} +4 -4
  9. package/dist/browser/{MaplibreAdapter-C848yf6N.js → MaplibreAdapter-W1ZdQQ00.js} +1520 -1511
  10. package/dist/browser/{ModalContainer-aakS4vkf.js → ModalContainer-BfZm0B_L.js} +10 -10
  11. package/dist/browser/{PermissionNotice-Bnrs8YcD.js → PermissionNotice-Cm6qrOC_.js} +6 -6
  12. package/dist/browser/{SetKioskMode-DzZZyS6g.js → SetKioskMode-BlmUmBkH.js} +8 -8
  13. package/dist/browser/{ShowKiosk-O_w7S73S.js → ShowKiosk-B0cj0p6h.js} +10 -10
  14. package/dist/browser/{ViewerMenuPanel-Db9A3MbQ.js → ViewerMenuPanel-FFmV-n9m.js} +9 -9
  15. package/dist/browser/{add-debug-secret-listener-B7IVgt3l.js → add-debug-secret-listener-BOW3NQe7.js} +1 -1
  16. package/dist/browser/{adopt-global-settings-CroPYwuh.js → adopt-global-settings-DNTNdr3z.js} +9 -9
  17. package/dist/browser/{boolean-editor-ACHtv3re.js → boolean-editor-Bx4HLLyu.js} +9 -9
  18. package/dist/browser/{bootIntercom-wfCldz8i.js → bootIntercom-C_8HLvxg.js} +2 -2
  19. package/dist/browser/{booth-by-xy-BeNsPAK4.js → booth-by-xy-DgXTlV8u.js} +6 -6
  20. package/dist/browser/bundle.json +65 -65
  21. package/dist/browser/{classnames-DNJ9erp0.js → classnames-DovQg6we.js} +2 -2
  22. package/dist/browser/{client-B0kI_Wgq.js → client-CadlVOps.js} +4 -4
  23. package/dist/browser/{components-CH6jzgzD.js → components-BK-czcTL.js} +36 -36
  24. package/dist/browser/{debug-overlay-DPLD8G41.js → debug-overlay-vFTynZrP.js} +10 -10
  25. package/dist/browser/{debug-ui-BcuP78GL.js → debug-ui-BgSppEQg.js} +6 -6
  26. package/dist/browser/{dist-DFYO_yWm.js → dist-C1WQpGAq.js} +6 -6
  27. package/dist/browser/{dist-j5FbLfDv.js → dist-CkAU9dsV.js} +5 -5
  28. package/dist/browser/{dist-D878OZ4g.js → dist-gIYlJ33F.js} +3 -3
  29. package/dist/browser/{efp-debug-init-WBPOkifi.js → efp-debug-init-CGEJSmuk.js} +3 -3
  30. package/dist/browser/{enum-editor-Bo1kcz2P.js → enum-editor-BZXgS3I-.js} +4 -4
  31. package/dist/browser/{es5-Dw3hh2hq.js → es5-DoqUhz95.js} +2 -2
  32. package/dist/browser/{event-not-found-D8_q8mVF.js → event-not-found-Dl66nXH1.js} +1 -1
  33. package/dist/browser/{exports-CoddzsKD.js → exports-CK5UTqgq.js} +1 -1
  34. package/dist/browser/{favicon-BT321x5p.js → favicon-BnTLQysW.js} +1 -1
  35. package/dist/browser/{fetch-retry.umd-CA8ymopQ.js → fetch-retry.umd-D_tGjwEb.js} +2 -2
  36. package/dist/browser/{flex-D9q2kF6V.js → flex-BCrAgMxK.js} +5 -5
  37. package/dist/browser/{floorplan.loader-CyQJ2YNJ.js → floorplan.loader-DXJR9eeS.js} +10 -10
  38. package/dist/browser/{floorplan.ready-CNRA40yt.js → floorplan.ready-C0sdmceF.js} +14 -14
  39. package/dist/browser/{fuse-mrwK1iZf.js → fuse-C7evxCwi.js} +2 -2
  40. package/dist/browser/{i18n-DAfeAZ8S.js → i18n-Cp32ZzDq.js} +5 -5
  41. package/dist/browser/index.js +14 -14
  42. package/dist/browser/{index.module-Dk3kAKpT.js → index.module-CeDH7KeK.js} +4 -4
  43. package/dist/browser/{integrateKiosk-DxVChOVT.js → integrateKiosk-JZG1AZBF.js} +4 -4
  44. package/dist/browser/{is-webview-Co4s-GiT.js → is-webview-Be9due3O.js} +1 -1
  45. package/dist/browser/{jsx-runtime-BLEarrXz.js → jsx-runtime-DwNSQYOA.js} +2 -2
  46. package/dist/browser/{kiosk-record-Dtemk-B5.js → kiosk-record-BMwfA16j.js} +1 -1
  47. package/dist/browser/{lib-CLrvaGLZ.js → lib-DeQ47J_S.js} +3 -3
  48. package/dist/browser/{loadImage-CKDCgeht.js → loadImage-DVBOry5-.js} +4 -4
  49. package/dist/browser/{logDeviceInfo-DIsLUyHd.js → logDeviceInfo-uPn7yfGH.js} +9 -9
  50. package/dist/browser/{main-CTB1lHrg.js → main-WTEdqNkt.js} +1 -1
  51. package/dist/browser/{mobx-DuryiTxo.js → mobx-DFFcUY2e.js} +4 -4
  52. package/dist/browser/{optional-boolean-editor-CWY6Zx6h.js → optional-boolean-editor-DfcaW7-l.js} +3 -3
  53. package/dist/browser/{optional-enum-editor-C8w2_YdD.js → optional-enum-editor-SEARu4hs.js} +4 -4
  54. package/dist/browser/{optional-string-editor-BAG27Bz5.js → optional-string-editor-COLkp8EA.js} +4 -4
  55. package/dist/browser/{particles.min-DG6IF5ip.js → particles.min-DHvuM5ou.js} +2 -2
  56. package/dist/browser/{react-BjxCyCXo.js → react-BNCBBLDK.js} +2 -2
  57. package/dist/browser/{react-dom-BbWLMz4w.js → react-dom-ql8ZgjdB.js} +3 -3
  58. package/dist/browser/{rolldown-runtime-D8LGmHLI.js → rolldown-runtime-D0mAPq9J.js} +1 -1
  59. package/dist/browser/{select-CTX5p1zp.js → select-CwB0Zi7C.js} +10 -10
  60. package/dist/browser/{settings-XnHelA1L.js → settings-MzAuoQZ6.js} +2 -2
  61. package/dist/browser/{settings-item-Dgr7yr9v.js → settings-item-Ca6s5CDf.js} +6 -6
  62. package/dist/browser/{store-YlSxEv0I.js → store-B_c3r86U.js} +11 -11
  63. package/dist/browser/{string-editor-B-DLDQmW.js → string-editor-BjOeNcgJ.js} +4 -4
  64. package/dist/browser/{text-field-DlqnEhco.js → text-field-6Ccfbuuo.js} +5 -5
  65. package/dist/browser/{theme-DHHsQVr7.js → theme-XlV0fBPc.js} +8 -8
  66. package/dist/browser/{ui-ffwGvnRO.js → ui-BopruaHZ.js} +8 -8
  67. package/dist/browser/{useRenderTarget-CAxp6qGQ.js → useRenderTarget-CdH-VI6E.js} +4 -4
  68. package/dist/esm/components/Maplibre/MaplibreAdapter.js +1 -1
  69. package/package.json +9 -9
@@ -1 +1 @@
1
- import{jsx as Q}from"react/jsx-runtime";import{degToRad as w}from"@expofp/geometry";import Y from"color";import{runInAction as q}from"mobx";import{observer as ee}from"mobx-react-lite";import{useCallback as $,useEffect as B,useMemo as d,useRef as g,useState as j}from"react";import re from"../../data";import{getLayerSvg as te,svgArea as P,svgAreaExplicit as oe}from"../../data/svg";import{createSceneDef as ne}from"../../renderer";import c,{uiState as s}from"../../store";import v from"../../tools/settings";import{fitRectIsFraming as ie,getVenueFitMarginPercent as ae,resolveVenueFitRect as ce}from"../../utils/scene-bounds";import se from"../Map/drawing/config/config-all";import{loadLayersImages as le}from"../Map/drawing/config/loadBoothsImages";import{useBuildRoute as ue}from"../Map/traffic/useBuildRoute";import{useManageTraffic as fe}from"../Map/traffic/useManageTraffic";import me from"./MaplibreWrapper";import{useCameraReactions as pe}from"./useCameraReactions";import{useDimming as ge}from"./useDimming";import{useKioskIdleEvents as de}from"./useKioskIdleEvents";import{useLayerVisibilitySync as be}from"./useLayerVisibilitySync";import{usePoiMarkers as Re}from"./usePoiMarkers";import{useRendererEvents as Se}from"./useRendererEvents";import{useWayfindingAndMarkers as he}from"./useWayfindingAndMarkers";import{cameraForLocalRect as ye,deriveGeoConfig as Ce,getLocalRectGeoBounds as Me,getVisibleRectFitPadding as Ae,INITIAL_FIT_ZOOM_ADJUSTMENT as De}from"./utils/geo-config";import{applyMapOptions as N,DEFAULT_MAP_OPTIONS as Pe,getTileSource as ve,MAP_2D_OPTIONS as Te}from"./utils/map-helpers";import{calculateTransformMatrix as ze}from"./utils/solver";const U="routes-api.expofp.com",Le=800;function Ee(r,l,i){return{getCameraState:()=>{const o=r.getCenter();return{lng:o.lng,lat:o.lat,zoom:r.getZoom(),bearing:r.getBearing(),pitch:r.getPitch()}},applyCameraState:o=>{r.easeTo({center:[o.lng,o.lat],zoom:o.zoom,bearing:o.bearing??l,pitch:o.pitch??i(),duration:Le,essential:!0})},resetPitch:()=>{const o=i();r.getPitch()!==o&&r.jumpTo({pitch:o})}}}function V(){c.poiMarkerStore.clear(),q(()=>{c.layerStore.layers.forEach(r=>{r.configured=!1,r.children=[],r.loaded=!1}),c.layerStore.layersLoaded=!1})}function G(r,l){const i=[];for(const o of r.rollRegistry.invoke(l))Array.isArray(o)?i.push(...o):i.push(o);i.length&&r.update(...i)}function Oe(r){const l=Math.abs(r[0]??0),i=Math.hypot(r[0]??0,r[1]??0);return l<=0||i<=0?1:l/i}const xe=ee(function({viewMode:l}){const[i,o]=j(null),[y,x]=j(null),n=c.rendererService,T=g(null),u=g(null),C=g(null),z=g(null),I=g(null),M=g(null),e=d(()=>Ce(),[]),L=d(()=>ce({layerViewbox:c.layerStore.viewboxRectangle,explicitArea:oe?P:null,layerRectangle:c.layerStore.rectangle,sceneDef:i,svgArea:P}),[i]),A=L.rect,b=d(()=>{if(!e)return null;const a=ie(L.source)?0:ae(A,P),t=Ae(0);a&&s.screenSize&&(t.left+=s.screenSize.width*a,t.right+=s.screenSize.width*a,t.top+=s.screenSize.height*a,t.bottom+=s.screenSize.height*a);const m=s.screenSize?ye(A,e.gpsConfig,e.bearing,{width:s.screenSize.width,height:s.screenSize.height},t):null;return m?{center:m.center,bearing:e.bearing,zoom:m.zoom}:{center:e.center,bearing:e.bearing,zoom:e.zoom,bounds:Me(A,e.gpsConfig),fitPadding:t,zoomAdjustment:De}},[e,L,A]),R=d(()=>e?ze(e.gpsConfig,te()?.getAttribute("units")):null,[e]),S=d(()=>({...l==="map2d"?Te:Pe}),[l]),E=g(S),X=d(()=>ve(),[]),{mapDimAnimatorRef:_,venueDimAnimatorRef:k,applyDimmingTarget:F,handleMapDimLayerReady:J}=ge(u,n);B(()=>{if(!e)return;let a=!1;V();const t=se(n).then(({layers:f,cleanup:p})=>{if(a){p();return}z.current=p;const D=Y(v.backgroundColor==="none"?"#ebebeb":v.backgroundColor).string(),O=ne(f,P,D);o(O)}).catch(f=>{a||console.warn("Maplibre scene configuration failed.",f)}),m=_.current,h=k.current;return()=>{a=!0,V();const f=T.current;t.finally(()=>n.disposeIfCurrent(f)),C.current?.(),C.current=null,z.current?.(),z.current=null,M.current&&(c.maplibreStore.clearCameraPortIfCurrent(M.current),M.current=null),T.current=null,u.current=null,I.current=null,x(null),m?.stop(),h?.stop(),s.sceneDefReady=!1}},[e,_,n,k]);const K=$((a,t,m,h)=>{T.current=a,u.current=t,I.current=h,x(a),n.attach(a,m,h,R?Oe(R):1),N(t,E.current);const f=Ee(t,e?.bearing??t.getBearing(),()=>E.current.pitch??0);M.current=f,c.maplibreStore.setCameraPort(f),F({immediate:!0}),C.current?.();const p=()=>{const O=t.getBearing()-(e?.bearing??0);G(n,w(O))};t.on("rotate",p),t.on("rotateend",p),C.current=()=>{t.off("rotate",p),t.off("rotateend",p)},le(n);const D=n.ptScaleRegistry.invoke(n.scale||1);D.length&&n.update(...D),G(n,w(t.getBearing()-(e?.bearing??0))),c.layerStore.layersLoaded=!0,c.fp.onFpConfigured&&c.fp.onFpConfigured(),s.sceneDefReady=!0,h()},[n,F,R,e]);B(()=>{E.current=S,N(u.current,S,!0)},[S]),Se(y,n),de(y,u),he(y,n),Re(y,u,e),be(n,u,e),pe(u,e,i),ue({enabled:c.layerStore.layersLoaded&&s.buildRoute,rendererService:n});const W=re.busRoutes??!1;fe({permission:c.layerStore.layersLoaded&&W,rendererService:n,dataJsonUrl:`https://${U}/v1/routes?expo=${v.EXPO}`,websocketUrl:`wss://${U}/locations?expo=${v.EXPO}`});const Z=$(a=>{console.warn("Maplibre map failed to load; falling back to floorplan mode.",a),c.maplibreStore.deactivateMaplibre()},[]);if(!e||!b||!R||!i)return null;const H=`${b.center.join(",")}:${b.bearing}:${b.zoom}`;return Q(me,{sceneDef:i,geoConfig:b,staticTransform:R,tileSource:X,mapOptions:S,onRendererReady:K,onMapDimLayerReady:J,onMapLoadError:Z},H)});export default xe;
1
+ import{jsx as re}from"react/jsx-runtime";import{degToRad as $}from"@expofp/geometry";import te from"color";import{runInAction as oe}from"mobx";import{observer as ne}from"mobx-react-lite";import{useCallback as B,useEffect as j,useMemo as b,useRef as d,useState as N}from"react";import ie from"../../data";import{getLayerSvg as ae,svgArea as P,svgAreaExplicit as ce}from"../../data/svg";import{createSceneDef as se}from"../../renderer";import{pickDefaultScenePoint as le}from"../../renderer/engine-core/defs";import c,{uiState as s}from"../../store";import{LayerMode as U}from"../../store/LayerStore";import T from"../../tools/settings";import{fitRectIsFraming as ue,getVenueFitMarginPercent as fe,resolveVenueFitRect as me}from"../../utils/scene-bounds";import pe from"../Map/drawing/config/config-all";import{loadLayersImages as de}from"../Map/drawing/config/loadBoothsImages";import{useBuildRoute as ge}from"../Map/traffic/useBuildRoute";import{useManageTraffic as be}from"../Map/traffic/useManageTraffic";import Se from"./MaplibreWrapper";import{useCameraReactions as Re}from"./useCameraReactions";import{useDimming as ye}from"./useDimming";import{useKioskIdleEvents as he}from"./useKioskIdleEvents";import{useLayerVisibilitySync as Ce}from"./useLayerVisibilitySync";import{usePoiMarkers as Me}from"./usePoiMarkers";import{useRendererEvents as ve}from"./useRendererEvents";import{useWayfindingAndMarkers as Ae}from"./useWayfindingAndMarkers";import{cameraForLocalRect as De,deriveGeoConfig as Pe,getLocalRectGeoBounds as Te,getVisibleRectFitPadding as ze,INITIAL_FIT_ZOOM_ADJUSTMENT as Le}from"./utils/geo-config";import{applyMapOptions as V,DEFAULT_MAP_OPTIONS as Oe,getTileSource as Ee,MAP_2D_OPTIONS as xe}from"./utils/map-helpers";import{calculateTransformMatrix as ke}from"./utils/solver";const G="routes-api.expofp.com",_e=800;function Fe(r,l,a){return{getCameraState:()=>{const o=r.getCenter();return{lng:o.lng,lat:o.lat,zoom:r.getZoom(),bearing:r.getBearing(),pitch:r.getPitch()}},applyCameraState:o=>{r.easeTo({center:[o.lng,o.lat],zoom:o.zoom,bearing:o.bearing??l,pitch:o.pitch??a(),duration:_e,essential:!0})},resetPitch:()=>{const o=a();r.getPitch()!==o&&r.jumpTo({pitch:o})}}}function W(){c.poiMarkerStore.clear(),oe(()=>{c.layerStore.layers.forEach(r=>{r.configured=!1,r.children=[],r.loaded=!1}),c.layerStore.layersLoaded=!1})}function X(r,l){const a=[];for(const o of r.rollRegistry.invoke(l))Array.isArray(o)?a.push(...o):a.push(o);a.length&&r.update(...a)}function we(r){const l=Math.abs(r[0]??0),a=Math.hypot(r[0]??0,r[1]??0);return l<=0||a<=0?1:l/a}const Ie=ne(function({viewMode:l}){const[a,o]=N(null),[C,x]=N(null),n=c.rendererService,z=d(null),u=d(null),M=d(null),L=d(null),k=d(null),v=d(null),e=b(()=>Pe(),[]),O=b(()=>me({layerViewbox:c.layerStore.viewboxRectangle,explicitArea:ce?P:null,layerRectangle:c.layerStore.rectangle,sceneDef:a,svgArea:P}),[a]),A=O.rect,S=b(()=>{if(!e)return null;const i=ue(O.source)?0:fe(A,P),t=ze(0);i&&s.screenSize&&(t.left+=s.screenSize.width*i,t.right+=s.screenSize.width*i,t.top+=s.screenSize.height*i,t.bottom+=s.screenSize.height*i);const m=s.screenSize?De(A,e.gpsConfig,e.bearing,{width:s.screenSize.width,height:s.screenSize.height},t):null;return m?{center:m.center,bearing:e.bearing,zoom:m.zoom}:{center:e.center,bearing:e.bearing,zoom:e.zoom,bounds:Te(A,e.gpsConfig),fitPadding:t,zoomAdjustment:Le}},[e,O,A]),R=b(()=>e?ke(e.gpsConfig,ae()?.getAttribute("units")):null,[e]),y=b(()=>({...l==="map2d"?xe:Oe}),[l]),E=d(y),H=b(()=>Ee(),[]),{mapDimAnimatorRef:_,venueDimAnimatorRef:F,applyDimmingTarget:w,handleMapDimLayerReady:J}=ye(u,n);j(()=>{if(!e)return;let i=!1;W();const t=pe(n).then(({layers:f,cleanup:p})=>{if(i){p();return}L.current=p;const D=te(T.backgroundColor==="none"?"#ebebeb":T.backgroundColor).string(),g=se(f,P,D);o(g)}).catch(f=>{i||console.warn("Maplibre scene configuration failed.",f)}),m=_.current,h=F.current;return()=>{i=!0,W();const f=z.current;t.finally(()=>n.disposeIfCurrent(f)),M.current?.(),M.current=null,L.current?.(),L.current=null,v.current&&(c.maplibreStore.clearCameraPortIfCurrent(v.current),v.current=null),z.current=null,u.current=null,k.current=null,x(null),m?.stop(),h?.stop(),s.sceneDefReady=!1}},[e,_,n,F]);const K=B((i,t,m,h)=>{z.current=i,u.current=t,k.current=h,x(i),n.attach(i,m,h,R?we(R):1),V(t,E.current);const f=Fe(t,e?.bearing??t.getBearing(),()=>E.current.pitch??0);v.current=f,c.maplibreStore.setCameraPort(f),c.fp.getCenterCoordinates=()=>{const{canvas:g}=i,q=le(i.viewport.canvasToSvg({x:g.clientWidth/2,y:g.clientHeight/2})),ee=c.layerStore.visible.find(I=>I.mode===U.TurnedOff||I.mode===U.TurnedOn);return{...q,z:ee?.name||null}},w({immediate:!0}),M.current?.();const p=()=>{const g=t.getBearing()-(e?.bearing??0);X(n,$(g))};t.on("rotate",p),t.on("rotateend",p),M.current=()=>{t.off("rotate",p),t.off("rotateend",p)},de(n);const D=n.ptScaleRegistry.invoke(n.scale||1);D.length&&n.update(...D),X(n,$(t.getBearing()-(e?.bearing??0))),c.layerStore.layersLoaded=!0,c.fp.onFpConfigured&&c.fp.onFpConfigured(),s.sceneDefReady=!0,h()},[n,w,R,e]);j(()=>{E.current=y,V(u.current,y,!0)},[y]),ve(C,n),he(C,u),Ae(C,n),Me(C,u,e),Ce(n,u,e),Re(u,e,a),ge({enabled:c.layerStore.layersLoaded&&s.buildRoute,rendererService:n});const Z=ie.busRoutes??!1;be({permission:c.layerStore.layersLoaded&&Z,rendererService:n,dataJsonUrl:`https://${G}/v1/routes?expo=${T.EXPO}`,websocketUrl:`wss://${G}/locations?expo=${T.EXPO}`});const Q=B(i=>{console.warn("Maplibre map failed to load; falling back to floorplan mode.",i),c.maplibreStore.deactivateMaplibre()},[]);if(!e||!S||!R||!a)return null;const Y=`${S.center.join(",")}:${S.bearing}:${S.zoom}`;return re(Se,{sceneDef:a,geoConfig:S,staticTransform:R,tileSource:H,mapOptions:y,onRendererReady:K,onMapDimLayerReady:J,onMapLoadError:Q},Y)});export default Ie;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.25.1",
3
+ "version": "3.25.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -70,14 +70,14 @@
70
70
  "tslib": "^2.3.0",
71
71
  "uuid": "^9.0.1",
72
72
  "zod": "4.4.3",
73
- "@expofp/config": "3.25.1",
74
- "@expofp/debug": "3.25.1",
75
- "@expofp/geometry": "3.25.1",
76
- "@expofp/resolve": "3.25.1",
77
- "@expofp/schema": "3.25.1",
78
- "@expofp/ui": "3.25.1",
79
- "@expofp/utils": "3.25.1",
80
- "@expofp/wayfinding": "3.25.1"
73
+ "@expofp/config": "3.25.2",
74
+ "@expofp/debug": "3.25.2",
75
+ "@expofp/geometry": "3.25.2",
76
+ "@expofp/resolve": "3.25.2",
77
+ "@expofp/schema": "3.25.2",
78
+ "@expofp/ui": "3.25.2",
79
+ "@expofp/utils": "3.25.2",
80
+ "@expofp/wayfinding": "3.25.2"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@babel/plugin-proposal-decorators": "^8.0.2",