{"version":3,"sources":["webpack:///./src/helpers/ssr.ts","webpack:///./src/hooks/useModalGallery.ts","webpack:///./src/stories/Components/Misc/ModalGallery/ModalGalleryProvider/ModalGalleryProvider.tsx","webpack:///./src/stories/Components/Misc/ModalGallery/ModalGallery.styles.ts","webpack:///./src/stories/Components/Misc/ModalGallery/ModalGallery.tsx","webpack:///./src/helpers/api.ts","webpack:///./src/img/icons/nav-arrow-left.svg","webpack:///./src/helpers/global.ts","webpack:///./src/redux/store.ts","webpack:///./src/redux/slices/pinboards/actions/copyPinboardItems.ts","webpack:///./src/redux/slices/pinboards/actions/createPinboard.ts","webpack:///./src/redux/slices/pinboards/actions/createPinboardItem.ts","webpack:///./src/redux/slices/pinboards/actions/deletePinboard.ts","webpack:///./src/redux/slices/pinboards/actions/deletePinboardItem.ts","webpack:///./src/redux/slices/pinboards/actions/movePinboardItems.ts","webpack:///./src/redux/slices/pinboards/actions/savePinboards.ts","webpack:///./src/redux/slices/pinboards/actions/updatePinboard.ts","webpack:///./src/redux/slices/pinboards/index.ts","webpack:///./src/helpers/cloudinary.ts","webpack:///./src/redux/slices/pinboards/types.ts","webpack:///./src/helpers/layers.ts","webpack:///./src/stories/Components/PinButton/PinButton.styles.ts","webpack:///./src/img/icons/pb-button-pin.svg","webpack:///./src/stories/Components/PinButton/PinButton.tsx","webpack:///./src/redux/slices/locations/index.ts","webpack:///./src/img/icons/nav-arrow-right.svg","webpack:///./src/helpers/video.ts","webpack:///./src/redux/slices/pinboards/actions/retrievePinboards.ts","webpack:///./src/hoc/withRedux.tsx","webpack:///./src/helpers/image.ts","webpack:///./src/img/icons/close.svg","webpack:///./src/stories/Components/Misc/Modal/Context/Context.tsx","webpack:///./src/stories/Components/Misc/Modal/Background/Background.styles.ts","webpack:///./src/stories/Components/Misc/Modal/Background/Background.tsx","webpack:///./src/stories/Components/Misc/Modal/Close/Close.styles.ts","webpack:///./src/stories/Components/Misc/Modal/Close/Close.tsx","webpack:///./src/stories/Components/Misc/Modal/Modal.styles.ts","webpack:///./src/stories/Components/Misc/Modal/Modal.tsx"],"names":["isSSR","window","document","useModalGallery","params","modalGalleryState","dispatch","React","state","action","type","activeIndex","maxIndex","payload","clamp","wrap","value","Math","max","min","count","goToIndex","index","goToNext","goToPrev","ModalGalleryContext","noop","useModalGalleryContext","ModalGalleryProvider","children","otherProps","modalGallery","Provider","ModalGalleryStyles","Container","styled","section","PinButtonStyles","Button","fluid","Image","img","Video","video","ControlButton","button","ButtonReset","brand","green","white","transition","from","Device","TabletLarge","ModalGallery","props","media","openIndex","pinTitle","pinUrl","rest","activeItem","srcs","isMediaVideo","getSrcs","Modal","S","autoPlay","controls","playsInline","poster","previewImage","imageUrl","width","height","videoUrl","videoId","format","src","split","srcSet","join","alt","altText","undefined","role","PinButton","data","image","title","url","length","disabled","onClick","event","preventDefault","ArrowLeft","ArrowRight","API_URLS","createPinboard","retrievePinboards","updatePinboard","deletePinboard","createPinboardItem","deletePinboardItem","copyPinboardItems","movePinboardItems","savePinboards","getBedroomStorage","getBlogs","getLocations","getLocationRanges","getRanges","getRangesOffers","getRealRooms","getSearchResults","getTimeslots","postAccountContactForm","postAccountDepositForm","postAccountOrderLinesForm","postBillingDetails","postBookAFreeDesignVisitForm","postCancelDesignVisitForm","postCalculate","postContactForm","postFinanceApplication","postGatedContentForm","postMyDetailsForm","postQuoteFundingModal","postQuoteList","postQuotePaymentType","postRequestAFreeBrochureForm","postTransferConfirmation","postConfirmNewPassword","postForgottenPassword","postLogin","_path","_extends","Object","assign","bind","target","i","arguments","source","key","prototype","hasOwnProperty","call","apply","this","SvgNavArrowLeft","xmlns","viewBox","fill","d","css","rootReducer","combineReducers","locations","reducer","locationRanges","pinboards","store","configureStore","useAppDispatch","useDispatch","useAppSelector","useSelector","createAsyncThunk","async","response","fetch","body","JSON","stringify","headers","method","json","createSlice","initialState","drawer","isActive","items","saveData","name","reducers","showDrawer","hideDrawer","extraReducers","builder","addCase","fulfilled","DEFAULT_OPTIONS","audio","id","options","combined","transformations","DrawerMode","Layers","HeaderBackdrop","Header","ModalBackdrop","Popup","rgba","black","SvgPbButtonPin","stroke","strokeMiterlimit","strokeWidth","withRedux","boards","loadPinboards","activeBoards","map","board","find","item","filter","a","FocusRing","focusRingClass","actions","mode","CREATE_PINBOARD_ITEM","active","SvgPin","INITIAL_STATE","apiData","apiStatus","filterExpanded","selectedLocationId","fetchLocations","qs","deselectLocation","selectLocation","toggleFilter","pending","rejected","INITIAL_RANGES_STATE","fetchLocationRanges","SvgNavArrowRight","WrappedComponent","displayName","ComponentWithRedux","createElement","imageParams","imageSource","rxy","focalPoint","left","top","quality","includes","rsampler","queryString","upper","lower","steps","ratio","increment","Array","_","ceil","getRange","size","round","SvgClose","fillRule","ModalContext","closeOnBackground","showBackground","showClose","onClose","useModal","ModalProvider","BackgroundStyles","Background","div","modal","CloseStyles","Close","ModalStyles","Inner","isOpen","portalContainer","getElementById","portalContent","FocusScope","autoFocus","contain","restoreFocus","ariaLabel","onKeyDown","ReactDOM"],"mappings":"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","file":"8-a003293e244c42531ee5.js","sourcesContent":["export const isSSR = () => {\r\n const returnValue = !(typeof window != 'undefined' && window.document);\r\n return returnValue;\r\n};\r\n","import * as React from 'react';\r\nexport function useModalGallery(params) {\r\n const [modalGalleryState, dispatch] = React.useReducer(modalGalleryReducer, {\r\n activeIndex: 0,\r\n maxIndex: 0,\r\n });\r\n React.useEffect(() => {\r\n initModalGallery();\r\n }, []);\r\n return {\r\n ...modalGalleryState,\r\n goToIndex,\r\n goToNext,\r\n goToPrev,\r\n };\r\n /**\r\n * Initialise the reducer state.\r\n */\r\n function initModalGallery() {\r\n // Initialise the modalGallery state.\r\n dispatch({ type: 'init', payload: { maxIndex: params.count - 1 } });\r\n }\r\n /**\r\n * Go to the next item.\r\n */\r\n function goToNext(wrap) {\r\n dispatch({ type: 'next', payload: { wrap: wrap ?? false } });\r\n }\r\n /**\r\n * Go to the previous item.\r\n */\r\n function goToPrev(wrap) {\r\n dispatch({ type: 'prev', payload: { wrap: wrap ?? false } });\r\n }\r\n /**\r\n * Go to the target index.\r\n */\r\n function goToIndex(index) {\r\n dispatch({ type: 'goto', payload: index });\r\n }\r\n function modalGalleryReducer(state, action) {\r\n switch (action.type) {\r\n case 'init':\r\n return {\r\n activeIndex: 0,\r\n maxIndex: action.payload.maxIndex,\r\n };\r\n case 'goto':\r\n return { ...state, activeIndex: clamp(action.payload) };\r\n case 'next':\r\n if (action.payload.wrap && state.activeIndex === state.maxIndex) {\r\n return { ...state, activeIndex: 0 };\r\n }\r\n return { ...state, activeIndex: clamp(state.activeIndex + 1) };\r\n case 'prev':\r\n if (action.payload.wrap && state.activeIndex === 0) {\r\n return { ...state, activeIndex: state.maxIndex };\r\n }\r\n return { ...state, activeIndex: clamp(state.activeIndex - 1) };\r\n }\r\n /** Clamp index to be within the min/max index range. */\r\n function clamp(value) {\r\n return Math.max(Math.min(value, state.maxIndex), 0);\r\n }\r\n }\r\n}\r\n","import { useModalGallery, } from '@hooks/useModalGallery';\r\nimport noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nconst ModalGalleryContext = React.createContext({\r\n activeIndex: 0,\r\n goToIndex: noop,\r\n goToNext: noop,\r\n goToPrev: noop,\r\n maxIndex: 0,\r\n});\r\nexport const useModalGalleryContext = () => React.useContext(ModalGalleryContext);\r\nconst ModalGalleryProvider = ({ children, ...otherProps }) => {\r\n const modalGallery = useModalGallery(otherProps);\r\n return (React.createElement(ModalGalleryContext.Provider, { value: modalGallery }, children));\r\n};\r\nexport default ModalGalleryProvider;\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { Device, from } from '@helpers/media';\r\nimport PinButtonStyles from '@stories/Components/PinButton/PinButton.styles';\r\nimport styled from 'styled-components';\r\nconst Container = styled.section `\r\n ${PinButtonStyles.Button} {\r\n position: absolute;\r\n top: ${fluid(4, 8)};\r\n right: ${fluid(4, 8)};\r\n }\r\n`;\r\nconst Image = styled.img ``;\r\nconst Video = styled.video ``;\r\nconst ControlButton = styled.button `\r\n ${ButtonReset};\r\n display: flex;\r\n height: 50px;\r\n place-content: center;\r\n place-items: center;\r\n width: 50px;\r\n background-color: ${brand.green};\r\n color: ${brand.white};\r\n position: absolute;\r\n bottom: 0;\r\n left: 50%;\r\n\r\n &[data-variant='prev'] {\r\n transform: translate(calc(-100% - 4px), 50%);\r\n }\r\n\r\n &[data-variant='next'] {\r\n transform: translate(4px, 50%);\r\n }\r\n\r\n svg {\r\n display: block;\r\n height: 25px;\r\n width: 25px;\r\n ${transition('transform')};\r\n }\r\n\r\n &:hover svg {\r\n transform: scale(1.1);\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.5;\r\n\r\n svg {\r\n transform: none;\r\n }\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n bottom: 50%;\r\n\r\n &[data-variant='prev'] {\r\n transform: translate(-50%, 50%);\r\n left: 0;\r\n }\r\n\r\n &[data-variant='next'] {\r\n transform: translate(50%, 50%);\r\n right: 0;\r\n left: auto;\r\n }\r\n }\r\n`;\r\nconst ModalGalleryStyles = {\r\n Container,\r\n Image,\r\n Video,\r\n ControlButton,\r\n};\r\nexport default ModalGalleryStyles;\r\n","import { videoUrl } from '@helpers/cloudinary';\r\nimport { getSrcs, imageUrl } from '@helpers/image';\r\nimport { isMediaVideo } from '@helpers/video';\r\nimport { ReactComponent as ArrowLeft } from '@img/icons/nav-arrow-left.svg';\r\nimport { ReactComponent as ArrowRight } from '@img/icons/nav-arrow-right.svg';\r\nimport PinButton from '@stories/Components/PinButton/PinButton';\r\nimport * as React from 'react';\r\nimport Modal from '../Modal/Modal';\r\nimport S from './ModalGallery.styles';\r\nimport { useModalGalleryContext } from './ModalGalleryProvider/ModalGalleryProvider';\r\nconst ModalGallery = (props) => {\r\n const { children, media, openIndex, pinTitle, pinUrl, ...rest } = props;\r\n if (!media) {\r\n return null;\r\n }\r\n const modalGallery = useModalGalleryContext();\r\n const activeItem = media[modalGallery.activeIndex];\r\n React.useEffect(() => {\r\n if (openIndex !== modalGallery.activeIndex) {\r\n modalGallery.goToIndex(openIndex);\r\n }\r\n }, [openIndex]);\r\n if (!activeItem) {\r\n return null;\r\n }\r\n const srcs = !isMediaVideo(activeItem) ? getSrcs(activeItem, 1920, 284, 12) : [];\r\n return (React.createElement(Modal, { ...rest },\r\n isMediaVideo(activeItem) ? (React.createElement(S.Video, { autoPlay: true, controls: true, playsInline: true, poster: activeItem.previewImage\r\n ? imageUrl(activeItem.previewImage, { width: 1920, height: 1080 })\r\n : videoUrl(activeItem.videoId, { format: 'jpg' }) },\r\n React.createElement(\"source\", { type: \"video/webm\", src: videoUrl(activeItem.videoId, { format: 'webm' }) }),\r\n React.createElement(\"source\", { type: \"video/mp4\", src: videoUrl(activeItem.videoId, { format: 'mp4' }) }))) : (React.createElement(S.Image, { src: srcs[0].split(' ')[0], srcSet: srcs.join(','), alt: activeItem.altText ?? undefined, role: !activeItem.altText ? 'presentation' : undefined })),\r\n pinTitle && pinUrl && !isMediaVideo(activeItem) ? (React.createElement(PinButton, { data: { image: activeItem, title: pinTitle, url: pinUrl } })) : null,\r\n media.length > 1 && (React.createElement(React.Fragment, null,\r\n React.createElement(S.ControlButton, { \"aria-label\": \"Previous\", disabled: modalGallery.activeIndex === 0, type: \"button\", \"data-variant\": \"prev\", onClick: (event) => {\r\n event.preventDefault();\r\n modalGallery.goToPrev(false);\r\n } },\r\n React.createElement(ArrowLeft, null)),\r\n React.createElement(S.ControlButton, { \"aria-label\": \"Next\", disabled: modalGallery.activeIndex === modalGallery.maxIndex, type: \"button\", \"data-variant\": \"next\", onClick: (event) => {\r\n event.preventDefault();\r\n modalGallery.goToNext(false);\r\n } },\r\n React.createElement(ArrowRight, null))))));\r\n};\r\nexport default ModalGallery;\r\n","export const API_URLS = {\r\n // Pinboard CRUD\r\n createPinboard: '/api/pinboards/create',\r\n retrievePinboards: '/api/pinboards/get',\r\n updatePinboard: '/api/pinboards/update',\r\n deletePinboard: '/api/pinboards/delete',\r\n // Pinboard Item CRUD\r\n createPinboardItem: '/api/pinboards/items/create',\r\n deletePinboardItem: '/api/pinboards/items/delete',\r\n // Misc Pinboard\r\n copyPinboardItems: '/api/pinboards/items/copy',\r\n movePinboardItems: '/api/pinboards/items/move',\r\n savePinboards: '/api/pinboards/save',\r\n // Misc Endpoints\r\n getBedroomStorage: '/umbraco/api/BedroomStorage/GetBedroomStorageItems',\r\n getBlogs: '/umbraco/api/blogs/getblogs',\r\n getLocations: '/api/showroom/search',\r\n getLocationRanges: '/api/showroom/ranges',\r\n getRanges: '/api/rangelisting/getrangelisting',\r\n getRangesOffers: '/api/rangelisting/getrangeofferlisting',\r\n getRealRooms: '/umbraco/api/realrooms/getrealrooms',\r\n getSearchResults: '/umbraco/api/searchapi/search',\r\n getTimeslots: '/api/designvisits/timeslots',\r\n // Form Endpoints\r\n postAccountContactForm: '/api/account-contact/submit',\r\n postAccountDepositForm: '/api/account-orders/account-deposit',\r\n postAccountOrderLinesForm: '/api/account-orders/account-order-lines',\r\n postBillingDetails: '/api/payment/initialise-payment',\r\n postBookAFreeDesignVisitForm: '/api/designvisits/book',\r\n postCancelDesignVisitForm: '/api/designvisits/cancel',\r\n postCalculate: '/api/quotes/calculate',\r\n postContactForm: '/api/contact/submit',\r\n postFinanceApplication: '/api/pbf/proceed',\r\n postGatedContentForm: '/api/gated-content/submit',\r\n postMyDetailsForm: '/api/user/update-password',\r\n postQuoteFundingModal: '/api/quotes/quote-funding-modal',\r\n postQuoteList: '/api/quotes/proceed',\r\n postQuotePaymentType: '/api/quotes/declare-sale',\r\n postRequestAFreeBrochureForm: '/api/request-brochure/submit',\r\n postTransferConfirmation: '/api/payment/confirm-transfer',\r\n // Account Form Endpoints\r\n postConfirmNewPassword: '/api/user/confirm-new-password',\r\n postForgottenPassword: '/api/user/forgotten-password',\r\n postLogin: '/api/user/login',\r\n};\r\n","var _path;\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nfunction SvgNavArrowLeft(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15.6 30\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M0 15l.846.944L13.5 30l2.1-1.889L3.79 15 15.6 1.889 13.5 0 .846 14.056z\"\n })));\n}\n\nexport default __webpack_public_path__ + \"f6ba04f14c86d25ce95aced4ad90b419.svg\";\nexport { SvgNavArrowLeft as ReactComponent };","import { css } from 'styled-components';\r\nexport default {\r\n navHeight: 107,\r\n navHeightTablet: 80,\r\n navHeightMobile: 59,\r\n gridGap: 24,\r\n};\r\nexport const ButtonReset = css `\r\n border: none;\r\n outline: none;\r\n padding: 0px;\r\n background: none;\r\n border-radius: 0px;\r\n`;\r\n","import { combineReducers, configureStore } from '@reduxjs/toolkit';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { locationRanges, locations } from './slices/locations';\r\nimport { pinboards } from './slices/pinboards';\r\nconst rootReducer = combineReducers({\r\n locations: locations.reducer,\r\n locationRanges: locationRanges.reducer,\r\n pinboards: pinboards.reducer,\r\n});\r\nconst store = configureStore({\r\n reducer: rootReducer,\r\n});\r\nexport const useAppDispatch = useDispatch;\r\nexport const useAppSelector = useSelector;\r\nexport default store;\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const copyPinboardItems = createAsyncThunk('pinboards/items/copy', async (params) => {\r\n const response = await fetch(API_URLS.copyPinboardItems, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'post',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const createPinboard = createAsyncThunk('pinboards/create', async (params) => {\r\n const response = await fetch(API_URLS.createPinboard, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'post',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const createPinboardItem = createAsyncThunk('pinboards/items/create', async (params) => {\r\n const response = await fetch(API_URLS.createPinboardItem, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'post',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const deletePinboard = createAsyncThunk('pinboards/delete', async (params) => {\r\n const response = await fetch(API_URLS.deletePinboard, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'delete',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const deletePinboardItem = createAsyncThunk('pinboards/items/delete', async (params) => {\r\n const response = await fetch(API_URLS.deletePinboardItem, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'delete',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const movePinboardItems = createAsyncThunk('pinboards/items/move', async (params) => {\r\n const response = await fetch(API_URLS.movePinboardItems, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'post',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const savePinboards = createAsyncThunk('pinboards/save', async (params) => {\r\n const response = await fetch(API_URLS.savePinboards, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'post',\r\n });\r\n return (await response.json());\r\n});\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const updatePinboard = createAsyncThunk('pinboards/update', async (params) => {\r\n const response = await fetch(API_URLS.updatePinboard, {\r\n body: JSON.stringify(params),\r\n headers: { 'Content-Type': 'application/json' },\r\n method: 'put',\r\n });\r\n return (await response.json());\r\n});\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { copyPinboardItems } from './actions/copyPinboardItems';\r\nimport { createPinboard } from './actions/createPinboard';\r\nimport { createPinboardItem } from './actions/createPinboardItem';\r\nimport { deletePinboard } from './actions/deletePinboard';\r\nimport { deletePinboardItem } from './actions/deletePinboardItem';\r\nimport { movePinboardItems } from './actions/movePinboardItems';\r\nimport { retrievePinboards } from './actions/retrievePinboards';\r\nimport { savePinboards } from './actions/savePinboards';\r\nimport { updatePinboard } from './actions/updatePinboard';\r\nconst INITIAL_STATE = {\r\n drawer: {\r\n isActive: false,\r\n },\r\n items: [],\r\n saveData: null,\r\n};\r\nexport const pinboards = createSlice({\r\n initialState: INITIAL_STATE,\r\n name: 'pinboards',\r\n reducers: {\r\n showDrawer(state, action) {\r\n state.drawer.isActive = true;\r\n state.drawer.params = action.payload;\r\n },\r\n hideDrawer(state) {\r\n state.drawer.isActive = false;\r\n state.drawer.params = undefined;\r\n },\r\n },\r\n extraReducers(builder) {\r\n builder.addCase(copyPinboardItems.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(createPinboard.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(createPinboardItem.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(deletePinboard.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(deletePinboardItem.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(movePinboardItems.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(retrievePinboards.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n builder.addCase(savePinboards.fulfilled, (state, action) => {\r\n state.saveData = action.payload;\r\n });\r\n builder.addCase(updatePinboard.fulfilled, (state, action) => {\r\n state.items = action.payload.items;\r\n });\r\n },\r\n});\r\n","const CLOUD_NAME = 'hammonds-furniture';\r\nconst DEFAULT_OPTIONS = {\r\n audio: null,\r\n format: 'mp4',\r\n width: null,\r\n};\r\nexport function videoUrl(id, options = {}) {\r\n const combined = { ...DEFAULT_OPTIONS, ...options };\r\n let transformations = '';\r\n if (options.audio) {\r\n transformations += '/ac_none';\r\n }\r\n if (options.width) {\r\n transformations += `/w_${options.width}`;\r\n }\r\n return `https://res.cloudinary.com/${CLOUD_NAME}/video/upload${transformations}/${id}.${combined.format}`;\r\n}\r\n","export var DrawerMode;\r\n(function (DrawerMode) {\r\n DrawerMode[\"COPY_PINBOARD_ITEMS\"] = \"COPY_PINBOARD_ITEMS\";\r\n DrawerMode[\"CREATE_PINBOARD\"] = \"CREATE_PINBOARD\";\r\n DrawerMode[\"CREATE_PINBOARD_ITEM\"] = \"CREATE_PINBOARD_ITEM\";\r\n DrawerMode[\"DELETE_PINBOARD\"] = \"DELETE_PINBOARD\";\r\n DrawerMode[\"MANAGE_PINBOARD\"] = \"MANAGE_PINBOARD\";\r\n DrawerMode[\"MOVE_PINBOARD_ITEMS\"] = \"MOVE_PINBOARD_ITEMS\";\r\n DrawerMode[\"RENAME_PINBOARD\"] = \"RENAME_PINBOARD\";\r\n DrawerMode[\"DELETE_PIN\"] = \"DELETE_PIN\";\r\n})(DrawerMode || (DrawerMode = {}));\r\n","/**\r\n * The various major z-index layers, adjust with caution and leave space between to add to later.\r\n */\r\nexport const Layers = {\r\n HeaderBackdrop: 90,\r\n Header: 100,\r\n ModalBackdrop: 990,\r\n Modal: 1000,\r\n Popup: 1001,\r\n};\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { rgba } from 'polished';\r\nimport styled from 'styled-components';\r\nconst Button = styled.button `\r\n ${ButtonReset}\r\n\r\n --size: ${fluid(32, 42)};\r\n\r\n display: flex;\r\n background: ${rgba(brand.white, 0.5)};\r\n border-radius: 50%;\r\n color: ${brand.black};\r\n height: var(--size);\r\n place-content: center;\r\n place-items: center;\r\n ${transition('background-color, color')};\r\n width: var(--size);\r\n\r\n &[data-active='true'],\r\n &.focus-ring,\r\n &:hover {\r\n background-color: ${rgba(brand.black, 0.35)};\r\n color: ${brand.white};\r\n }\r\n\r\n &[data-active='true'] {\r\n &.focus-ring,\r\n &:hover {\r\n background-color: ${rgba(brand.black, 0.5)};\r\n color: ${brand.white};\r\n }\r\n }\r\n\r\n svg {\r\n display: block;\r\n height: ${fluid(18, 26)};\r\n width: ${fluid(18, 26)};\r\n }\r\n\r\n @media print {\r\n display: none;\r\n }\r\n`;\r\nconst PinButtonStyles = {\r\n Button,\r\n};\r\nexport default PinButtonStyles;\r\n","var _path;\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nfunction SvgPbButtonPin(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"4.5 2.5 22.07 30.98\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeMiterlimit: 4.28,\n strokeWidth: 2,\n d: \"M25.565 22.45c0-2.857-2.161-5.578-4.46-5.578V7.957a2.245 2.245 0 002.23-2.23 2.244 2.244 0 00-2.23-2.228H9.958a2.244 2.244 0 00-2.23 2.228 2.245 2.245 0 002.23 2.23v8.915c-2.3 0-4.459 2.718-4.459 5.574a1.122 1.122 0 001.115 1.119h7.035l1.325 8.449a.561.561 0 00.557.469h.017a.561.561 0 00.54-.5l.888-8.414h7.474a1.122 1.122 0 001.115-1.119z\",\n \"data-name\": \"Path 151\"\n })));\n}\n\nexport default __webpack_public_path__ + \"e99fbff20e9e0e5d3089dec0a10e962a.svg\";\nexport { SvgPbButtonPin as ReactComponent };","import { withRedux } from '@hoc/withRedux';\r\nimport { ReactComponent as SvgPin } from '@img/icons/pb-button-pin.svg';\r\nimport { pinboards } from '@redux/slices/pinboards';\r\nimport { retrievePinboards } from '@redux/slices/pinboards/actions/retrievePinboards';\r\nimport { DrawerMode } from '@redux/slices/pinboards/types';\r\nimport { useAppDispatch, useAppSelector } from '@redux/store';\r\nimport * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport S from './PinButton.styles';\r\nconst PinButton = (props) => {\r\n const dispatch = useAppDispatch();\r\n const boards = useAppSelector((state) => state.pinboards.items);\r\n React.useEffect(() => {\r\n loadPinboards();\r\n }, []);\r\n const activeBoards = React.useMemo(() => {\r\n const active = boards.map((board) => {\r\n const isActive = board.items.find((item) => {\r\n if (props.data.videoId) {\r\n return props.data.videoId === item.videoId && props.data.url === item.url;\r\n }\r\n else if (props.data.image) {\r\n return props.data.image.src === item.image?.src && props.data.url === item.url;\r\n }\r\n else {\r\n return;\r\n }\r\n });\r\n return { id: board.id, item: isActive };\r\n });\r\n return active.filter((a) => a.item !== undefined);\r\n }, [boards, props.data.videoId, props.data.image]);\r\n return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.Button, { title: `Pin${activeBoards.length > 0 ? ' or Unpin' : ''} This`, \"data-active\": activeBoards.length > 0, onClick: handleClick },\r\n React.createElement(SvgPin, null))));\r\n async function handleClick(event) {\r\n event.preventDefault();\r\n dispatch(pinboards.actions.showDrawer({\r\n mode: DrawerMode.CREATE_PINBOARD_ITEM,\r\n data: props.data,\r\n active: activeBoards,\r\n }));\r\n }\r\n async function loadPinboards() {\r\n dispatch(retrievePinboards());\r\n }\r\n};\r\nexport default withRedux(PinButton);\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\r\nimport qs from 'query-string';\r\nconst INITIAL_STATE = {\r\n apiData: undefined,\r\n apiStatus: 'initial',\r\n filterExpanded: true,\r\n selectedLocationId: '',\r\n};\r\nexport const fetchLocations = createAsyncThunk('locations/fetch', async (params) => {\r\n const response = await fetch(`${API_URLS.getLocations}?${qs.stringify(params)}`);\r\n return (await response.json());\r\n});\r\nexport const locations = createSlice({\r\n name: 'locations',\r\n initialState: INITIAL_STATE,\r\n reducers: {\r\n deselectLocation: (state) => {\r\n state.selectedLocationId = '';\r\n },\r\n selectLocation: (state, action) => {\r\n state.selectedLocationId = action.payload;\r\n },\r\n toggleFilter: (state, action) => {\r\n if (action.payload === undefined) {\r\n state.filterExpanded = !state.filterExpanded;\r\n }\r\n else {\r\n state.filterExpanded = action.payload;\r\n }\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder.addCase(fetchLocations.fulfilled, (state, action) => {\r\n state.apiData = action.payload;\r\n state.apiStatus = 'complete';\r\n state.selectedLocationId = '';\r\n });\r\n builder.addCase(fetchLocations.pending, (state) => {\r\n state.apiStatus = 'loading';\r\n state.selectedLocationId = '';\r\n });\r\n builder.addCase(fetchLocations.rejected, (state) => {\r\n state.apiData = undefined;\r\n state.apiStatus = 'complete';\r\n state.selectedLocationId = '';\r\n });\r\n },\r\n});\r\nconst INITIAL_RANGES_STATE = {\r\n apiData: undefined,\r\n apiStatus: 'initial',\r\n};\r\nexport const fetchLocationRanges = createAsyncThunk('locations/fetchRanges', async (params) => {\r\n const response = await fetch(`${API_URLS.getLocationRanges}?${qs.stringify(params)}`);\r\n return (await response.json());\r\n});\r\nexport const locationRanges = createSlice({\r\n name: 'locationRanges',\r\n initialState: INITIAL_RANGES_STATE,\r\n reducers: {},\r\n extraReducers: (builder) => {\r\n builder.addCase(fetchLocationRanges.fulfilled, (state, action) => {\r\n state.apiData = action.payload;\r\n state.apiStatus = 'complete';\r\n });\r\n builder.addCase(fetchLocationRanges.pending, (state) => {\r\n state.apiStatus = 'loading';\r\n });\r\n builder.addCase(fetchLocationRanges.rejected, (state) => {\r\n state.apiData = undefined;\r\n state.apiStatus = 'complete';\r\n });\r\n },\r\n});\r\n","var _path;\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nfunction SvgNavArrowRight(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 5 9.286\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M5 4.643l-.271-.292L.673 0 0 .585l3.785 4.058L0 8.7l.673.585 4.056-4.35z\"\n })));\n}\n\nexport default __webpack_public_path__ + \"56e05cca84d2cb4def6c69e7fc0f12ac.svg\";\nexport { SvgNavArrowRight as ReactComponent };","export function isMediaVideo(media) {\r\n return media.videoId !== undefined && media.videoId !== null;\r\n}\r\n","import { API_URLS } from '@helpers/api';\r\nimport { createAsyncThunk } from '@reduxjs/toolkit';\r\nexport const retrievePinboards = createAsyncThunk('pinboards/retrieve', async () => {\r\n const response = await fetch(API_URLS.retrievePinboards);\r\n return (await response.json());\r\n});\r\n","import store from '@redux/store';\r\nimport React from 'react';\r\nimport { Provider } from 'react-redux';\r\nexport function withRedux(WrappedComponent) {\r\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n const ComponentWithRedux = (props) => {\r\n return (React.createElement(Provider, { store: store },\r\n React.createElement(WrappedComponent, { ...props })));\r\n };\r\n ComponentWithRedux.displayName = `withRedux(${displayName})`;\r\n return ComponentWithRedux;\r\n}\r\n","import queryString from 'query-string';\r\n/**\r\n * Create an image URL for ImageProcessor\r\n * @param image The image model\r\n * @param imageParams The image parameters\r\n * @returns The image URL\r\n */\r\nexport function imageUrl(image, imageParams) {\r\n if (!image || !image.src) {\r\n return '';\r\n }\r\n /**\r\n * Remove any query param string to ensure paramsString is applied correctly and\r\n * there are no double definitions (setting a param twice prevents any tranformations)\r\n */\r\n const imageSource = image.src.split('?')[0];\r\n const params = {\r\n rxy: image.focalPoint ? `${image.focalPoint.left},${image.focalPoint.top}` : undefined,\r\n // Define default quality as 90 to ensure some reduction in size for all but the smallest images\r\n quality: imageParams.width && imageParams.width > 400 ? 90 : 100,\r\n // Default the format to jpg, except in cases where the original image is an SVG or PNG\r\n format: imageSource.includes('.svg') || imageSource.includes('.png')\r\n ? undefined\r\n : imageParams.format ?? 'jpg',\r\n // Default the rsampler to lanczos8\r\n rsampler: imageParams.rsampler ?? 'lanczos8',\r\n ...imageParams,\r\n };\r\n const paramsString = queryString.stringify(params);\r\n return `${imageSource}${paramsString ? `?${queryString.stringify(params)}` : ''}`;\r\n}\r\nexport function getSrcs(image, upper, lower, steps, ratio, params) {\r\n const sizes = getRange(upper, lower, steps);\r\n return sizes.map((size) => `${imageUrl(image, {\r\n width: size,\r\n height: ratio ? Math.round(size * ratio) : undefined,\r\n ...params,\r\n })} ${size}w`);\r\n}\r\nfunction getRange(upper, lower, steps) {\r\n const difference = upper - lower;\r\n const increment = difference / (steps - 1);\r\n return [\r\n lower,\r\n ...Array(steps - 2)\r\n .fill('')\r\n .map((_, index) => Math.ceil(lower + increment * (index + 1))),\r\n upper,\r\n ];\r\n}\r\n","var _path;\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nfunction SvgClose(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 14.001\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M6.97 5.315c.231-.216.431-.4.621-.585q2.007-2 4.012-4.009a4.371 4.371 0 01.542-.5 1.149 1.149 0 011.5.125 1.117 1.117 0 01.119 1.5 4.5 4.5 0 01-.5.542q-2 2.007-4.009 4.012c-.19.191-.371.392-.591.624.214.228.393.429.584.619l3.949 3.955a4.385 4.385 0 01.5.543 1.166 1.166 0 01-.086 1.442 1.119 1.119 0 01-1.49.186 3.843 3.843 0 01-.546-.494q-1.977-1.977-3.949-3.957c-.192-.194-.346-.424-.548-.675-.277.248-.464.4-.633.569q-2.038 2.03-4.071 4.067a4.95 4.95 0 01-.478.451 1.144 1.144 0 01-1.565-.08 1.189 1.189 0 01-.066-1.575 5.142 5.142 0 01.457-.473c1.317-1.318 2.631-2.638 3.955-3.949a7.783 7.783 0 01.676-.535c-.258-.288-.408-.472-.575-.641Q2.748 4.439.712 2.406a3.724 3.724 0 01-.492-.548A1.151 1.151 0 011.787.247a3.405 3.405 0 01.552.488q2.009 2 4.012 4.008c.19.189.393.364.619.572z\",\n fillRule: \"evenodd\"\n })));\n}\n\nexport default __webpack_public_path__ + \"a737beca367534378f0194a23b96db71.svg\";\nexport { SvgClose as ReactComponent };","import noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nconst ModalContext = React.createContext({\r\n closeOnBackground: false,\r\n showBackground: false,\r\n showClose: false,\r\n onClose: noop,\r\n});\r\nexport const useModal = () => React.useContext(ModalContext);\r\nexport const ModalProvider = (props) => {\r\n return React.createElement(ModalContext.Provider, { value: props }, props.children);\r\n};\r\n","import styled from 'styled-components';\r\nconst Background = styled.div `\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n display: block;\r\n background: var(--tintColor);\r\n height: 100%;\r\n width: 100%;\r\n\r\n &[data-close='true'] {\r\n cursor: zoom-out;\r\n }\r\n`;\r\nconst BackgroundStyles = {\r\n Background,\r\n};\r\nexport default BackgroundStyles;\r\n","import * as React from 'react';\r\nimport { useModal } from '../Context/Context';\r\nimport S from './Background.styles';\r\nconst Background = () => {\r\n const modal = useModal();\r\n return (React.createElement(S.Background, { \"data-close\": modal.closeOnBackground, \"aria-hidden\": true, onClick: modal.closeOnBackground\r\n ? (event) => {\r\n event.preventDefault();\r\n modal.onClose();\r\n }\r\n : undefined }));\r\n};\r\nexport default Background;\r\n","import { ButtonReset } from '@helpers/global';\r\nimport { Device, from } from '@helpers/media';\r\nimport styled from 'styled-components';\r\nconst Button = styled.button `\r\n ${ButtonReset}\r\n\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n display: grid;\r\n background: var(--bgColor);\r\n color: var(--fgColor);\r\n height: var(--buttonSize);\r\n place-content: center;\r\n place-items: center;\r\n width: var(--buttonSize);\r\n z-index: 1;\r\n transform: translate(-50%, 50%);\r\n\r\n svg {\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n\r\n &.focus-ring {\r\n outline: auto;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n position: absolute;\r\n transform: translateY(-150%);\r\n }\r\n`;\r\nconst CloseStyles = {\r\n Button,\r\n};\r\nexport default CloseStyles;\r\n","import { ReactComponent as SvgClose } from '@img/icons/close.svg';\r\nimport { FocusRing } from '@react-aria/focus';\r\nimport * as React from 'react';\r\nimport { useModal } from '../Context/Context';\r\nimport S from './Close.styles';\r\nconst Close = () => {\r\n const modal = useModal();\r\n return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.Button, { type: \"button\", \"aria-label\": \"Close\", onClick: (event) => {\r\n event.preventDefault();\r\n modal.onClose();\r\n } },\r\n React.createElement(SvgClose, null))));\r\n};\r\nexport default Close;\r\n","import brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport { Layers } from '@helpers/layers';\r\nimport { Device, from } from '@helpers/media';\r\nimport styled from 'styled-components';\r\nconst Container = styled.section `\r\n --bgColor: transparent;\r\n --fgColor: ${brand.white};\r\n --tintColor: rgba(0, 0, 0, 0.7);\r\n --buttonSize: ${fluid(18, 35)};\r\n --gutter: 75px;\r\n\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n display: grid;\r\n color: var(--fgColor);\r\n height: 100%;\r\n place-content: center;\r\n place-items: center;\r\n width: 100%;\r\n z-index: ${Layers.Modal};\r\n\r\n &[data-open='false'] {\r\n display: none;\r\n }\r\n`;\r\nconst Inner = styled.div `\r\n position: relative;\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n margin: var(--gutter) 0;\r\n\r\n > video,\r\n > img {\r\n max-height: calc(100vh - (var(--gutter) * 2));\r\n }\r\n }\r\n`;\r\nconst ModalStyles = {\r\n Container,\r\n Inner,\r\n};\r\nexport default ModalStyles;\r\n","import { isSSR } from '@helpers/ssr';\r\nimport { FocusScope } from '@react-aria/focus';\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport Background from './Background/Background';\r\nimport Close from './Close/Close';\r\nimport { ModalProvider } from './Context/Context';\r\nimport S from './Modal.styles';\r\nconst Modal = (props) => {\r\n if (isSSR() || !props.isOpen) {\r\n return null;\r\n }\r\n // Use #root if available, otherwise fallback to body.\r\n const portalContainer = document.getElementById('root') ?? document.body;\r\n const portalContent = (React.createElement(ModalProvider, { closeOnBackground: props.closeOnBackground, showBackground: props.showBackground, showClose: props.showClose, onClose: props.onClose },\r\n React.createElement(FocusScope, { autoFocus: true, contain: true, restoreFocus: true },\r\n React.createElement(S.Container, { id: props.id, role: \"dialog\", \"aria-label\": props.ariaLabel, \"aria-modal\": \"true\", onKeyDown: (event) => {\r\n if (event.key === 'Escape') {\r\n props.onClose();\r\n }\r\n } },\r\n props.showBackground && React.createElement(Background, null),\r\n React.createElement(S.Inner, null,\r\n props.children,\r\n props.showClose && React.createElement(Close, null))))));\r\n return ReactDOM.createPortal(portalContent, portalContainer);\r\n};\r\nexport default Modal;\r\n"],"sourceRoot":""}