{"version":3,"file":"js/1726-d4b8346b373b24c3c2fd.chunk.js","mappings":"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","sources":["webpack://nodalview/./app/javascript/src/global/test_helper.js","webpack://nodalview/./app/javascript/src/react/helpers/string.js","webpack://nodalview/./app/javascript/src/react/hooks/use_toast.js","webpack://nodalview/./app/javascript/src/react/providers/nodes_provider/nodes_provider.jsx","webpack://nodalview/./app/javascript/src/react/providers/toast_provider/helper.js","webpack://nodalview/./app/javascript/src/react/providers/toast_provider/components/toast_item.styled.jsx","webpack://nodalview/./app/javascript/src/react/providers/toast_provider/components/toast_item.jsx","webpack://nodalview/./app/javascript/src/react/providers/toast_provider/components/toasts_container.styled.jsx","webpack://nodalview/./app/javascript/src/react/providers/toast_provider/components/toasts_container.jsx","webpack://nodalview/./app/javascript/src/react/providers/toast_provider/toast_provider.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/hooks/use_panoramas_media_query.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/constants.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actions/information_hotspots.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actions/navigation_hotspots.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actors/fetch_virtual_visit.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/virtual_visit_viewer_machine.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actions/krpano.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actions/virtual_visit.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actions/hotspots.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/actions/notifications.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/machines/viewer/virtual_visit_viewer_machine_context.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/hooks/use_virtual_visit_viewer_machine_actor.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/hooks/use_virtual_visit_viewer_machine_state.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_information_hotspot/virtual_visit_viewer_information_hotspot.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_hotspot_popover/virtual_visit_viewer_hotspot_popover.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_hotspot_popover/virtual_visit_viewer_hotspot_popover.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/hooks/use_virtual_visit_viewer_machine_context.js","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_information_hotspot_popover/virtual_visit_viewer_information_hotspot_popover.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_navigation_hotspot_popover/virtual_visit_viewer_navigation_hotspot_popover.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_panorama/virtual_visit_viewer_panorama.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_panorama/virtual_visit_viewer_panorama.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_panoramas_list/virtual_visit_viewer_panoramas_list.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panel_button/panel_button.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panel_button/panel_button.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panel_card/panel_card.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panel_card/panel_card.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panoramas_panel/panoramas_panel.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panoramas_panel/panoramas_panel.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/panoramas_viewer_button/panoramas_viewer_button.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/business_card_panel/business_card_panel.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/business_card_viewer_button/business_card_viewer_button.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/floorplans_panel/floorplans_panel.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/floorplans_panel/floorplans_panel.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/floorplans_viewer_button/floorplans_viewer_button.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/location_viewer_button/location_viewer_button.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/property_details_panel/property_details_panel.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/property_details_panel/property_details_panel.feature.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/property_details_panel/property_details_panel.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/property_details_viewer_button/property_details_viewer_button.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_panels/virtual_visit_viewer_panels.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_panels/virtual_visit_viewer_panels.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_logo/virtual_visit_viewer_logo.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_logo/virtual_visit_viewer_logo.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_view/virtual_visit_viewer_view.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_view/virtual_visit_viewer_view.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_content/virtual_visit_viewer_content.styled.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_content/virtual_visit_viewer_content.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer_machine/virtual_visit_viewer_machine.jsx","webpack://nodalview/./app/javascript/src/react/virtual_visits/components/virtual_visit_viewer/virtual_visit_viewer.jsx"],"sourcesContent":["// eslint-disable-next-line camelcase\nimport { enable_data_test_attributes } from 'NodalviewEnvironment';\n\nexport function purposeAttributes(purpose) {\n if (enable_data_test_attributes) {\n return { 'data-test-purpose': purpose };\n } else {\n return {};\n }\n}\n","import {camelCase, isArray, isObject, snakeCase, startCase, transform} from \"lodash\";\n\nexport const PascalCase = (str) => {\n return startCase(camelCase(str)).replace(/ /g, '');\n}\n\nexport const toSnakeCase = (object) => {\n if (typeof object === 'string')\n return snakeCase(object);\n\n return transform(object, (acc, value, key, target) => {\n const snakeKey = isArray(target) ? key : snakeCase(key);\n\n acc[snakeKey] = isObject(value) ? toSnakeCase(value) : value;\n })\n}\n\nexport const toCamelCase = (object) => {\n if (typeof object === 'string')\n return camelCase(object);\n\n return transform(object, (acc, value, key, target) => {\n const camelKey = isArray(target) ? key : camelCase(key);\n\n acc[camelKey] = isObject(value) ? toCamelCase(value) : value;\n })\n}\n\nexport const withUnit = (value, unit) => {\n if (value && unit === 'metric')\n return `${value} m²`;\n if (value && unit === 'imperial')\n return `${value} sqft`;\n if (value && unit) {\n return `${value} ${unit}`;\n }\n return value;\n}","import {ToastContext} from \"@react/providers\";\nimport {useContext} from \"react\";\n\nexport const useToast = () => {\n return useContext(ToastContext)\n}","import { GlobalStyles, Theme, TranslationsContext } from '@nodalview/nodes-web';\nimport { get, has } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { useEffect, useMemo } from 'react';\nimport { ThemeProvider } from 'styled-components';\nimport { Schema } from '@react/helpers';\nimport { ToastProvider } from '../toast_provider';\n\nexport const WithNodesProvider = (Component, options) => {\n const HocComponent = (props) => (\n <NodesProvider {...options}>\n <Component {...props} />\n </NodesProvider>\n );\n HocComponent.displayName = `WithNodesProvider(${Component.displayName ?? 'Component'})`;\n return HocComponent;\n};\n\nexport const NodesProvider = ({ children, base, colors, fonts }) => {\n const i18nContext = useMemo(\n () => ({\n t: (translationKey, variables) => window.I18n.t(`react.${translationKey}`, variables),\n i18n: window.I18n,\n }),\n [],\n );\n\n const theme = new Theme({ base, colors, fonts });\n\n useEffect(() => {\n const { locale, translations } = window.I18n ?? {};\n\n if (!translations) return;\n\n if (has(translations, `${locale}.react.shared.yup_rules`)) {\n const rules = get(translations, `${locale}.react.shared.yup_rules`);\n Schema?.setLocale(rules);\n } else {\n const rules = get(translations, 'en.react.shared.yup_rules');\n Schema?.setLocale(rules);\n }\n }, []);\n\n return (\n <ThemeProvider theme={theme}>\n <GlobalStyles />\n <TranslationsContext.Provider value={i18nContext}>\n <ToastProvider>{children}</ToastProvider>\n </TranslationsContext.Provider>\n </ThemeProvider>\n );\n};\n\nNodesProvider.propTypes = {\n base: PropTypes.number,\n colors: PropTypes.shape({}),\n fonts: PropTypes.shape({}),\n};\n\nNodesProvider.defaultProps = {\n base: 14,\n colors: {},\n fonts: {},\n};\n","export function animateContainer(container, element) {\n const {height} = element.getBoundingClientRect();\n\n container.animate(\n [\n {transform: `translateY(-${height}px)`},\n {transform: 'translateY(0)'},\n ], {\n easing: 'ease-out',\n duration: 300,\n }\n );\n}\n\nexport function setDimensions (element) {\n const {height, width} = element.getBoundingClientRect();\n\n element.style.setProperty('width', `${width}px`);\n element.style.setProperty('height', `${height}px`);\n}","import styled, {css} from 'styled-components';\n\nexport const Item = styled.div(({theme: {utils}}) => css`\n display: block;\n margin-bottom: ${utils.rem(8)};\n opacity: 0;\n transition: ${utils.transition('opacity', 'transform')};\n transform: translateX(50%);\n \n &:hover {\n cursor: pointer;\n }\n \n &.active {\n opacity: 1;\n transform: translateX(0);\n }\n`)","import { purposeAttributes } from '@global';\nimport { Alert, Transition } from '@nodalview/nodes-web';\nimport PropTypes from 'prop-types';\nimport { useEffect, useRef, useState } from 'react';\nimport { setDimensions } from '../helper';\nimport * as Styled from './toast_item.styled';\n\nexport const ToastItem = ({ id, type, message, duration, onEnter, onExit }) => {\n const ref = useRef(null);\n const [visible, setVisible] = useState(true);\n const [hover, setHover] = useState(false);\n\n useEffect(() => {\n if (ref.current) {\n setDimensions(ref.current);\n onEnter?.(ref.current);\n }\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [ref]);\n\n useEffect(() => {\n if (hover) return;\n\n const timerId = setTimeout(() => setVisible(false), duration);\n return () => clearTimeout(timerId);\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [hover]);\n\n return (\n <Transition as={Styled.Item} visible={visible} onTransitionEnd={() => onExit(id)}>\n <Alert\n type={type}\n ref={ref}\n onClick={() => setVisible(false)}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n {...purposeAttributes('toast')}\n >\n {message}\n </Alert>\n </Transition>\n );\n};\n\nToastItem.propTypes = {\n id: PropTypes.string.isRequired,\n type: PropTypes.string,\n message: PropTypes.string,\n duration: PropTypes.number,\n onEnter: PropTypes.func,\n onExit: PropTypes.func,\n};\n\nToastItem.defaultProps = {\n type: 'success',\n message: '',\n duration: 3500,\n onEnter: undefined,\n onExit: undefined,\n};\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div(\n ({ theme: { utils } }) => css`\n max-height: 100vh;\n padding: ${utils.rem(16)};\n position: fixed;\n right: 0;\n top: 0;\n z-index: 2147483647;\n\n &:empty {\n display: none;\n }\n `,\n);\n\nexport const Item = styled.div(\n ({ theme: { utils } }) => css`\n display: block;\n margin-bottom: ${utils.rem(8)};\n opacity: 0;\n transition: ${utils.transition('opacity', 'transform')};\n transform: translateX(50%);\n\n &.active {\n opacity: 1;\n transform: translateX(0);\n }\n `,\n);\n","import { purposeAttributes } from '@global';\nimport PropTypes from 'prop-types';\nimport { useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { animateContainer } from '@react/providers/toast_provider/helper';\nimport { ToastItem } from './toast_item';\nimport * as Styled from './toasts_container.styled';\n\nexport const BackwardsCompatibleToastsContainer = ({ stack, onEnter, onExit }) => {\n const containerRef = useRef(document.getElementById('toasts-container'));\n\n const handleEnter = (element) => {\n animateContainer(containerRef.current, element);\n onEnter?.(element);\n };\n\n if (!containerRef.current) {\n return <NewToastsContainer stack={stack} onEnter={onEnter} onExit={onExit} />;\n }\n\n return createPortal(\n stack.map((item) => (\n <ToastItem key={item.id} {...item} onEnter={handleEnter} onExit={onExit} />\n )),\n containerRef.current,\n );\n};\n\nBackwardsCompatibleToastsContainer.propTypes = {\n stack: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n }),\n ),\n onEnter: PropTypes.func,\n onExit: PropTypes.func,\n};\n\nBackwardsCompatibleToastsContainer.defaultProps = {\n stack: [],\n onEnter: undefined,\n onExit: undefined,\n};\n\n/**\n * This component should be used instead of <BackwardsCompatibleToastsContainer /> when ToastCenter will be totally replaced.\n * @param stack: array\n * @param onEnter: function\n * @param onExit: function\n * @returns {React.ReactPortal}\n * @constructor\n */\nexport function NewToastsContainer({ stack, onEnter, onExit }) {\n const containerRef = useRef(null);\n\n const handleEnter = (element) => {\n animateContainer(containerRef.current, element);\n onEnter?.(element);\n };\n\n return createPortal(\n <Styled.Container ref={containerRef} {...purposeAttributes('toasts_container')}>\n {stack.map((item) => (\n <ToastItem key={item.id} {...item} onEnter={handleEnter} onExit={onExit} />\n ))}\n </Styled.Container>,\n document.body,\n );\n}\n","import uniqueId from 'lodash/uniqueId'\nimport {createContext, useCallback, useMemo, useState} from \"react\";\nimport {BackwardsCompatibleToastsContainer} from \"./components\";\n\nfunction defaultContextCallback(_message) {\n throw new Error('ToastProvider is missing')\n}\n\nexport const ToastContext = createContext({\n success: defaultContextCallback,\n warning: defaultContextCallback,\n error: defaultContextCallback,\n})\n\nexport const ToastProvider = ({children}) => {\n const [stack, setStack] = useState([]);\n\n const addToast = useCallback((type, message, ...opts) => {\n const id = `toast-${uniqueId()}`;\n const toastItem = {...opts, type, message, id};\n\n setStack(currentStack => [toastItem, ...currentStack]);\n }, []);\n\n const handleExit = (toastId) => {\n setStack(currentStack => currentStack.filter(item => item.id !== toastId));\n }\n\n const context = useMemo(() => ({\n success: (message, opts) => addToast('success', message, opts),\n warning: (message, opts) => addToast('warning', message, opts),\n error: (message, opts) => addToast('error', message, opts),\n }), [addToast]);\n\n return (\n <ToastContext.Provider value={context}>\n {children}\n <BackwardsCompatibleToastsContainer stack={stack} onExit={handleExit}/>\n </ToastContext.Provider>\n )\n}","import { useMediaQueries } from '@react/hooks';\n\nexport function usePanoramasMediaQuery() {\n return useMediaQueries('(min-width: 768px) and (min-height: 640px) and (max-aspect-ratio: 2/1)');\n}\n","export const EVENTS = {\n CANCEL: 'CANCEL',\n GO_TO_PANORAMA: 'GO_TO_PANORAMA',\n LOADED: 'LOADED',\n RETRY: 'RETRY',\n SET_KRPANO: 'SET_KRPANO',\n SHOW_INFOBOX: 'SHOW_INFOBOX',\n HIDE_INFOBOX: 'HIDE_INFOBOX',\n SHOW_POPOVER: 'SHOW_POPOVER',\n HIDE_POPOVER: 'HIDE_POPOVER',\n};\n\nexport const HOTSPOT_TYPES = {\n INFOBOX: 'informationHotspots',\n NAVIGATION: 'navigationHotspots',\n};\n","/* eslint-disable no-underscore-dangle */\nimport { RenderInformationHotspotToKrpano } from '../../shared';\nimport { EVENTS, HOTSPOT_TYPES } from '../constants';\n\nexport function RenderInformationHotspot({ context, event, self: actor }) {\n const { hotspot } = event.output ?? {};\n\n const renderedHotspot = RenderInformationHotspotToKrpano(\n context.krpano,\n `${hotspot.__typename}_${hotspot.id}`,\n hotspot,\n );\n\n renderedHotspot.addevent('onclick', () => {\n actor.send({\n type: EVENTS.SHOW_INFOBOX,\n kind: HOTSPOT_TYPES.INFOBOX,\n id: hotspot.id,\n });\n });\n renderedHotspot.addevent('onover', () => {\n actor.send({\n type: EVENTS.SHOW_POPOVER,\n kind: HOTSPOT_TYPES.INFOBOX,\n id: hotspot.id,\n });\n });\n renderedHotspot.addevent('onout', () => {\n actor.send({\n type: EVENTS.HIDE_POPOVER,\n id: hotspot.id,\n });\n });\n\n return renderedHotspot;\n}\n\nexport const GetInformationHotspot = ({ context, event }) => {\n const hotspots = context.activePanorama.informationHotspots;\n const hotspot = hotspots.find((hs) => hs.id === event.id);\n\n return {\n ...hotspot,\n kind: HOTSPOT_TYPES.INFOBOX,\n };\n};\n","/* eslint-disable no-underscore-dangle */\nimport { RenderNavigationHotspotToKrpano } from '../../shared';\nimport { EVENTS, HOTSPOT_TYPES } from '../constants';\n\nexport function RenderNavigationHotspot({ context, event, self: actor }) {\n const { hotspot } = event.output ?? {};\n const { activePanorama } = context;\n\n const renderedHotspot = RenderNavigationHotspotToKrpano(\n context.krpano,\n `${hotspot.__typename}_${hotspot.id}`,\n hotspot,\n );\n\n renderedHotspot.addevent('onclick', () => {\n actor.send({\n type: EVENTS.GO_TO_PANORAMA,\n from: activePanorama.uuid,\n to: hotspot.targetPanorama,\n hotspotId: hotspot.id,\n view: {\n fov: hotspot.fov,\n hlookat: hotspot.hlookat,\n vlookat: hotspot.vlookat,\n },\n });\n });\n renderedHotspot.addevent('onover', () => {\n actor.send({\n type: EVENTS.SHOW_POPOVER,\n kind: HOTSPOT_TYPES.NAVIGATION,\n id: hotspot.id,\n });\n });\n renderedHotspot.addevent('onout', () => {\n actor.send({\n type: EVENTS.HIDE_POPOVER,\n id: hotspot.id,\n });\n });\n\n return renderedHotspot;\n}\n\nexport const GetNavigationHotspot = ({ context, event }) => {\n const hotspots = context.activePanorama.navigationHotspots;\n const hotspot = hotspots.find((hs) => hs.id === event.id);\n\n const targetPanorama = context.panoramas.find((pano) => pano.uuid === hotspot.targetPanorama);\n\n return {\n ...hotspot,\n targetPanorama,\n kind: HOTSPOT_TYPES.NAVIGATION,\n };\n};\n","import { responseToJson, webRestClientApi } from '@shared/api/client';\nimport { mapKeys } from 'lodash';\nimport { toCamelCase } from '@react/helpers';\n\nfunction renameInvalidPanoramaKeys(_value, key) {\n if (key === 'navigationHotspot') return 'navigationHotspots';\n if (key === 'informationHotspot') return 'informationHotspots';\n return key;\n}\n\nexport async function FetchVirtualVisit({ input }) {\n const url = `/virtual_visits/${input.virtualVisitUuid}.json`;\n const response = await webRestClientApi(url).then(responseToJson);\n\n const { panoramas = [], property = null, ...virtualVisit } = toCamelCase(response);\n\n return {\n property,\n virtualVisit,\n panoramas: panoramas.map((p) => mapKeys(p, renameInvalidPanoramaKeys)),\n };\n}\n","import { assign, createMachine, emit, fromPromise } from 'xstate';\nimport { LoadPanorama, LoadPanoramaInput, SelectPanoramaByName } from '../shared';\nimport {\n NotifyErrorAction,\n RegisterKrpanoEvents,\n RenderHotspots,\n SelectHotspot,\n SetKrpano,\n SetVirtualVisit,\n} from './actions';\nimport { FetchVirtualVisit } from './actors';\nimport { EVENTS } from './constants';\n\nexport const VirtualVisitViewerMachine = createMachine({\n initial: 'FETCHING',\n ìd: 'ROOT',\n context: ({ input }) => ({\n virtualVisitUuid: input?.virtualVisitUuid ?? null,\n virtualVisit: null,\n property: null,\n panoramas: [],\n krpano: null,\n activePanorama: null,\n activeHotspot: null,\n activePanel: null,\n coordinates: { x: 0, y: 0 },\n }),\n states: {\n FETCHING: {\n id: 'FETCHING',\n invoke: {\n src: 'fetchVirtualVisit',\n input: ({ context }) => context,\n onDone: { target: 'INITIALIZING', actions: ['setVirtualVisit'] },\n onError: { target: 'ERROR', actions: ['notifyError'] },\n },\n },\n INITIALIZING: {\n id: 'INITIALIZING',\n on: {\n [EVENTS.SET_KRPANO]: { actions: ['initialise', 'registerEvents'] },\n [EVENTS.LOADED]: { target: 'READY', actions: ['selectPanorama', 'renderHotspots'] },\n },\n },\n ERROR: {\n on: {\n [EVENTS.RETRY]: { target: 'FETCHING' },\n },\n },\n READY: {\n type: 'parallel',\n states: {\n VIEWER: {\n id: 'VIEWER',\n initial: 'IDLE',\n states: {\n IDLE: {\n on: {\n [EVENTS.GO_TO_PANORAMA]: {\n target: 'LOADING_PANORAMA',\n actions: ['selectPanorama'],\n },\n [EVENTS.SHOW_INFOBOX]: {\n target: 'SHOWING_INFOBOX',\n actions: ['selectHotspot'],\n },\n },\n },\n LOADING_PANORAMA: {\n id: 'LOADING_PANORAMA',\n invoke: {\n src: 'loadPanorama',\n input: LoadPanoramaInput,\n onDone: { target: 'IDLE', actions: ['renderHotspots'] },\n onError: { target: 'IDLE', actions: ['notifyError'] },\n },\n },\n SHOWING_INFOBOX: {\n on: {\n [EVENTS.CANCEL]: { target: 'IDLE' },\n },\n },\n },\n },\n POPOVER: {\n id: 'POPOVER',\n initial: 'HIDDEN',\n states: {\n HIDDEN: {\n on: {\n [EVENTS.SHOW_POPOVER]: {\n target: 'VISIBLE',\n actions: ['selectHotspot'],\n },\n },\n },\n VISIBLE: {\n on: {\n [EVENTS.HIDE_POPOVER]: { target: 'HIDDEN' },\n [EVENTS.CANCEL]: { target: 'HIDDEN' },\n },\n },\n },\n },\n },\n },\n },\n}).provide({\n actors: {\n fetchVirtualVisit: fromPromise(FetchVirtualVisit),\n loadPanorama: fromPromise(LoadPanorama),\n },\n actions: {\n // Init\n initialise: assign(SetKrpano),\n registerEvents: RegisterKrpanoEvents,\n setVirtualVisit: assign(SetVirtualVisit),\n\n // Panoramas\n selectPanorama: assign(SelectPanoramaByName),\n\n // Hotspots\n renderHotspots: RenderHotspots,\n selectHotspot: assign(SelectHotspot),\n unselectHotspot: assign({ activeHotspot: null }),\n\n // Notifications\n notifyError: emit(NotifyErrorAction),\n },\n});\n","import { PANO_NAME_PREFIX } from '../../shared';\nimport { EVENTS } from '../constants';\n\nexport function SetKrpano({ event }) {\n return {\n krpano: event.krpano,\n };\n}\n\nexport function RegisterKrpanoEvents({ context, self }) {\n const { krpano } = context;\n\n krpano.events.addListener('onloadcomplete', () =>\n self.send({ type: EVENTS.LOADED, to: krpano.get('xml.scene')?.replace(PANO_NAME_PREFIX, '') }),\n );\n}\n","export function SetVirtualVisit({ event }) {\n return {\n virtualVisit: event.output.virtualVisit,\n property: event.output.property,\n panoramas: event.output.panoramas,\n };\n}\n","import { hasPanorama } from '../../shared';\nimport { HOTSPOT_TYPES } from '../constants';\nimport { GetInformationHotspot, RenderInformationHotspot } from './information_hotspots';\nimport { GetNavigationHotspot, RenderNavigationHotspot } from './navigation_hotspots';\n\nexport function RenderHotspots({ context, self, system }) {\n const { activePanorama, panoramas } = context;\n const { navigationHotspots = [], informationHotspots = [] } = activePanorama ?? {};\n\n navigationHotspots\n .filter((hotspot) => hasPanorama(panoramas, hotspot.targetPanorama))\n .forEach((hotspot) => {\n const event = { output: { hotspot } };\n RenderNavigationHotspot({ context, event, self, system });\n });\n\n informationHotspots.forEach((hotspot) => {\n const event = { output: { hotspot } };\n RenderInformationHotspot({ context, event, self, system });\n });\n}\n\nexport function SelectHotspot({ context, event }) {\n const getCoordinates = ({ ath, atv }) => context.krpano.spheretoscreen(ath, atv);\n\n switch (event.kind) {\n case HOTSPOT_TYPES.INFOBOX: {\n const activeHotspot = GetInformationHotspot({ context, event });\n return {\n activeHotspot,\n coordinates: getCoordinates(activeHotspot),\n };\n }\n case HOTSPOT_TYPES.NAVIGATION: {\n const activeHotspot = GetNavigationHotspot({ context, event });\n return {\n activeHotspot,\n coordinates: getCoordinates(activeHotspot),\n };\n }\n default:\n return {};\n }\n}\n","export const NotifyErrorAction = ({ event }) => ({\n type: 'error',\n message: event.error?.message ?? event.error,\n});\n\nexport const NotifySuccessAction = ({ event }) => ({\n type: 'success',\n message: event.output.message,\n});\n","import { createActorContext } from '@xstate/react';\nimport { VirtualVisitViewerMachine } from './virtual_visit_viewer_machine';\n\nexport const VirtualVisitViewerMachineContext = createActorContext(VirtualVisitViewerMachine);\n","import { VirtualVisitViewerMachineContext } from '../machines/viewer';\n\nexport function useVirtualVisitViewerMachineActor() {\n return VirtualVisitViewerMachineContext.useActorRef();\n}\n","import { useEffect, useState } from 'react';\nimport { useVirtualVisitViewerMachineActor } from './use_virtual_visit_viewer_machine_actor';\n\nexport function useVirtualVisitViewerMachineState() {\n const actor = useVirtualVisitViewerMachineActor();\n const [state, setState] = useState(() => actor.getSnapshot());\n\n useEffect(() => {\n const subscription = actor.subscribe((snapshot) => {\n setState(snapshot);\n });\n return subscription.unsubscribe;\n }, [actor]);\n\n return state;\n}\n","import { useVirtualVisitViewerMachineActor, useVirtualVisitViewerMachineState } from '../../hooks';\nimport { EVENTS } from '../../machines/viewer';\nimport { InformationHotspotDialog } from '../information_hotspot_dialog';\n\nexport const VirtualVisitViewerInformationHotspot = () => {\n const actor = useVirtualVisitViewerMachineActor();\n const state = useVirtualVisitViewerMachineState();\n const { activeHotspot } = state.context;\n\n const isDialogVisible = state.matches('READY.VIEWER.SHOWING_INFOBOX');\n\n const handleClose = (isOpen) => !isOpen && actor.send({ type: EVENTS.CANCEL });\n\n return (\n <InformationHotspotDialog\n isOpen={isDialogVisible}\n onClose={handleClose}\n hotspot={activeHotspot}\n />\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const Popover = styled.div(\n ({ theme: { utils } }) => css`\n color: ${utils.color('neutral.800')};\n overflow: hidden;\n position: absolute;\n transform: translate(-50%, calc(-100% - ${utils.spacing(6)}));\n width: ${utils.rem(128)};\n `,\n);\n\nexport const Picture = styled.img(\n () => css`\n display: block;\n height: 100%;\n object-fit: cover;\n width: 100%;\n `,\n);\n\nexport const Preview = styled.button(\n ({ theme: { utils } }) => css`\n background: ${utils.color('neutral.100')};\n border: none;\n display: block;\n height: ${utils.rem(72)};\n padding: 0;\n position: relative;\n width: 100%;\n `,\n);\n","import { Box, Card, Flex, Text } from '@nodalview/nodes-web';\nimport PropTypes from 'prop-types';\nimport * as Styled from './virtual_visit_viewer_hotspot_popover.styled';\n\nexport const VirtualVisitViewerHotspotPopover = ({ label, pictureUrl, left, top, ...props }) => (\n <Card {...props} as={Styled.Popover} p=\"0\" style={{ left, top }}>\n {pictureUrl && (\n <Styled.Preview>\n <Styled.Picture src={pictureUrl} alt=\"\" />\n </Styled.Preview>\n )}\n <Box p=\"2\">\n <Flex gap=\"2\" justify=\"center\">\n <Text strong>{label}</Text>\n </Flex>\n </Box>\n </Card>\n);\n\nVirtualVisitViewerHotspotPopover.propTypes = {\n label: PropTypes.string.isRequired,\n pictureUrl: PropTypes.string,\n left: PropTypes.number,\n top: PropTypes.number,\n};\n\nVirtualVisitViewerHotspotPopover.defaultProps = {\n pictureUrl: null,\n left: 0,\n top: 0,\n};\n","import { VirtualVisitViewerMachineContext } from '../machines/viewer';\n\nexport function useVirtualVisitViewerMachineContext() {\n return VirtualVisitViewerMachineContext.useSelector((state) => state.context);\n}\n","import { VirtualVisitViewerHotspotPopover } from '@react/virtual_visits/components/virtual_visit_viewer_hotspot_popover';\nimport {\n useVirtualVisitViewerMachineContext,\n useVirtualVisitViewerMachineState,\n} from '../../hooks';\nimport { HOTSPOT_TYPES } from '../../machines/viewer';\n\nexport const VirtualVisitViewerInformationHotspotPopover = () => {\n const state = useVirtualVisitViewerMachineState();\n const { activeHotspot, coordinates } = useVirtualVisitViewerMachineContext();\n\n if (!state.matches('READY.POPOVER.VISIBLE') || activeHotspot.kind !== HOTSPOT_TYPES.INFOBOX) {\n return null;\n }\n\n return (\n <VirtualVisitViewerHotspotPopover\n label={activeHotspot.name}\n pictureUrl={activeHotspot.imageUrl}\n left={coordinates.x}\n top={coordinates.y}\n />\n );\n};\n","import { VirtualVisitViewerHotspotPopover } from '@react/virtual_visits/components/virtual_visit_viewer_hotspot_popover';\nimport {\n useVirtualVisitViewerMachineContext,\n useVirtualVisitViewerMachineState,\n} from '../../hooks';\nimport { HOTSPOT_TYPES } from '../../machines/viewer';\n\nexport const VirtualVisitViewerNavigationHotspotPopover = () => {\n const state = useVirtualVisitViewerMachineState();\n const { activeHotspot, coordinates } = useVirtualVisitViewerMachineContext();\n\n if (!state.matches('READY.POPOVER.VISIBLE') || activeHotspot.kind !== HOTSPOT_TYPES.NAVIGATION) {\n return null;\n }\n\n return (\n <VirtualVisitViewerHotspotPopover\n label={activeHotspot.targetPanorama.sceneName}\n pictureUrl={activeHotspot.targetPanorama.thumbnailUrl}\n left={coordinates.x}\n top={coordinates.y}\n />\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const Card = styled.div(\n ({ theme: { utils }, size }) => css`\n background: ${utils.color('neutral.100')};\n overflow: hidden;\n position: relative;\n transition: ${utils.transition('transform')};\n\n &[aria-disabled='true'] {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:not([aria-disabled='true']):hover {\n transform: translateY(-0.5rem);\n }\n }\n\n ${size === 'sm' &&\n css`\n height: ${utils.rem(96)};\n width: ${utils.rem(164)};\n `}\n\n ${size === 'md' &&\n css`\n height: ${utils.rem(120)};\n width: ${utils.rem(200)};\n `}\n `,\n);\n\nexport const Image = styled.img(\n () => css`\n height: 100%;\n object-fit: cover;\n position: relative;\n width: 100%;\n `,\n);\n\nexport const Label = styled.div(\n ({ theme: { utils }, $ellipsis }) => css`\n background: ${utils.color('neutral.white')};\n bottom: ${utils.spacing(2)};\n border: none;\n border-radius: ${utils.radius('sm')};\n left: ${utils.spacing(2)};\n margin: 0;\n max-width: 100%;\n min-width: min-content;\n padding: ${utils.spacing(1, 2)};\n position: absolute;\n color: ${utils.color('neutral.800')};\n\n ${$ellipsis &&\n css`\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `}\n `,\n);\n\nexport const Overlay = styled.div(\n ({ theme: { utils } }) => css`\n background-color: ${utils.color('neutral.900')}60;\n color: ${utils.color('neutral.white')};\n padding: ${utils.spacing(2)};\n inset: 0;\n position: absolute;\n `,\n);\n","import { purposeAttributes } from '@global';\nimport { Card, Flex, Spinner, Text } from '@nodalview/nodes-web';\nimport PropTypes from 'prop-types';\nimport * as Styled from './virtual_visit_viewer_panorama.styled';\n\nexport const VirtualVisitViewerPanorama = ({\n panorama,\n isSelected,\n isLoading,\n disabled,\n size,\n onClick,\n ...props\n}) => (\n <Card\n as={Styled.Card}\n p=\"0\"\n selected={isSelected}\n hoverable={!disabled}\n aria-disabled={disabled}\n size={size}\n onClick={!disabled ? onClick : undefined}\n {...purposeAttributes('panorama')}\n {...props}\n >\n <Styled.Image src={panorama.thumbnailUrl} alt=\"\" draggable={false} />\n\n <Styled.Label as={Text} size=\"xs\" strong $ellipsis {...purposeAttributes('name')}>\n {panorama.sceneName}\n </Styled.Label>\n\n {isLoading && (\n <Flex as={Styled.Overlay} align=\"center\" justify=\"center\">\n <Spinner size=\"lg\" />\n </Flex>\n )}\n </Card>\n);\n\nVirtualVisitViewerPanorama.propTypes = {\n panorama: PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n sceneName: PropTypes.string.isRequired,\n thumbnailUrl: PropTypes.string.isRequired,\n }).isRequired,\n disabled: PropTypes.bool,\n isSelected: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClick: PropTypes.func,\n size: PropTypes.oneOf([null, 'sm', 'md']),\n};\n\nVirtualVisitViewerPanorama.defaultProps = {\n disabled: false,\n isSelected: false,\n isLoading: false,\n size: 'md',\n onClick: undefined,\n};\n","import { purposeAttributes } from '@global';\nimport { Box } from '@nodalview/nodes-web';\nimport { HorizontalScrollList } from '@react/components';\nimport { useVirtualVisitViewerMachineActor, useVirtualVisitViewerMachineState } from '../../hooks';\nimport { EVENTS } from '../../machines/editor';\nimport { VirtualVisitViewerPanorama } from '../virtual_visit_viewer_panorama';\n\nexport const VirtualVisitViewerPanoramasList = (props) => {\n const actor = useVirtualVisitViewerMachineActor();\n const state = useVirtualVisitViewerMachineState();\n\n const { activePanorama, panoramas, virtualVisit } = state.context;\n\n const canChangePanorama = state.can({ type: EVENTS.GO_TO_PANORAMA });\n\n const handlePanoramaChange = (panorama) => (event) => {\n event.preventDefault();\n actor.send({\n type: EVENTS.GO_TO_PANORAMA,\n from: activePanorama.uuid,\n to: panorama.uuid,\n hotspotId: null,\n view: {\n fov: panorama.fov,\n hlookat: panorama.hlookat,\n vlookat: panorama.vlookat,\n },\n });\n };\n\n const isSelected = (panorama) => activePanorama?.id === panorama.id;\n const isLoading = (panorama) =>\n isSelected(panorama) && state.matches('READY.VIEWER.LOADING_PANORAMA');\n\n return (\n <Box mt=\"-4\" pb=\"2\" {...props}>\n <HorizontalScrollList {...purposeAttributes('panoramas_list')}>\n {panoramas.map((panorama) => (\n <VirtualVisitViewerPanorama\n key={panorama.id}\n panorama={panorama}\n isSelected={isSelected(panorama)}\n isStartScene={virtualVisit?.firstScene?.id === panorama.id}\n isLoading={isLoading(panorama)}\n onClick={handlePanoramaChange(panorama)}\n disabled={!canChangePanorama}\n />\n ))}\n </HorizontalScrollList>\n </Box>\n );\n};\n\nVirtualVisitViewerPanoramasList.propTypes = {};\n","import styled, { css } from 'styled-components';\n\nexport const Button = styled.button(\n ({ theme: { utils } }) => css`\n border: none;\n box-shadow: 0px 2px 4px 0px #0f19274d;\n\n &[data-state='open'] {\n outline: ${utils.rem(4)} solid rgba(233, 236, 239, 0.5);\n }\n `,\n);\n","import { Button } from '@nodalview/nodes-web';\nimport { forwardRef } from 'react';\nimport * as Styled from './panel_button.styled';\n\nexport const PanelButton = forwardRef((props, ref) => (\n <Button as={Styled.Button} ref={ref} {...props} shape=\"pill\" />\n));\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div(\n ({ theme: { utils, breakpoint } }) => css`\n overflow: auto;\n max-height: calc(65vh - ${utils.spacing(4)});\n width: calc(100vw - ${utils.spacing(4)});\n\n ${breakpoint.up('sm')`\n max-height: calc(100vh - ${utils.spacing(4)});\n width: ${utils.rem(400)};\n `}\n `,\n);\n","import { Card } from '@nodalview/nodes-web';\nimport * as Styled from './panel_card.styled';\n\nexport const PanelCard = ({ children }) => (\n <Card as={Styled.Container} elevation=\"md\">\n {children}\n </Card>\n);\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div(\n ({ theme: { utils } }) => css`\n display: grid;\n gap: ${utils.spacing(2)};\n grid-auto-rows: ${utils.rem(98)};\n grid-template-columns: repeat(2, 1fr);\n width: 100%;\n `,\n);\n","import { purposeAttributes } from '@global';\nimport { orderBy } from 'lodash';\nimport { useVirtualVisitViewerMachineActor, useVirtualVisitViewerMachineState } from '../../hooks';\nimport { EVENTS } from '../../machines/editor';\nimport { VirtualVisitViewerPanorama } from '../virtual_visit_viewer_panorama';\nimport * as Styled from './panoramas_panel.styled';\n\nexport const PanoramasPanel = (props) => {\n const actor = useVirtualVisitViewerMachineActor();\n const state = useVirtualVisitViewerMachineState();\n\n const { activePanorama, panoramas, virtualVisit } = state.context;\n\n const canChangePanorama = state.can({ type: EVENTS.GO_TO_PANORAMA });\n const sortedPanoramas = orderBy(\n panoramas,\n [(pano) => virtualVisit.firstScene?.id === pano.id],\n ['desc'],\n );\n\n const handlePanoramaChange = (panorama) => (event) => {\n event.preventDefault();\n actor.send({\n type: EVENTS.GO_TO_PANORAMA,\n from: activePanorama.uuid,\n to: panorama.uuid,\n hotspotId: null,\n view: {\n fov: panorama.fov,\n hlookat: panorama.hlookat,\n vlookat: panorama.vlookat,\n },\n });\n };\n\n const isSelected = (panorama) => activePanorama?.id === panorama.id;\n const isLoading = (panorama) =>\n isSelected(panorama) && state.matches('READY.VIEWER.LOADING_PANORAMA');\n\n return (\n <Styled.Container {...props} {...purposeAttributes('panoramas_list')}>\n {sortedPanoramas.map((panorama) => (\n <VirtualVisitViewerPanorama\n key={panorama.id}\n panorama={panorama}\n isSelected={isSelected(panorama)}\n isStartScene={virtualVisit?.firstScene?.id === panorama.id}\n isLoading={isLoading(panorama)}\n onClick={handlePanoramaChange(panorama)}\n disabled={!canChangePanorama}\n size={null}\n />\n ))}\n </Styled.Container>\n );\n};\n\nPanoramasPanel.propTypes = {};\n","import { Popover } from '@nodalview/nodes-web';\nimport { PanelButton } from '../panel_button';\nimport { PanelCard } from '../panel_card';\nimport { PanoramasPanel } from '../panoramas_panel';\n\nexport const PanoramasViewerButton = () => (\n <Popover.Root position=\"right\" align=\"start\" offset={8}>\n <Popover.Trigger asChild>\n <PanelButton leadingIcon=\"panorama\" />\n </Popover.Trigger>\n <Popover.Content>\n <PanelCard>\n <PanoramasPanel />\n </PanelCard>\n </Popover.Content>\n </Popover.Root>\n);\n","import { BusinessCard, useTranslation } from '@nodalview/nodes-web';\nimport PropTypes from 'prop-types';\nimport { INTEGRATION_ICONS } from '@react/integrations';\n\nexport const BusinessCardPanel = ({ businessCard }) => {\n const { t } = useTranslation('integrations.list');\n\n const { rating } = businessCard;\n const ratingProps = () => {\n if (!rating) return null;\n\n return {\n profileUrl: rating.profileUrl,\n providerLogoUrl: INTEGRATION_ICONS[rating.provider],\n review: t(`${rating.provider}.review`, { count: rating.reviewsCount }),\n score: rating.score,\n };\n };\n\n return (\n <BusinessCard\n pictureUrl={businessCard.photo}\n fullName={businessCard.name}\n email={businessCard.email}\n phoneNumber={businessCard.phoneNumber}\n websiteUrl={businessCard.websiteUrl}\n rating={ratingProps()}\n branding={businessCard.branding}\n elevation=\"md\"\n />\n );\n};\n\nBusinessCardPanel.propTypes = {\n businessCard: PropTypes.shape({\n photo: PropTypes.string,\n name: PropTypes.string,\n email: PropTypes.string,\n phoneNumber: PropTypes.string,\n websiteUrl: PropTypes.string,\n branding: PropTypes.shape({\n logoUrl: PropTypes.string.isRequired,\n mainColor: PropTypes.string.isRequired,\n backgroundColor: PropTypes.number.isRequired,\n }),\n rating: PropTypes.shape({\n profileUrl: PropTypes.string.isRequired,\n provider: PropTypes.string.isRequired,\n reviewsCount: PropTypes.number.isRequired,\n score: PropTypes.number.isRequired,\n }),\n }).isRequired,\n};\n","import { Popover } from '@nodalview/nodes-web';\nimport { useInteractiveGalleryContext } from '@react/interactive_gallery';\nimport { useVirtualVisitViewerMachineContext } from '../../hooks';\nimport { BusinessCardPanel } from '../business_card_panel';\nimport { PanelButton } from '../panel_button';\n\nexport const BusinessCardViewerButton = () => {\n const { virtualVisit } = useVirtualVisitViewerMachineContext();\n const { businessCard: showBusinessCard } = useInteractiveGalleryContext();\n const { businessCard } = virtualVisit ?? {};\n\n if (!showBusinessCard) return null;\n\n return (\n <Popover.Root position=\"left\" align=\"start\" offset={8}>\n <Popover.Trigger asChild>\n <PanelButton leadingIcon=\"user\" />\n </Popover.Trigger>\n <Popover.Content>\n <BusinessCardPanel businessCard={businessCard} />\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div(\n () => css`\n overflow: hidden;\n position: relative;\n `,\n);\n\nexport const Plan = styled.img(\n () => css`\n margin: auto;\n max-width: 100%;\n `,\n);\n\nexport const Hotspot = styled.button(\n ({ theme: { utils }, $active }) => css`\n background: ${utils.color('primary.500')};\n border: none;\n border-radius: ${utils.radius('pill')};\n height: ${utils.rem(12)};\n padding: 0;\n position: absolute;\n transform: translate(-50%, -50%);\n transition: ${utils.transition('transform')};\n width: ${utils.rem(12)};\n\n &:hover {\n background-color: ${utils.color('primary.600')};\n cursor: pointer;\n transform: translate(-50%, -50%) scale(1.5);\n }\n\n ${$active &&\n css`\n outline: ${utils.rem(3)} solid rgba(18, 108, 242, 0.3);\n `}\n `,\n);\n\nexport const ButtonsWrapper = styled.div(\n ({ theme: { utils } }) => css`\n overflow-x: auto;\n padding-bottom: ${utils.spacing(3)};\n width: 100%;\n `,\n);\nexport const ButtonGroup = styled.div(\n () => css`\n width: min-content;\n `,\n);\n","import { Button, ButtonGroup, Flex, Spinner } from '@nodalview/nodes-web';\nimport PropTypes from 'prop-types';\nimport { useEffect, useMemo, useState } from 'react';\nimport * as Styled from './floorplans_panel.styled';\n\nexport const FloorplansPanel = ({\n floorplans,\n panoramaName,\n activeFloorplanId,\n onSelectFloorplan,\n onSelectHotspot,\n ...props\n}) => {\n const [loading, setLoading] = useState(true);\n\n const activeFloorplan = useMemo(\n () => floorplans.find((floorplan) => floorplan.uuid === activeFloorplanId),\n [activeFloorplanId, floorplans],\n );\n\n useEffect(() => setLoading(true), [activeFloorplanId]);\n\n return (\n <Flex gap=\"2\" direction=\"column\" {...props}>\n {floorplans.length > 1 && (\n <Styled.ButtonsWrapper>\n <ButtonGroup\n as={Styled.ButtonGroup}\n onChange={onSelectFloorplan}\n selected={activeFloorplanId}\n size=\"sm\"\n expanded\n >\n {floorplans.map((floorplan) => (\n <Button key={floorplan.id} name={floorplan.uuid}>\n {floorplan.label}\n </Button>\n ))}\n </ButtonGroup>\n </Styled.ButtonsWrapper>\n )}\n <Styled.Container>\n <Styled.Plan\n src={activeFloorplan.url}\n alt={activeFloorplan.label}\n onLoad={() => setLoading(false)}\n />\n {loading ? (\n <Spinner position=\"absolute\" color=\"primary\" backgroundColor=\"dark\" size=\"md\" />\n ) : (\n activeFloorplan.hotspots.map((hotspot) => (\n <Styled.Hotspot\n key={hotspot.id}\n $active={panoramaName === hotspot.linkedScene}\n style={{ left: `${hotspot.left}%`, top: `${hotspot.top}%` }}\n onClick={() => onSelectHotspot?.(hotspot)}\n />\n ))\n )}\n </Styled.Container>\n </Flex>\n );\n};\n\nFloorplansPanel.propTypes = {\n floorplans: PropTypes.arrayOf(\n PropTypes.shape({\n uuid: PropTypes.string.isRequired,\n url: PropTypes.string,\n }),\n ).isRequired,\n panoramaName: PropTypes.string,\n activeFloorplanId: PropTypes.string,\n onSelectFloorplan: PropTypes.func.isRequired,\n onSelectHotspot: PropTypes.func.isRequired,\n};\n\nFloorplansPanel.defaultProps = {\n panoramaName: null,\n activeFloorplanId: null,\n};\n","import { Popover } from '@nodalview/nodes-web';\nimport { useState } from 'react';\nimport { PanelCard } from '@react/virtual_visits/components/panel_card';\nimport {\n useVirtualVisitViewerMachineActor,\n useVirtualVisitViewerMachineContext,\n} from '../../hooks';\nimport { EVENTS } from '../../machines/viewer';\nimport { FloorplansPanel } from '../floorplans_panel';\nimport { PanelButton } from '../panel_button';\n\nexport const FloorplansViewerButton = () => {\n const actor = useVirtualVisitViewerMachineActor();\n const { virtualVisit, activePanorama, panoramas } = useVirtualVisitViewerMachineContext();\n const { floorplans } = virtualVisit ?? {};\n\n const [activeFloorplanId, setActiveFloorplanId] = useState(floorplans[0]?.uuid);\n\n const handleLoadPanorama = (hotspot) => {\n const panorama = panoramas.find((pano) => pano.sceneTitle === hotspot.linkedScene);\n\n actor.send({\n type: EVENTS.GO_TO_PANORAMA,\n from: activePanorama.uuid,\n to: panorama?.uuid,\n hotspotId: hotspot.id,\n });\n };\n\n if (floorplans.length === 0) return null;\n\n return (\n <Popover.Root position=\"left\" align=\"start\" offset={8}>\n <Popover.Trigger asChild>\n <PanelButton leadingIcon=\"floorplan\" />\n </Popover.Trigger>\n <Popover.Content>\n <PanelCard>\n <FloorplansPanel\n panoramaName={activePanorama?.sceneTitle}\n floorplans={floorplans}\n activeFloorplanId={activeFloorplanId}\n onSelectFloorplan={setActiveFloorplanId}\n onSelectHotspot={handleLoadPanorama}\n />\n </PanelCard>\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import { Popover } from '@nodalview/nodes-web';\nimport { GoogleMap } from '@react/components';\nimport { PanelCard } from '@react/virtual_visits/components/panel_card';\nimport { useVirtualVisitViewerMachineContext } from '../../hooks';\nimport { PanelButton } from '../panel_button';\n\nexport const LocationViewerButton = () => {\n const { virtualVisit, property } = useVirtualVisitViewerMachineContext();\n const { location } = virtualVisit ?? {};\n\n if (!location) return null;\n\n return (\n <Popover.Root position=\"left\" align=\"start\" offset={8}>\n <Popover.Trigger asChild>\n <PanelButton leadingIcon=\"location_dot\" />\n </Popover.Trigger>\n <Popover.Content>\n <PanelCard>\n <GoogleMap location={location} name={property.name} width=\"100%\" height={280} />\n </PanelCard>\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const List = styled.ul(\n () => css`\n margin: 0;\n padding: 0;\n `,\n);\n\nexport const Feature = styled.li(\n ({ theme: { utils } }) => css`\n display: flex;\n list-style: none;\n padding: ${utils.spacing(4, 0)};\n\n &:not(:last-child) {\n border-bottom: 1px solid ${utils.color('neutral.200')};\n }\n `,\n);\n","import { Flex, Icon, Text } from '@nodalview/nodes-web';\nimport { isNil } from 'lodash';\nimport PropTypes from 'prop-types';\nimport * as Styled from './property_details_panel.styled';\n\nexport const PropertyDetailsPanelFeature = ({ icon, label, value, ...props }) => {\n if (isNil(value)) return null;\n\n return (\n <Styled.Feature as={Flex} gap=\"2\" {...props}>\n <Icon name={icon} />\n <Flex gap=\"2\" justify=\"between\">\n <Text strong>{label}</Text>\n <Text align=\"right\" color=\"neutral\">\n {value}\n </Text>\n </Flex>\n </Styled.Feature>\n );\n};\n\nPropertyDetailsPanelFeature.propTypes = {\n icon: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n value: PropTypes.node.isRequired,\n};\n","import { Flex, Heading, Text, useTranslation } from '@nodalview/nodes-web';\nimport PropTypes from 'prop-types';\nimport { FindDescription, toCurrency, withUnit } from '@react/helpers';\nimport { PropertyDetailsPanelFeature } from './property_details_panel.feature';\nimport * as Styled from './property_details_panel.styled';\n\nexport const PropertyDetailsPanel = ({ details, ...props }) => {\n const { t, i18n } = useTranslation('nodalview_player.extensions.property_features');\n\n const description = FindDescription(i18n.locale, details.descriptions);\n\n return (\n <Flex align=\"stretch\" gap=\"4\" direction=\"column\" {...props}>\n <Heading level=\"md\">{t('title')}</Heading>\n\n {description && (\n <Flex align=\"stretch\" gap=\"1\" direction=\"column\">\n <Text string>{description.title}</Text>\n <Text color=\"neutral\">{description.text}</Text>\n </Flex>\n )}\n\n <Styled.List>\n <PropertyDetailsPanelFeature\n icon=\"house\"\n label={t('features.property_type')}\n value={t(`properties:property_types.${details.propertyType}`)}\n />\n <PropertyDetailsPanelFeature\n icon=\"tag\"\n label={t('features.transaction_type')}\n value={t(`properties:transaction_types.${details.transactionType}`)}\n />\n <PropertyDetailsPanelFeature\n icon=\"euro\"\n label={t('features.price')}\n value={details.price && toCurrency(details.price, { currency: details.priceUnit })}\n />\n <PropertyDetailsPanelFeature\n icon=\"ruler_combined\"\n label={t('features.liveable_surface')}\n value={withUnit(details.livingArea, details.livingAreaUnit)}\n />\n <PropertyDetailsPanelFeature\n icon=\"bed\"\n label={t('features.bedrooms')}\n value={details.bedrooms}\n />\n <PropertyDetailsPanelFeature\n icon=\"bath\"\n label={t('features.bath_rooms')}\n value={details.bathrooms}\n />\n <PropertyDetailsPanelFeature\n icon=\"toilet\"\n label={t('features.toilets')}\n value={details.toilets}\n />\n <PropertyDetailsPanelFeature\n icon=\"car\"\n label={t('features.parking')}\n value={t(`shared:adjectives.${details.parking ? 'yes' : 'no'}`)}\n />\n <PropertyDetailsPanelFeature\n icon=\"tree_deciduous\"\n label={t('features.garden')}\n value={t(`shared:adjectives.${details.garden ? 'yes' : 'no'}`)}\n />\n <PropertyDetailsPanelFeature\n icon=\"peb\"\n label={t('features.epc_reference')}\n value={details.energy}\n />\n </Styled.List>\n </Flex>\n );\n};\n\nPropertyDetailsPanel.propTypes = {\n details: PropTypes.shape({\n bathrooms: PropTypes.number,\n bedrooms: PropTypes.number,\n descriptions: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string,\n title: PropTypes.string,\n language: PropTypes.string.isRequired,\n }),\n ),\n energy: PropTypes.string,\n garden: PropTypes.bool,\n livingArea: PropTypes.number,\n livingAreaUnit: PropTypes.string,\n parking: PropTypes.bool,\n price: PropTypes.number,\n priceUnit: PropTypes.string,\n propertyType: PropTypes.string,\n toilets: PropTypes.number,\n transactionType: PropTypes.string,\n }).isRequired,\n};\n","import { Popover } from '@nodalview/nodes-web';\nimport { PanelCard } from '@react/virtual_visits/components/panel_card';\nimport { useVirtualVisitViewerMachineContext } from '../../hooks';\nimport { PanelButton } from '../panel_button';\nimport { PropertyDetailsPanel } from '../property_details_panel';\n\nexport const PropertyDetailsViewerButton = () => {\n const { virtualVisit } = useVirtualVisitViewerMachineContext();\n const { details } = virtualVisit ?? {};\n\n if (!details) return null;\n\n return (\n <Popover.Root position=\"left\" align=\"start\" offset={8}>\n <Popover.Trigger asChild>\n <PanelButton leadingIcon=\"circle_info\" />\n </Popover.Trigger>\n <Popover.Content>\n <PanelCard>\n <PropertyDetailsPanel details={details} />\n </PanelCard>\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div(\n ({ theme: { utils }, $positionX = 'right', $positionY = 'top' }) => css`\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: ${utils.spacing(4)};\n padding: ${utils.spacing(4)};\n position: absolute;\n ${$positionX}: 0;\n ${$positionY}: 0;\n `,\n);\n\nexport const Button = styled.button(\n () => css`\n border: none;\n box-shadow: 0px 2px 4px 0px #0f19274d;\n `,\n);\n","import { PanoramasViewerButton } from '@react/virtual_visits/components/panoramas_viewer_button';\nimport { usePanoramasMediaQuery } from '@react/virtual_visits/hooks/use_panoramas_media_query';\nimport { BusinessCardViewerButton } from '../business_card_viewer_button';\nimport { FloorplansViewerButton } from '../floorplans_viewer_button';\nimport { LocationViewerButton } from '../location_viewer_button';\nimport { PropertyDetailsViewerButton } from '../property_details_viewer_button';\nimport * as Styled from './virtual_visit_viewer_panels.styled';\n\nexport const VirtualVisitViewerPanels = () => {\n const showPanoramasList = usePanoramasMediaQuery();\n\n return (\n <>\n {!showPanoramasList && (\n <Styled.Container $positionX=\"left\" $positionY=\"bottom\">\n <PanoramasViewerButton />\n </Styled.Container>\n )}\n <Styled.Container $positionX=\"right\" $positionY=\"top\">\n <FloorplansViewerButton />\n <BusinessCardViewerButton />\n <PropertyDetailsViewerButton />\n <LocationViewerButton />\n </Styled.Container>\n </>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const Wrapper = styled.div(\n ({ theme: { utils } }) => css`\n left: ${utils.spacing(4)};\n position: absolute;\n top: ${utils.spacing(4)};\n `,\n);\n\nexport const Logo = styled.img(\n ({ theme: { utils } }) => css`\n display: block;\n max-height: ${utils.rem(80)};\n max-width: ${utils.rem(200)};\n `,\n);\n","import { NodalviewLogo } from '@react/components';\nimport { useInteractiveGalleryContext } from '@react/interactive_gallery';\nimport { useVirtualVisitViewerMachineState } from '../../hooks';\nimport * as Styled from './virtual_visit_viewer_logo.styled';\n\nexport const VirtualVisitViewerLogo = () => {\n const state = useVirtualVisitViewerMachineState();\n const { branding } = useInteractiveGalleryContext();\n\n const { logoUrl, name } = state.context.property.organisation;\n\n if (!branding) return null;\n\n return (\n <Styled.Wrapper>\n {logoUrl ? <Styled.Logo src={logoUrl} alt={name} /> : <NodalviewLogo size=\"md\" mode=\"dark\" />}\n </Styled.Wrapper>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const Wrapper = styled.div(\n ({ theme: { utils }, $visible }) => css`\n height: 100%;\n overflow: hidden;\n opacity: 0;\n transform: scale(0.85);\n transition: ${utils.transition('opacity', 'transform')};\n width: 100%;\n\n @media screen and (min-width: 768px) and (min-height: 600px) {\n border-radius: ${utils.radius('md')};\n }\n\n ${$visible &&\n css`\n opacity: 1;\n transform: scale(1);\n `}\n `,\n);\n","import { useCallback } from 'react';\nimport { Krpano } from '@react/components';\nimport { VirtualVisitViewerPanels } from '@react/virtual_visits/components/virtual_visit_viewer_panels';\nimport {\n useVirtualVisitViewerMachineActor,\n useVirtualVisitViewerMachineContext,\n useVirtualVisitViewerMachineState,\n} from '../../hooks';\nimport { EVENTS } from '../../machines/viewer';\nimport { ViewerControls } from '../viewer_controls';\nimport { VirtualVisitViewerLogo } from '../virtual_visit_viewer_logo';\nimport * as Styled from './virtual_visit_viewer_view.styled';\n\nexport const VirtualVisitViewerView = ({ children, ...props }) => {\n const { krpano, virtualVisit } = useVirtualVisitViewerMachineContext();\n const state = useVirtualVisitViewerMachineState();\n const actor = useVirtualVisitViewerMachineActor();\n\n const handleInitialization = useCallback(\n (instance) => actor.send({ type: EVENTS.SET_KRPANO, krpano: instance }),\n [actor],\n );\n\n return (\n <Styled.Wrapper {...props} $visible={state.matches('READY')}>\n <Krpano\n key={virtualVisit.xmlPath}\n xml={`${virtualVisit.xmlPath}`}\n onReady={handleInitialization}\n />\n {krpano && <ViewerControls krpano={krpano} />}\n <VirtualVisitViewerPanels />\n <VirtualVisitViewerLogo />\n </Styled.Wrapper>\n );\n};\n\nVirtualVisitViewerView.propTypes = {};\n","import styled, { css } from 'styled-components';\n\nexport const View = styled.div(\n ({ theme: { utils } }) => css`\n flex: 1;\n min-height: 0;\n padding: ${utils.spacing(0)};\n position: relative;\n width: 100%;\n z-index: 1;\n\n @media screen and (min-width: 768px) and (min-height: 600px) {\n padding: ${utils.spacing(6)};\n }\n `,\n);\n\nexport const Wrapper = styled.div(\n () => css`\n height: 100%;\n overflow: hidden;\n position: relative;\n width: 100%;\n `,\n);\n","import { Flex, Spinner } from '@nodalview/nodes-web';\nimport { MediaDialog } from '@react/components';\nimport { usePanoramasMediaQuery } from '@react/virtual_visits/hooks/use_panoramas_media_query';\nimport {\n useMachineNotifications,\n useVirtualVisitViewerMachineActor,\n useVirtualVisitViewerMachineState,\n} from '../../hooks';\nimport { VirtualVisitViewerInformationHotspot } from '../virtual_visit_viewer_information_hotspot';\nimport { VirtualVisitViewerInformationHotspotPopover } from '../virtual_visit_viewer_information_hotspot_popover';\nimport { VirtualVisitViewerNavigationHotspotPopover } from '../virtual_visit_viewer_navigation_hotspot_popover';\nimport { VirtualVisitViewerPanoramasList } from '../virtual_visit_viewer_panoramas_list';\nimport { VirtualVisitViewerView } from '../virtual_visit_viewer_view';\nimport * as Styled from './virtual_visit_viewer_content.styled';\n\nexport const VirtualVisitViewerContent = (props) => {\n const state = useVirtualVisitViewerMachineState();\n const actor = useVirtualVisitViewerMachineActor();\n\n const isLoading = state.matches('FETCHING');\n const isLoaded = !state.matches('FETCHING');\n\n useMachineNotifications(actor);\n const showPanoramasList = usePanoramasMediaQuery();\n\n return (\n <MediaDialog.Content {...props}>\n <Flex direction=\"column\" gap=\"0\" justify=\"center\" align=\"stretch\" height=\"100%\">\n {isLoading && <Spinner size=\"lg\" color=\"primary\" />}\n {isLoaded && (\n <>\n <Styled.View>\n <Styled.Wrapper>\n <VirtualVisitViewerView />\n <VirtualVisitViewerInformationHotspot />\n <VirtualVisitViewerInformationHotspotPopover />\n <VirtualVisitViewerNavigationHotspotPopover />\n </Styled.Wrapper>\n </Styled.View>\n {showPanoramasList && <VirtualVisitViewerPanoramasList />}\n </>\n )}\n </Flex>\n </MediaDialog.Content>\n );\n};\n\nVirtualVisitViewerContent.propTypes = {};\n\nVirtualVisitViewerContent.defaultProps = {};\n","import PropTypes from 'prop-types';\nimport { VirtualVisitViewerMachineContext } from '../../machines/viewer';\n\nexport const VirtualVisitViewerMachine = ({ children, virtualVisitUuid }) => (\n <VirtualVisitViewerMachineContext.Provider\n options={{\n input: { virtualVisitUuid },\n }}\n >\n {children}\n </VirtualVisitViewerMachineContext.Provider>\n);\n\nVirtualVisitViewerMachine.propTypes = {\n virtualVisitUuid: PropTypes.string.isRequired,\n};\n","import { purposeAttributes } from '@global';\nimport PropTypes from 'prop-types';\nimport { MediaDialog } from '@react/components';\nimport { VirtualVisitViewerContent } from '../virtual_visit_viewer_content';\nimport { VirtualVisitViewerMachine } from '../virtual_visit_viewer_machine';\n\nexport const VirtualVisitViewer = ({ virtualVisitUuid, ...props }) => (\n <VirtualVisitViewerMachine virtualVisitUuid={virtualVisitUuid}>\n <MediaDialog {...props} {...purposeAttributes('virtual_visit_viewer')}>\n <VirtualVisitViewerContent />\n </MediaDialog>\n </VirtualVisitViewerMachine>\n);\n\nVirtualVisitViewer.propTypes = {\n virtualVisitUuid: PropTypes.string.isRequired,\n};\n"],"names":["purposeAttributes","purpose","enable_data_test_attributes","PascalCase","str","startCase","camelCase","replace","toSnakeCase","object","snakeCase","transform","acc","value","key","target","isArray","isObject","toCamelCase","withUnit","unit","useToast","useContext","WithNodesProvider","Component","options","HocComponent","props","NodesProvider","displayName","children","base","colors","fonts","i18nContext","useMemo","t","translationKey","variables","window","I18n","i18n","theme","useEffect","locale","translations","has","rules","get","setLocale","Provider","propTypes","defaultProps","animateContainer","container","element","height","getBoundingClientRect","animate","easing","duration","Item","div","utils","rem","transition","ToastItem","id","type","message","onEnter","onExit","ref","useRef","visible","setVisible","useState","hover","setHover","current","width","style","setProperty","setDimensions","timerId","setTimeout","clearTimeout","as","onTransitionEnd","onClick","onMouseEnter","onMouseLeave","isRequired","Container","BackwardsCompatibleToastsContainer","stack","containerRef","document","getElementById","handleEnter","createPortal","map","item","NewToastsContainer","body","defaultContextCallback","_message","Error","ToastContext","createContext","success","warning","error","ToastProvider","setStack","addToast","useCallback","opts","toastItem","currentStack","context","toastId","filter","usePanoramasMediaQuery","EVENTS","CANCEL","GO_TO_PANORAMA","LOADED","RETRY","SET_KRPANO","SHOW_INFOBOX","HIDE_INFOBOX","SHOW_POPOVER","HIDE_POPOVER","HOTSPOT_TYPES","INFOBOX","NAVIGATION","GetInformationHotspot","event","hotspot","activePanorama","informationHotspots","find","hs","kind","GetNavigationHotspot","navigationHotspots","targetPanorama","panoramas","pano","uuid","renameInvalidPanoramaKeys","_value","VirtualVisitViewerMachine","initial","input","virtualVisitUuid","virtualVisit","property","krpano","activeHotspot","activePanel","coordinates","x","y","states","FETCHING","invoke","src","onDone","actions","onError","INITIALIZING","on","ERROR","READY","VIEWER","IDLE","LOADING_PANORAMA","SHOWING_INFOBOX","POPOVER","HIDDEN","VISIBLE","provide","actors","fetchVirtualVisit","url","response","then","p","mapKeys","loadPanorama","initialise","a","registerEvents","self","events","addListener","send","to","setVirtualVisit","output","selectPanorama","renderHotspots","system","forEach","actor","renderedHotspot","__typename","addevent","from","hotspotId","view","fov","hlookat","vlookat","RenderNavigationHotspot","RenderInformationHotspot","selectHotspot","getCoordinates","ath","atv","spheretoscreen","unselectHotspot","notifyError","e","VirtualVisitViewerMachineContext","useVirtualVisitViewerMachineActor","useActorRef","useVirtualVisitViewerMachineState","state","setState","getSnapshot","subscribe","snapshot","unsubscribe","VirtualVisitViewerInformationHotspot","isDialogVisible","matches","isOpen","onClose","Popover","color","spacing","Picture","img","Preview","button","VirtualVisitViewerHotspotPopover","label","pictureUrl","left","top","alt","gap","justify","strong","useVirtualVisitViewerMachineContext","useSelector","VirtualVisitViewerInformationHotspotPopover","name","imageUrl","VirtualVisitViewerNavigationHotspotPopover","sceneName","thumbnailUrl","Card","size","Image","Label","$ellipsis","radius","Overlay","VirtualVisitViewerPanorama","panorama","isSelected","isLoading","disabled","selected","hoverable","draggable","align","VirtualVisitViewerPanoramasList","canChangePanorama","can","handlePanoramaChange","preventDefault","mt","pb","isStartScene","firstScene","Button","PanelButton","forwardRef","shape","breakpoint","up","PanelCard","elevation","PanoramasPanel","sortedPanoramas","orderBy","PanoramasViewerButton","Root","position","offset","Trigger","asChild","leadingIcon","Content","BusinessCardPanel","businessCard","rating","photo","fullName","email","phoneNumber","websiteUrl","profileUrl","providerLogoUrl","provider","review","count","reviewsCount","score","branding","logoUrl","mainColor","backgroundColor","BusinessCardViewerButton","showBusinessCard","Plan","Hotspot","$active","ButtonsWrapper","ButtonGroup","FloorplansPanel","floorplans","panoramaName","activeFloorplanId","onSelectFloorplan","onSelectHotspot","loading","setLoading","activeFloorplan","floorplan","direction","length","onChange","expanded","onLoad","hotspots","linkedScene","FloorplansViewerButton","setActiveFloorplanId","sceneTitle","LocationViewerButton","location","List","ul","Feature","li","PropertyDetailsPanelFeature","icon","isNil","PropertyDetailsPanel","details","description","descriptions","level","string","title","text","propertyType","transactionType","price","currency","priceUnit","livingArea","livingAreaUnit","bedrooms","bathrooms","toilets","parking","garden","energy","language","PropertyDetailsViewerButton","$positionX","$positionY","VirtualVisitViewerPanels","showPanoramasList","Wrapper","Logo","VirtualVisitViewerLogo","organisation","mode","$visible","VirtualVisitViewerView","handleInitialization","instance","xmlPath","xml","onReady","View","VirtualVisitViewerContent","isLoaded","VirtualVisitViewer"],"sourceRoot":""}