UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) 37.3 kB
import{__decorate as e}from"tslib";import{Box as it}from"@expofp/geometry";import{action as u,computed as n,observable as l}from"mobx";import{setKioskUrlParams as st}from"../components/Kiosk/kioskUrlParam";import{LANGUAGE_TYPE as E,LEGACY_PREVIEW_MODE_STORAGE_KEY as rt,LEGACY_UI_SCALE_STORAGE_KEY as N,LEGACY_VIEWER_MODE_STORAGE_KEY as lt,MOBILE_BREAKPOINT as at,PREVIEW_MODE_STORAGE_KEY as nt,UI_SCALE_STORAGE_KEY as U,VIEWER_MODE_STORAGE_KEY as ht,VISIBILITY_STORAGE_KEY as W}from"../constants";import C from"../data";import{svgArea as H,svgAreaExplicit as ct}from"../data/svg";import{readFreeBannerDismissed as pt}from"../tools/freeBanner";import{hasUserConsent as dt}from"../tools/gtag";import{hasHtmlTags as X}from"../tools/has-html-tags";import ut from"../tools/logger";import L from"../tools/settings";import{stripHtml as j}from"../tools/strip-html";import{remsToPixels as D}from"../utils";import Z from"../utils/browser";import{getLocale as ft,getLocales as yt,t as v}from"../utils/i18n";import{isLocalStorageAvailable as w}from"../utils/localStorage";import{getResponsiveClass as mt}from"../utils/responsiveClass";import{sanitizeStr as J}from"../utils/sanitizeText";import{resolveVenueFitRect as gt}from"../utils/scene-bounds";import{uiState as P}from".";import{BoothBase as I,RegularBooth as M,SpecialBooth as _}from"./BoothStore";import{EventItem as R}from"./EventStore";import{Exhibitor as x}from"./ExhibitorStore";import{findEntityByExternalId as St,Route as T}from"./RouteStore";import{SpeakerItem as V}from"./SpeakerStore";const vt=["dimensions25"];export default class t{setSelectedCategoryFilters(o){this.selectedCategoryFilters=o}resetCategoryFilter(){this.selectedCategoryFilters=[],this.categoryFilterOpen=!1}setSearchClearMode(o){this.searchClearMode=o}setRouteTitle(o){this.routeTitle=o}setRouteDescription(o){this.routeDescription=o}setIsMultiPointRoute(o){this.isMultiPointRoute=o}setTourTitle(o){this.tourTitle=o}setTourDescription(o){this.tourDescription=o}setIsMultiPointTour(o){this.isMultiPointTour=o}setPathwayOnlyMode(o){this.pathwayOnlyMode=o}setMultiPointTourList(o){this.list={type:"multi-point-tour",tourId:o}}get activePathwayLayers(){return this.list?.type==="multi-point-tour"?this.rootStore.toursStore.getTourById(this.list.tourId)?.layers?.map(a=>a.id)||[]:[]}get highlightedBooths(){const o=new Set(this.rootStore.exhibitorStore.highlightedByExternalIds),a=new Set(this.rootStore.boothStore.highlightedByExternalIds),s=new Set([this.rootStore.exhibitorStore.exhibitors.filter(i=>o.has(i.externalId)).flatMap(i=>i.booths.filter(r=>r instanceof M)).map(i=>i.id.toString()),this.rootStore.boothStore.booths.filter(i=>a.has(i.externalId)).map(i=>i.id.toString())].flat());if(this.list?.type==="search"&&this.list?.text?.trim().length){s.clear();const i=this.fuzzySearchItems.filter(r=>r.score===0).map(r=>r.item);i.length?F(i,this.rootStore.boothStore.booths,this.rootStore.eventStore.eventItems).forEach(r=>s.add(r.id.toString())):this.listBooths.forEach(r=>s.add(r.id.toString()))}if(this.list?.type==="filter"&&(s.clear(),this.list.items.flatMap(i=>i.booths.filter(r=>r instanceof M)).forEach(i=>s.add(i.id.toString()))),this.categoryFilterOpen&&this.selectedCategoryFilters.length>0?(s.clear(),this.selectedCategoryFilters.forEach(i=>{i.exhibitors.flatMap(r=>r.booths).forEach(r=>s.add(r.id.toString()))})):this.list?.type==="category"&&(s.clear(),this.list.category.exhibitors.flatMap(i=>i.booths).forEach(i=>s.add(i.id.toString()))),this.list?.type==="bookmarks"&&(s.clear(),F(this.listItems,this.rootStore.boothStore.booths,this.rootStore.eventStore.eventItems).forEach(i=>s.add(i.id.toString()))),this.list?.type==="visited"&&(s.clear(),F(this.listItems,this.rootStore.boothStore.booths,this.rootStore.eventStore.eventItems).forEach(i=>s.add(i.id.toString()))),this.list?.type==="exhibitors"){s.clear();const i=this.list.text?.toLowerCase().trim();let r=this.rootStore.exhibitorStore.exhibitors;i&&(r=r.filter(d=>d.name.toLowerCase().includes(i))),r.flatMap(d=>d.booths.filter(f=>f instanceof M)).forEach(d=>s.add(d.id.toString()))}if(this.selectedPoiTypeFilters.length>0&&(s.clear(),this.selectedPoiTypeFilters.forEach(i=>{this.rootStore.boothStore.booths.filter(r=>r.poiTypeId===i.id).forEach(r=>s.add(r.id.toString()))})),this.details instanceof T&&(s.clear(),this.details.from instanceof I&&s.add(this.details.from.id.toString()),this.details.to instanceof I&&s.add(this.details.to.id.toString()),this.details.waypoints?.forEach(i=>s.add(i.id.toString()))),this.details instanceof I&&(s.clear(),s.add(this.details.id.toString())),this.details instanceof x&&(s.clear(),this.details.booths.filter(i=>i instanceof M).forEach(i=>s.add(i.id.toString()))),this.details instanceof R){const i=this.details;if(i.boothId){s.clear();const r=this.rootStore.boothStore.booths.find(d=>d.id===i.boothId);r&&s.add(r.id.toString())}}return s.delete(void 0),s.delete(null),s}constructor(o){this.interfaceMetadata=Object.freeze([{id:"menu",className:"efp-overlay-menu",priority:80,isActive:()=>this.menu,searchBoxConfig:()=>({mode:"interface",title:v("Menu")})},{id:"exhibitor",className:"efp-overlay-exhibitor",priority:70,isActive:()=>this.details instanceof x,searchBoxConfig:()=>({mode:"details",title:this.details.name})},{id:"booth",className:"efp-overlay-booth",priority:70,isActive:()=>this.details instanceof I,searchBoxConfig:()=>{const a=this.details;return{mode:"details",title:a.title||a.name}}},{id:"event",className:"efp-overlay-event",priority:70,isActive:()=>this.details instanceof R,searchBoxConfig:()=>({mode:"details",title:this.details.name})},{id:"route",className:"efp-overlay-route",priority:70,isActive:()=>this.details instanceof T,searchBoxConfig:()=>{const a=this.details;return{mode:"details",title:v("Directions")}}},{id:"search",className:"efp-overlay-search",priority:60,isActive:()=>!this.details&&!this.menu&&this.list.type==="search"&&(this.rootStore.fp.alwaysShowSidebar&&!this.overlayOnDemand||this.heatmap||this.searchFocused||this.list.text.length>0||this.searchClearMode),searchBoxConfig:()=>({mode:"search",title:v("Search")})},{id:"exhibitors",className:"efp-overlay-exhibitors",priority:50,isActive:()=>this.list.type==="exhibitors"&&!this.details,searchBoxConfig:()=>({mode:"search",title:v("Exhibitors")})},{id:"filter",className:"efp-overlay-filter",priority:50,isActive:()=>this.list.type==="filter"&&!this.details,searchBoxConfig:()=>({mode:"search",title:v("Filter")})},{id:"bookmarks",className:"efp-overlay-bookmarks",priority:50,isActive:()=>this.list.type==="bookmarks"&&!this.details,searchBoxConfig:()=>({mode:"interface",title:v("Bookmarks"),badge:this.rootStore.bookmarksStore.total})},{id:"visited",className:"efp-overlay-visited",priority:50,isActive:()=>this.list.type==="visited"&&!this.details,searchBoxConfig:()=>({mode:"interface",title:v("Visited"),badge:this.rootStore.exhibitorStore.visited.length})},{id:E,className:"efp-overlay-language",priority:50,isActive:()=>this.list.type===E,searchBoxConfig:()=>({mode:"interface",title:v("Language")})},{id:"category",className:"efp-overlay-category",priority:50,isActive:()=>!P.menu&&!!P.selectedCategory,searchBoxConfig:()=>({mode:"interface",title:this.list.type==="category"&&this.list.category?.name||v("Categories")})},{id:"sessions",className:"efp-overlay-sessions",priority:50,isActive:()=>this.list.type==="sessions"&&!this.details,searchBoxConfig:()=>({mode:"search",title:v("Sessions"),subtitle:this.selectedTrack?this.selectedTrack.name:void 0})},{id:"speakers",className:"efp-overlay-speakers",priority:50,isActive:()=>this.list.type==="speakers"&&!this.details,searchBoxConfig:()=>({mode:"search",title:v("Speakers")})},{id:"speaker",className:"efp-overlay-speaker",priority:50,isActive:()=>this.details instanceof V,searchBoxConfig:()=>({mode:"details",title:this.details.name})},{id:"tours",className:"efp-overlay-tours",priority:50,isActive:()=>this.list.type==="tours"&&!this.details,searchBoxConfig:()=>({mode:"search",title:v("Guided Tours")})},{id:"multi-point-wayfinding",className:"efp-overlay-multi-point",priority:75,isActive:()=>!!(this.isMultiPointRoute&&this.selectedRoute&&this.list.type!=="route-planner"),searchBoxConfig:()=>({mode:"interface",title:this.routeTitle||v("Multi-point route")})},{id:"multi-point-tour",className:"efp-overlay-multi-point-tour",priority:75,isActive:()=>this.list.type==="multi-point-tour"&&!this.details,searchBoxConfig:()=>({mode:"interface",title:this.tourTitle||v("Multi-point route")})},{id:"route-planner",className:"efp-overlay-route-planner",priority:76,isActive:()=>this.list.type==="route-planner"&&(!this.details||this.details instanceof T),searchBoxConfig:()=>({mode:"interface",title:v("Route planner")})}].sort((a,s)=>s.priority-a.priority)),this.list={type:"search",text:"",focused:!1},this.details=null,this.hoveredExhibitor=null,this.hoveredBooth=null,this.zoomBy=null,this.rollReset=!1,this.moveToBooths=null,this.moveToRect=null,this.moveToLocation=!1,this.menu=!1,this.searchFocused=!1,this.searchClearMode=!1,this.printingPdf=!1,this.overlayShowsAll=!1,this.centerMap=!1,this.zoomAfTransformK=1,this.activeListIndex=-1,this.devicePixelRatio=window.devicePixelRatio,this.previewExhibitor=null,this.wsStarted=!1,this.canvasStarted=!1,this.kiosk=!1,this.inIdle=!1,this.modalActive={share:!1},this.galleryActive=!1,this.hideOverlay=!1,this.searchButtonsOverride=null,this.hideCookieConsent=!!dt(),this.hideHeaderLogo=!1,this.hideLogoInBooth=!1,this.disableBookmarked=!1,this.hideLanguage=!1,this.monochrome=!1,this.heatmap=!1,this.heatmapYah=!1,this.debugCircles=[],this.mapControlsHidden=!1,this.floorsControlHidden=!1,this.hideFreeOrDemo=!1,this.freeBannerDismissed=pt(sessionStorage),this.currentBanner=null,this.sceneDefReady=!1,this.categoryFilterOpen=!1,this.selectedCategoryFilters=[],this.selectedPoiTypeFilters=[],this.selectedTrack=null,this.subButtonsVisible=!1,this.searchBoxMode="search",this.searchBoxTitle="",this.isMultiPointRoute=!1,this.isMultiPointTour=!1,this.pathwayOnlyMode=!1,this.isOverlayScrolled=!1,this.listScrollTop=0,this.listScrollItemId=null,this.listScrollIndex=0,this.scrollPositions=new Map,this.scrollItemIds=new Map,this._customUIScale=null,this.searchFilterHeightPx=54,this.searchInputHeightPx=54,this.overlayUISizePx=390,this.overlayKioskSizePx=450,this.overlayMediumHeightRems=10,this.forceDim=!1,this.mapSettings={...this.defaultMapSettings},this.forceShowDetails=!1,this.buildRoute=!1,this.globalErrorMessages=[],this.minUIScale=.8,this.maxUIScale=1.4,this.setKioskModeEnabled=!1,this.rootStore=o,this.initializeUIScale()}get rtl(){const o=ft();return o==="ar"||o==="he"}get noOverlay(){return this.rootStore.fp.noOverlay||this.hideOverlay}get overlayOnDemand(){return this.noOverlay&&this.searchButtonsOverride===!0}get overlayHiddenNow(){return this.noOverlay&&!(this.overlayOnDemand&&this.isOverlayOpen)}get onBoothClick(){return this.rootStore.fp.onBoothClick}get onMarkerClick(){return this.rootStore.fp.onMarkerClick}get onBookmarkClick(){return this.rootStore.fp.onBookmarkClick}get onVisitedClick(){return this.rootStore.fp.onVisitedClick}get onCategoryClick(){return this.rootStore.fp.onCategoryClick}get onDirection(){return this.rootStore.fp.onDirection}get onDetails(){return this.rootStore.fp.onDetails}get onExhibitorCustomButtonClick(){return this.rootStore.fp.onExhibitorCustomButtonClick}get onGetCoordsClick(){return this.rootStore.fp.onGetCoordsClick}get selectedExhibitor(){return this.details instanceof x?this.details:null}get selectedBooth(){return this.details instanceof I?this.details:null}get selectedCategory(){return this.list.type==="category"?this.list.category:null}get selectedRoute(){return this.details instanceof T?this.details:null}get selectedSpeaker(){return this.details instanceof V?this.details:null}get uiScale(){return this._customUIScale!==null?this._customUIScale:this.kiosk?1.2:1}get isGuidedToursActive(){return this.rootStore.toursStore.isActive}get getRouteNextFloor(){const o=this.rootStore.routeStore.pathLayers,a=this.rootStore.routeStore.currentRouteLayer?.name;if(!a)return null;const s=o.findIndex(c=>c.layer?.name===a);return s===-1?null:o[s+1]?.layer?.name}get headerHeightRem(){return 0}get headerHeightPx(){return D(this.headerHeightRem)}get overlayPosition(){return!this.screenSize||this.screenSize.width>at||this.kiosk?"left":"bottom"}get overlayCollapsed(){return this.kiosk&&this.overlayPosition==="left"&&!this.searchFocused&&!this.menu&&!this.details&&!this.selectedCategory&&!this.selectedExhibitor&&this.list.type!=="bookmarks"&&this.list.type!==E&&!this.list.text?.length}get overlaySize(){return this.overlayLeft?"full":this.desiredOverlaySize}get overlayBottom(){return this.overlayPosition==="bottom"}get overlayLeft(){return this.overlayPosition==="left"}get overlayWidthPx(){return this.overlayHiddenNow?0:this.overlayLeft?this.kiosk?this.overlayKioskSizePx:this.overlayUISizePx:D(this.screenSize.width)}get wsImageHeightPx(){return 44}get wsPaddingPx(){return D(.25)}get wsOccupiedHeightPx(){return this.wsShown?this.wsImageHeightPx+this.wsPaddingPx*2:0}get wsShown(){return!this.hideHeaderLogo&&this.rootStore.exhibitorStore.advertised.length>0}get wsDesktopPosition(){return L.EXPO==="cbresupplypartner"?"bottom":"top"}get wsPosition(){return this.overlayBottom?"top":this.wsDesktopPosition}get responsiveClass(){return mt(this.screenSize.width)}get mapVisibleTop(){return(this.wsPosition==="top"?this.wsOccupiedHeightPx:0)+this.headerHeightPx}get mapVisibleBottom(){return this.overlayLeft||this.overlayHiddenNow?this.wsPosition==="bottom"?this.wsOccupiedHeightPx:0:D(this.overlayMediumHeightRems)}get mapVisibleStart(){return 0}get searchActionsHeightPx(){return this.overlayPosition==="bottom"?this.searchInputHeightPx+this.searchFilterHeightPx:this.searchInputHeightPx}get fullSizeOffset(){const o=this.wsShown?54:0,a=this.bannerType==="free"&&!this.freeBannerDismissed?40:0,s=20;if(this.details&&!(this.details instanceof T))return o+a+s;const c=54,i=this.shouldShowSearchButtons?54:0;return o+a+c+s+i}get shouldShowSearchButtons(){return this.rootStore.searchButtonsStore.hasAnySearchButtons&&!this.details&&!this.menu&&![E,"filter"].includes(this.list.type)}get shouldShowMobileToggle(){const o=this.list.type==="route-planner";return this.overlayPosition==="bottom"&&(o||!this.details&&!this.menu&&this.list.type!==E&&this.list.type!=="bookmarks"&&this.list.type!=="sessions")}get mobileToggleIsListMode(){return!this.isOverlayOpen||this.overlaySize!=="full"}get canvasVisibleRectPx(){const o=this.screenSize;return it.fromMinMax({x:P.rtl?0:this.mapVisibleStart,y:this.mapVisibleTop+this.searchActionsHeightPx},{x:P.rtl?o.width-this.mapVisibleStart:o.width,y:o.height-this.mapVisibleBottom})}get shouldShiftMapRect(){return this.overlayPosition==="left"&&(this.details||this.hasAppliedFilters||this.selectedRoute)}get hasAppliedFilters(){return this.selectedCategoryFilters.length>0||this.selectedPoiTypeFilters.length>0}get canvasVisibleRectPt(){return this.canvasVisibleRectPx.scale(this.devicePixelRatio,{x:0,y:0})}get canvasSizePt(){return this.screenSize.multiply(this.devicePixelRatio)}get shouldUseBackdrop(){if(P.overlayCollapsed)return!1;if(w&&localStorage.getItem("forcebackdrop")==="1")return!0;if(this.overlayBottom||this.selectedExhibitor?.leadingImageUrl&&!this.selectedExhibitor?.leadingImageLinkUrl)return!1;const o=Z.satisfies({safari:">=13"}),a=Z.satisfies({chrome:">=77"});var s=/(android)/i.test(navigator.userAgent);return s?!1:o||a&&P.canvasSizePt.height*P.canvasSizePt.width<3e6}setForceDim(o){this.forceDim=o}get dimmed(){return this.forceDim||this.pathwayOnlyMode?!0:this.highlightedBooths.size>0||this.list?.type==="search"&&this.list?.text?.trim().length>0||this.list?.type==="exhibitors"}get defaultSearchItems(){const{exhibitorStore:o,categoryStore:a,boothStore:s,heatmapStore:c}=this.rootStore;let i=o.exhibitors;const r=a.categories.filter(y=>y.exhibitors.length),d=s.booths;this.selectedPoiTypeFilters.length>0&&(i=i.filter(y=>y.booths.some(m=>this.selectedPoiTypeFilters.some(S=>m.poiTypeId===S.id))));let f=[];const k=!this.selectedCategoryFilters.length&&C.showCategories?r.filter(y=>vt.includes(L.EXPO)?!y.name.includes("/"):!0):[],A=d.filter(y=>y instanceof _);return this.selectedCategoryFilters.length>0?f=[...i]:(C.showCompaniesAndBooths&&(f=f.concat(i)),C.showOtherSpaces&&(f=f.concat(A))),this.heatmap?[...i,...d].sort((m,S)=>c.getClicksByType(S)-c.getClicksByType(m)):this.heatmapYah?c.heatmapData?.yah?.sort((y,m)=>c.getClicksByType(m)-c.getClicksByType(y))||[]:i.length===0?d:k.concat(f.sort((y,m)=>{const S=y instanceof x&&y.featured!==void 0,B=m instanceof x&&m.featured!==void 0;if(S!==B)return S?-1:1;const O=y instanceof _&&y.title?y.title:y.name,z=m instanceof _&&m.title?m.title:m.name;return O.localeCompare(z,void 0,{sensitivity:"base",numeric:!0})}))}get searchItems(){if(this.list.type!=="search")return[];let o=this.list.text?.trim().toLowerCase()||"";const{exhibitorStore:a,categoryStore:s,boothStore:c,eventStore:i,speakerStore:r,heatmapStore:d}=this.rootStore;let f=a.exhibitors;const k=s.categories.filter(h=>h.exhibitors.length),A=c.booths,y=i.eventItems,m=r.speakers;if(this.selectedCategoryFilters.length>0&&(f=f.filter(h=>this.selectedCategoryFilters.some(p=>h.categories.some(g=>g.id===p.id)))),this.selectedPoiTypeFilters.length>0&&(f=f.filter(h=>h.booths.some(p=>this.selectedPoiTypeFilters.some(g=>p.poiTypeId===g.id)))),!o)return this.defaultSearchItems;const S=[o.replace(/&[^&=]+=[^&]+/g,"")];if(this.heatmapYah)return d.heatmapData.yah.filter(p=>Number.isNaN(Number(o))?p:p.viewCount>=Number(o)).sort((p,g)=>d.getClicksByType(g)-d.getClicksByType(p));const B=[],O=new Set,z=new Set,G=new Set,q=new Set;function Y(h){return h?h.replace(/[!@#$%^*-\.,\(\)^#$%:?_+'"\/]/g," ").replace(/\s\s+/g," "):""}function b(h,p){return!h||!p?!1:Y(h).toLowerCase().includes(Y(p).toLowerCase())}function Q(h,p){return h?b(h,p)||b(C.levelTerm+" "+h,p):!1}f.forEach(h=>{S.some(p=>b(h.name,p)||h.booths.some(g=>!p&&b(g.name,p)||Q(g.layer?.name??null,p)))&&O.add(h)}),this.selectedCategoryFilters.length>0&&A.forEach(h=>{(this.heatmap||!(h instanceof M)||!Array.from(O).find(g=>g.booths.includes(h)))&&S.some(g=>b(h.title||"",g)||b(h.name,g)||b(h.fullName,g)||Q(h.layer?.name??null,g))&&z.add(h)});const tt=y,et=m;if(tt.forEach(h=>{S.some(p=>b(h.name||"",p)||b(h.description||"",p))&&G.add(h)}),et.forEach(h=>{S.some(p=>b(h.name,p)||b(h.company,p)||b(h.jobTitle,p))&&q.add(h)}),B.push(...G),B.push(...O),this.heatmap)return B.sort((h,p)=>d.getClicksByType(p)-d.getClicksByType(h));const ot=new Map(B.map(h=>[h.id,h]));return B.map(h=>{if(!h.name)return null;const p=J(h instanceof I&&h.fullName.toLowerCase()||h.name.toLowerCase()),g=p.indexOf(J(o));if(g===-1)return null;const $={id:h.id,position:g,lowerCaseName:p,featured:!1};return h instanceof x&&($.featured=h.featured),$}).filter(Boolean).sort((h,p)=>(h.featured||p.featured)&&h.featured!==p.featured?h.featured?-1:1:h.position!==p.position?h.position-p.position:h.lowerCaseName.localeCompare(p.lowerCaseName)||String(h.id).localeCompare(String(p.id))).map(({id:h})=>ot.get(h))}get searchList(){return[...this.rootStore.eventStore.eventItems,...this.rootStore.speakerStore.speakers,...this.rootStore.categoryStore.categories.filter(o=>o.exhibitors.length),...this.rootStore.exhibitorStore.exhibitors,...this.rootStore.boothStore.booths]}get foundInDescription(){if(this.list?.type!=="search")return[];const o=this.list?.text?.trim().toLowerCase();if(!o)return[];const a=this.fuzzySearchItems.map(({item:r})=>r),s=new Set(a.map(r=>r.name)),c=this.categoryFilteredSearchList.filter(r=>!s.has(r.name)),i=[];for(const r of c){const d=r.description;if(!d)continue;const k=(X(d)?j(d):d).toLowerCase().indexOf(o);k!==-1&&i.push({item:r,pos:k})}return i.sort((r,d)=>r.pos-d.pos),i.map(r=>r.item)}get foundInDescriptionStruct(){const o={};if(this.list?.type!=="search")return o;const a=this.list?.text?.trim().toLowerCase();return this.foundInDescription.forEach(s=>{let c=s.description;if(!c)return;X(c)&&(c=j(c));const i=c.toLowerCase().indexOf(a);if(i===-1)return;const r=3,d=i>r?i-r:0,f=c.substring(d).trim();o[s.id]=i>0?`...${f}`:f}),o}get categoryFilteredSearchList(){return this.selectedCategoryFilters.length===0?this.searchList:this.searchList.filter(o=>o instanceof x&&this.selectedCategoryFilters.some(a=>o.categories.some(s=>s.id===a.id)))}get fuzzySearchItems(){if(this.list?.type!=="search")return[];const o=this.list?.text?.trim().toLowerCase();if(!o)return this.defaultSearchItems.map(i=>({item:i,score:0,matches:[]}));const a=this.rootStore.fuzzySearchEngineStore.search(this.categoryFilteredSearchList,o),s=[],c=[];for(const i of a){const r=i.item,d=r.entity.type,f=d==="booth"?r:null,k=d==="exhibitor"?r:null,A=[r.name?.toLowerCase()??"",f?.title?.toLowerCase()??"",f?.fullName?.toLowerCase()??"",...k?.booths?.map(m=>m.name?.toLowerCase()??"")??[]];let y=1/0;for(const m of A){const S=m.indexOf(o);S!==-1&&S<y&&(y=S)}y!==1/0?s.push({result:{item:r,score:0},pos:y}):c.push(i)}return s.sort((i,r)=>i.pos-r.pos),[...s.map(i=>i.result),...c]}get listItems(){if(this.details instanceof T&&this.list.type!=="multi-point-tour")return[this.details.from,this.details.to].filter(o=>o instanceof I);switch(this.list.type){case"search":let o=!(this.heatmap||this.heatmapYah)&&this.rootStore.fuzzySearchEngineStore.engine?this.fuzzySearchItems.map(({item:i})=>i).concat(this.foundInDescription):this.searchItems;return o=o.filter(i=>i.entity.type==="booth"?!i.exhibitors.length:!0),this.hasAppliedFilters?o.filter(i=>{if(this.selectedCategoryFilters.length>0&&i instanceof x&&!this.selectedCategoryFilters.some(r=>i.categories.some(d=>d.id===r.id)))return!1;if(this.selectedPoiTypeFilters.length>0){if(i instanceof x&&!i.booths.some(r=>this.selectedPoiTypeFilters.some(d=>r.poiTypeId===d.id))||i instanceof I&&!this.selectedPoiTypeFilters.some(r=>i.poiTypeId===r.id))return!1;if(i instanceof R&&i.boothId){const r=this.rootStore.boothStore.booths.find(d=>d.id===i.boothId);if(!r||!this.selectedPoiTypeFilters.some(d=>r.poiTypeId===d.id))return!1}}return!0}):o;case"bookmarks":return[...this.rootStore.exhibitorStore.bookmarked,...this.rootStore.eventStore.bookmarked,...this.rootStore.speakerStore.bookmarked,...this.rootStore.boothStore.booths.filter(i=>i.exhibitors.length===0&&i.bookmarkedDirectly)];case"visited":return[...this.rootStore.exhibitorStore.visited,...this.rootStore.eventStore.visited];case"category":return this.list.category.exhibitors;case E:return yt();case"filter":return this.list.items;case"sessions":return this.rootStore.eventStore.eventItems;case"exhibitors":const a=this.rootStore.exhibitorStore.exhibitors,s=this.list.text?.toLowerCase().trim();return s?a.filter(i=>i.name.toLowerCase().includes(s)):a;case"multi-point-tour":const c=this.rootStore.toursStore.getTourById(this.list.tourId);return c?!c.points||c.points.length===0?[]:c.points.map(i=>{const r=parseInt(i);if(!isNaN(r)){const f=this.rootStore.boothStore.boothById.get(r);if(f)return f}return St(i)?.entity||null}).filter(Boolean):[];case"route-planner":return this.rootStore.routePlannerStore.resolvedBooths}throw new Error("Unknown list.type")}get listBooths(){return F(this.listItems,this.rootStore.boothStore.booths,this.rootStore.eventStore.eventItems)}get selectedBooths(){let o=[];this.selectedExhibitor?o=this.selectedExhibitor.booths:this.selectedBooth&&(o=[this.selectedBooth]);const a=this.selectedRoute,s=[a?.from,a?.to,...a?.waypoints??[]].filter(c=>c instanceof I);return o.push(...s),new Set(o)}get hoveredBooths(){let o;return this.hoveredBooth?o=[this.hoveredBooth]:this.hoveredExhibitor&&(o=this.hoveredExhibitor.booths),new Set(o)}get visibility(){return{controls:!this.mapControlsHidden,levels:!this.floorsControlHidden,header:this.wsShown,overlay:!this.hideOverlay,searchButtons:this.searchButtonsOverride??!this.hideOverlay}}setVisibility(o){const a=["controls","levels","header","overlay"],s={...a.reduce((i,r)=>({...i,[r]:!0}),{}),...Object.keys(o).filter(i=>a.includes(i)).reduce((i,r)=>({...i,[r]:o[r]}),{})},c=typeof o.searchButtons=="boolean"?o.searchButtons:null;w&&(Object.values(s).every(Boolean)&&c===null?localStorage.removeItem(W):localStorage.setItem(W,JSON.stringify(c===null?s:{...s,searchButtons:c}))),this.mapControlsHidden=!s.controls,this.floorsControlHidden=!s.levels,this.hideHeaderLogo=!s.header,this.hideFreeOrDemo=!s.header,this.hideOverlay=!s.overlay,this.searchButtonsOverride=c}toggleMapOverlay(){this.overlayPosition==="bottom"&&this.overlaySize==="full"?this.desiredOverlaySize="medium":this.overlayPosition==="bottom"&&this.overlaySize!=="full"&&(this.desiredOverlaySize="full")}changeZoom(o){this.zoomBy=o}zoomIn(){this.changeZoom(1.5)}zoomOut(){this.changeZoom(.66)}fitBounds(){if(this.rootStore.maplibreStore.showMaplibre){const{rect:o}=gt({layerViewbox:this.rootStore.layerStore.viewboxRectangle,explicitArea:ct?H:null,layerRectangle:this.rootStore.layerStore.rectangle,sceneDef:this.rootStore.rendererService.scene,svgArea:H});this.moveToRect=o}else this.moveToRect=this.rootStore.layerStore.rectangle||H;this.rollReset=!0}get previewMode(){const o=w?localStorage.getItem(nt)??localStorage.getItem(rt):null;return o==="true"||o==="1"||this.rootStore.fp.previewMode}get viewerMode(){const o=w?localStorage.getItem(ht)??localStorage.getItem(lt):null;return o==="true"||o==="1"||this.rootStore.fp.viewerMode}get selectedEventItem(){return this.details instanceof R?this.details:null}get defaultMapSettings(){return{zoomtime:500,center:void 0,centerxy:void 0,z:void 0,bearing:0,roll:1}}setMapSettings(o){const a={};for(const s in o)o[s]!=null&&(s==="zoomtime"?a[s]=Math.min(Math.max(o[s]||this.mapSettings.zoomtime,500),5e3):a[s]=o[s]);this.mapSettings={...this.mapSettings,...a}}resetMapSettings(){this.mapSettings={...this.defaultMapSettings}}get baseQRCodeUrl(){return`https://${L.EXPO}.expofp.com`}get viewMapOnPhoneQRCodeUrl(){if(C?.customKioskQrCodeUrl)return C.customKioskQrCodeUrl;const o=new URL(this.baseQRCodeUrl);o.search=window.location.search;const a=o.toString();return console.log("View Map On Phone QR Code Url",a),a}get routeQRCodeUrl(){const o=new URL(this.baseQRCodeUrl),a=this.selectedRoute?.from,s=this.selectedRoute?.to,c=a instanceof I?a.slug:"",i=s instanceof I?s.slug:"";o.search=`?route%3A${encodeURIComponent(i)}%3A${encodeURIComponent(c)}%3Afalse`,st(o.searchParams,this.kioskData,["x","y","z"]);const r=o.toString();return console.log("Route QR Code Url",r),r}get isFeaturedExhibitorActive(){return this.details instanceof x&&!!this.details.featured}get activeInterfaceData(){for(const o of this.interfaceMetadata)if(o.isActive())return o;return null}get searchBoxConfig(){const o=this.activeInterfaceData;return!o||!o.searchBoxConfig?{mode:"search",title:"",subtitle:void 0,badge:void 0,icon:void 0}:o.searchBoxConfig()||{mode:"search",title:"",subtitle:void 0,badge:void 0,icon:void 0}}get searchBoxActions(){return this.activeInterfaceData?.actions?.()??[]}get overlayInterfaceClasses(){const o=[],a=this.activeInterfaceData;return a&&(o.push(a.className),a.additionalClasses&&o.push(...a.additionalClasses())),this.details&&o.push("overlay-has-details"),this.list.type&&o.push(`overlay-list-${this.list.type}`),this.isFeaturedExhibitorActive&&o.push("overlay-exhibitor-featured"),o}get isOverlayOpen(){return this.noOverlay&&!this.overlayOnDemand?!1:this.activeInterfaceData!==null}setOverlayScrolled(o){this.isOverlayScrolled=o}setListScrollTop(o,a){this.listScrollTop=a,this.scrollPositions.set(o,a)}setListScrollItemId(o,a){this.listScrollItemId=a,this.scrollItemIds.set(o,a)}getListScrollTop(o){return this.scrollPositions.get(o)||0}getListScrollItemId(o){return this.scrollItemIds.get(o)||null}clearListScroll(o){this.scrollPositions.delete(o),this.scrollItemIds.delete(o),this.list.type===o&&(this.listScrollTop=0,this.listScrollItemId=null)}get bannerType(){return this.hideFreeOrDemo||this.heatmap?null:L.EXPO==="expo"?"demo":C.expoFpAd||C.isTrial?"free":null}get isBannerVisible(){return this.bannerType!==null}setCurrentBanner(o){this.currentBanner=o}setForceShowDetails(o){this.forceShowDetails=o}get showRouteInstantly(){return!!(this.kiosk&&!this.forceShowDetails)}startBuildRoute(){this.rootStore.selectSearch(""),this.mapControlsHidden=!0,this.floorsControlHidden=!0,this.hideHeaderLogo=!0,this.hideFreeOrDemo=!0,this.hideOverlay=!0,this.hideCookieConsent=!0,this.buildRoute=!0}setGlobalErrorMessage(o){this.globalErrorMessages.push(o)}popGlobalErrorMessage(){this.globalErrorMessages.pop()}initializeUIScale(){if(new URLSearchParams(window.location.search).get("kiosk")!=="0"&&w){const a=localStorage.getItem(U)??localStorage.getItem(N);if(a){const s=parseFloat(a);!isNaN(s)&&s>=.8&&s<=1.4&&(this._customUIScale=s)}}}setUIScale(o,a=!0){if(isNaN(o)||o<this.minUIScale||o>this.maxUIScale){ut.warn(`Invalid ui-scale value: ${o}. Must be between ${this.minUIScale} and ${this.maxUIScale}.`);return}this._customUIScale=o,a&&w&&(localStorage.setItem(U,o.toString()),localStorage.removeItem(N))}resetUIScale(){this._customUIScale=null,w&&(localStorage.removeItem(U),localStorage.removeItem(N))}enableSetKioskMode(o){this.setKioskModeEnabled=o}setKioskData(o){this.kioskData=o}}e([l.struct],t.prototype,"list",void 0),e([l.ref],t.prototype,"details",void 0),e([l.ref],t.prototype,"hoveredExhibitor",void 0),e([l.ref],t.prototype,"hoveredBooth",void 0),e([l],t.prototype,"zoomBy",void 0),e([l],t.prototype,"rollReset",void 0),e([l],t.prototype,"moveToBooths",void 0),e([l],t.prototype,"moveToRect",void 0),e([l],t.prototype,"moveToLocation",void 0),e([l],t.prototype,"menu",void 0),e([l],t.prototype,"searchFocused",void 0),e([l],t.prototype,"searchClearMode",void 0),e([l],t.prototype,"printingPdf",void 0),e([l.struct],t.prototype,"screenSize",void 0),e([l],t.prototype,"desiredOverlaySize",void 0),e([l],t.prototype,"overlayShowsAll",void 0),e([l],t.prototype,"centerMap",void 0),e([l],t.prototype,"zoomAfTransformK",void 0),e([l],t.prototype,"activeListIndex",void 0),e([l],t.prototype,"devicePixelRatio",void 0),e([l],t.prototype,"wsStarted",void 0),e([l],t.prototype,"canvasStarted",void 0),e([l],t.prototype,"kiosk",void 0),e([l],t.prototype,"inIdle",void 0),e([l],t.prototype,"modalActive",void 0),e([l],t.prototype,"galleryActive",void 0),e([l],t.prototype,"hideOverlay",void 0),e([l],t.prototype,"searchButtonsOverride",void 0),e([l],t.prototype,"hideCookieConsent",void 0),e([l],t.prototype,"hideHeaderLogo",void 0),e([l],t.prototype,"hideLogoInBooth",void 0),e([l],t.prototype,"disableBookmarked",void 0),e([l],t.prototype,"hideLanguage",void 0),e([l],t.prototype,"monochrome",void 0),e([l],t.prototype,"heatmap",void 0),e([l],t.prototype,"heatmapYah",void 0),e([l],t.prototype,"debugCircles",void 0),e([l],t.prototype,"mapControlsHidden",void 0),e([l],t.prototype,"floorsControlHidden",void 0),e([l],t.prototype,"hideFreeOrDemo",void 0),e([l],t.prototype,"freeBannerDismissed",void 0),e([l],t.prototype,"currentBanner",void 0),e([l],t.prototype,"sceneDefReady",void 0),e([l],t.prototype,"categoryFilterOpen",void 0),e([l],t.prototype,"selectedCategoryFilters",void 0),e([l],t.prototype,"selectedPoiTypeFilters",void 0),e([l],t.prototype,"selectedTrack",void 0),e([l],t.prototype,"subButtonsVisible",void 0),e([l],t.prototype,"mapControlsDOMRect",void 0),e([l],t.prototype,"searchBoxMode",void 0),e([l],t.prototype,"searchBoxTitle",void 0),e([l],t.prototype,"searchBoxSubtitle",void 0),e([l],t.prototype,"routeTitle",void 0),e([l],t.prototype,"routeDescription",void 0),e([l],t.prototype,"isMultiPointRoute",void 0),e([l],t.prototype,"tourTitle",void 0),e([l],t.prototype,"tourDescription",void 0),e([l],t.prototype,"isMultiPointTour",void 0),e([l],t.prototype,"pathwayOnlyMode",void 0),e([l],t.prototype,"isOverlayScrolled",void 0),e([l],t.prototype,"listScrollTop",void 0),e([l],t.prototype,"listScrollItemId",void 0),e([l],t.prototype,"listScrollIndex",void 0),e([l],t.prototype,"_customUIScale",void 0),e([u],t.prototype,"setSelectedCategoryFilters",null),e([u],t.prototype,"resetCategoryFilter",null),e([u],t.prototype,"setSearchClearMode",null),e([u],t.prototype,"setRouteTitle",null),e([u],t.prototype,"setRouteDescription",null),e([u],t.prototype,"setIsMultiPointRoute",null),e([u],t.prototype,"setTourTitle",null),e([u],t.prototype,"setTourDescription",null),e([u],t.prototype,"setIsMultiPointTour",null),e([u],t.prototype,"setPathwayOnlyMode",null),e([u],t.prototype,"setMultiPointTourList",null),e([n],t.prototype,"activePathwayLayers",null),e([n],t.prototype,"highlightedBooths",null),e([n],t.prototype,"rtl",null),e([n({keepAlive:!0})],t.prototype,"noOverlay",null),e([n],t.prototype,"overlayOnDemand",null),e([n],t.prototype,"overlayHiddenNow",null),e([n({keepAlive:!0})],t.prototype,"selectedExhibitor",null),e([n({keepAlive:!0})],t.prototype,"selectedBooth",null),e([n({keepAlive:!0})],t.prototype,"selectedCategory",null),e([n({keepAlive:!0})],t.prototype,"selectedRoute",null),e([n({keepAlive:!0})],t.prototype,"selectedSpeaker",null),e([n({keepAlive:!0})],t.prototype,"uiScale",null),e([n({keepAlive:!0})],t.prototype,"isGuidedToursActive",null),e([n({keepAlive:!0})],t.prototype,"getRouteNextFloor",null),e([n],t.prototype,"headerHeightRem",null),e([n],t.prototype,"headerHeightPx",null),e([n],t.prototype,"overlayPosition",null),e([n],t.prototype,"overlayCollapsed",null),e([n],t.prototype,"overlaySize",null),e([n],t.prototype,"overlayBottom",null),e([n],t.prototype,"overlayLeft",null),e([n],t.prototype,"overlayWidthPx",null),e([n({keepAlive:!0})],t.prototype,"wsImageHeightPx",null),e([n],t.prototype,"wsPaddingPx",null),e([n],t.prototype,"wsOccupiedHeightPx",null),e([n({keepAlive:!0})],t.prototype,"wsShown",null),e([n],t.prototype,"wsDesktopPosition",null),e([n],t.prototype,"wsPosition",null),e([n],t.prototype,"responsiveClass",null),e([n],t.prototype,"mapVisibleTop",null),e([n],t.prototype,"mapVisibleBottom",null),e([n],t.prototype,"mapVisibleStart",null),e([n],t.prototype,"searchActionsHeightPx",null),e([n],t.prototype,"fullSizeOffset",null),e([n],t.prototype,"shouldShowSearchButtons",null),e([n],t.prototype,"shouldShowMobileToggle",null),e([n],t.prototype,"mobileToggleIsListMode",null),e([n],t.prototype,"canvasVisibleRectPx",null),e([n],t.prototype,"shouldShiftMapRect",null),e([n],t.prototype,"hasAppliedFilters",null),e([n],t.prototype,"canvasVisibleRectPt",null),e([n],t.prototype,"canvasSizePt",null),e([n({keepAlive:!0})],t.prototype,"shouldUseBackdrop",null),e([l],t.prototype,"forceDim",void 0),e([u],t.prototype,"setForceDim",null),e([n],t.prototype,"dimmed",null),e([n],t.prototype,"defaultSearchItems",null),e([n],t.prototype,"searchItems",null),e([n],t.prototype,"searchList",null),e([n],t.prototype,"foundInDescription",null),e([n],t.prototype,"foundInDescriptionStruct",null),e([n],t.prototype,"categoryFilteredSearchList",null),e([n],t.prototype,"fuzzySearchItems",null),e([n],t.prototype,"listItems",null),e([n({keepAlive:!0})],t.prototype,"listBooths",null),e([n({keepAlive:!0})],t.prototype,"selectedBooths",null),e([n({keepAlive:!0})],t.prototype,"hoveredBooths",null),e([n],t.prototype,"visibility",null),e([u],t.prototype,"setVisibility",null),e([u],t.prototype,"toggleMapOverlay",null),e([u],t.prototype,"changeZoom",null),e([u],t.prototype,"zoomIn",null),e([u],t.prototype,"zoomOut",null),e([u],t.prototype,"fitBounds",null),e([n({keepAlive:!0})],t.prototype,"selectedEventItem",null),e([l],t.prototype,"mapSettings",void 0),e([u],t.prototype,"setMapSettings",null),e([u],t.prototype,"resetMapSettings",null),e([n],t.prototype,"baseQRCodeUrl",null),e([n],t.prototype,"viewMapOnPhoneQRCodeUrl",null),e([n],t.prototype,"routeQRCodeUrl",null),e([n],t.prototype,"isFeaturedExhibitorActive",null),e([n],t.prototype,"activeInterfaceData",null),e([n],t.prototype,"searchBoxConfig",null),e([n],t.prototype,"searchBoxActions",null),e([n],t.prototype,"overlayInterfaceClasses",null),e([n],t.prototype,"isOverlayOpen",null),e([u],t.prototype,"setOverlayScrolled",null),e([u],t.prototype,"setListScrollTop",null),e([u],t.prototype,"setListScrollItemId",null),e([u],t.prototype,"getListScrollTop",null),e([u],t.prototype,"getListScrollItemId",null),e([u],t.prototype,"clearListScroll",null),e([n],t.prototype,"bannerType",null),e([n],t.prototype,"isBannerVisible",null),e([u],t.prototype,"setCurrentBanner",null),e([l],t.prototype,"forceShowDetails",void 0),e([u],t.prototype,"setForceShowDetails",null),e([n],t.prototype,"showRouteInstantly",null),e([l],t.prototype,"buildRoute",void 0),e([u],t.prototype,"startBuildRoute",null),e([l],t.prototype,"globalErrorMessages",void 0),e([u],t.prototype,"setGlobalErrorMessage",null),e([u],t.prototype,"popGlobalErrorMessage",null),e([u],t.prototype,"initializeUIScale",null),e([u],t.prototype,"setUIScale",null),e([u],t.prototype,"resetUIScale",null),e([l],t.prototype,"setKioskModeEnabled",void 0),e([u],t.prototype,"enableSetKioskMode",null),e([l],t.prototype,"kioskData",void 0),e([u],t.prototype,"setKioskData",null);function F(K,o,a=[]){const s=[];return K.forEach(c=>{c instanceof x?s.push(...c.booths):c instanceof I?s.push(c):c instanceof R?c.boothId&&s.push(o.find(i=>i.id===c.boothId)):c instanceof V&&a.filter(i=>i.speakers.some(r=>r.id===c.id)&&i.boothId).forEach(i=>s.push(o.find(r=>r.id===i.boothId)))}),new Set(s.filter(Boolean))}