{"version":3,"sources":["webpack://_N_E/../../../next-server/lib/amp.ts","webpack://_N_E/./src/components/dialog/dialog.tsx","webpack://_N_E/./node_modules/react-query/es/react/useIsMounted.js","webpack://_N_E/./src/assets/icons/icon-cross.svg","webpack://_N_E/./node_modules/warning/warning.js","webpack://_N_E/../../../next-server/lib/head.tsx","webpack://_N_E/./src/assets/icons/icon-alert.svg","webpack://_N_E/./node_modules/tabbable/index.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack://_N_E/./src/assets/icons/icon-emergency.svg","webpack://_N_E/./src/components/emergency-nav/emergency-nav.styled.ts","webpack://_N_E/./src/components/emergency-nav/emergency-nav.tsx","webpack://_N_E/./src/assets/icons/icon-facebook.svg","webpack://_N_E/./src/assets/icons/icon-instagram.svg","webpack://_N_E/./src/assets/icons/icon-linkedin.svg","webpack://_N_E/./src/assets/icons/icon-twitter.svg","webpack://_N_E/./src/assets/icons/icon-youtube.svg","webpack://_N_E/./src/components/social-nav/social-nav.styled.tsx","webpack://_N_E/./src/components/social-nav/social-nav.tsx","webpack://_N_E/./src/components/footer/footer.styled.ts","webpack://_N_E/./src/components/footer/footer.tsx","webpack://_N_E/./node_modules/@reach/menu-button/dist/menu-button.esm.js","webpack://_N_E/./src/assets/icons/icon-hamburger.svg","webpack://_N_E/./src/components/primary-nav/primary-nav.styles.ts","webpack://_N_E/./src/components/primary-nav/primary-nav.tsx","webpack://_N_E/./src/components/status-bar/status-bar.styles.ts","webpack://_N_E/./src/components/status-bar/status-bar.tsx","webpack://_N_E/./src/components/header/header.styles.ts","webpack://_N_E/./src/components/header/header.tsx","webpack://_N_E/./src/components/plan-controls/plan-controls.styles.ts","webpack://_N_E/./src/components/plan-controls/plan-controls.tsx","webpack://_N_E/./src/components/preview-banner/preview-banner.styled.ts","webpack://_N_E/./src/components/preview-banner/preview-banner.tsx","webpack://_N_E/./src/components/upgrade-message-dialog/upgrade-message-dialog.tsx","webpack://_N_E/./src/components/layout/layout.styled.ts","webpack://_N_E/./src/components/layout/layout.tsx","webpack://_N_E/./src/components/hide-visually/hide-visually.styled.ts","webpack://_N_E/./src/components/hide-visually/hide-visually.tsx","webpack://_N_E/./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack://_N_E/../../../next-server/lib/head-manager-context.ts","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://_N_E/./src/components/back-link/back-link.tsx","webpack://_N_E/./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack://_N_E/./src/components/plan-summary/utils.ts","webpack://_N_E/./node_modules/@reach/alert-dialog/dist/alert-dialog.esm.js","webpack://_N_E/./src/components/alert-dialog/alert-dialog.tsx","webpack://_N_E/./src/api/migration/v1tov2.ts","webpack://_N_E/./src/api/migration/PlanMigrator.ts","webpack://_N_E/./node_modules/slugify/slugify.js","webpack://_N_E/./src/hooks/use-plan.ts","webpack://_N_E/./node_modules/invariant/browser.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack://_N_E/./node_modules/react-query/es/core/mutationObserver.js","webpack://_N_E/./node_modules/react-query/es/react/useMutation.js","webpack://_N_E/./src/components/back-link/back-link.styles.ts","webpack://_N_E/./node_modules/react-query/es/core/queryObserver.js","webpack://_N_E/./node_modules/react-query/es/react/QueryErrorResetBoundary.js","webpack://_N_E/./node_modules/react-query/es/react/useBaseQuery.js","webpack://_N_E/./node_modules/react-query/es/react/useQuery.js","webpack://_N_E/./src/hooks/use-user-profile.ts","webpack://_N_E/./node_modules/@reach/descendants/dist/descendants.esm.js","webpack://_N_E/./node_modules/@reach/portal/dist/portal.esm.js","webpack://_N_E/../../../next-server/lib/side-effect.tsx","webpack://_N_E/./node_modules/next/link.js","webpack://_N_E/../../client/link.tsx","webpack://_N_E/./node_modules/@reach/observe-rect/dist/observe-rect.esm.js","webpack://_N_E/./node_modules/@reach/rect/dist/rect.esm.js","webpack://_N_E/./node_modules/@reach/popover/dist/popover.esm.js","webpack://_N_E/./node_modules/@reach/utils/dist/utils.esm.js","webpack://_N_E/./node_modules/next/head.js","webpack://_N_E/./node_modules/@reach/auto-id/dist/auto-id.esm.js","webpack://_N_E/../../../next-server/lib/amp-context.ts","webpack://_N_E/./src/components/spinner/spinner.tsx","webpack://_N_E/./src/components/headings/headings.styled.tsx","webpack://_N_E/./src/hooks/use-is-loggedIn.ts","webpack://_N_E/./node_modules/js-cookie/src/js.cookie.js","webpack://_N_E/./src/components/button/button.tsx","webpack://_N_E/../../client/use-intersection.tsx","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/constants.js","webpack://_N_E/./node_modules/use-callback-ref/dist/es2015/useMergeRef.js","webpack://_N_E/./node_modules/use-callback-ref/dist/es2015/useRef.js","webpack://_N_E/./node_modules/use-callback-ref/dist/es2015/assignRef.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/FocusGuard.js","webpack://_N_E/./node_modules/use-sidecar/dist/es2015/medium.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/medium.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/Lock.js","webpack://_N_E/./node_modules/react-clientside-effect/lib/index.es.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/array.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/all-affected.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/focusInside.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/correctFocus.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/firstFocus.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/is.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/solver.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/tabOrder.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/tabUtils.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/tabbables.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/DOMutils.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/utils/parenting.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/focusMerge.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/setFocus.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/index.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/util.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/Trap.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/focusIsHidden.js","webpack://_N_E/./node_modules/focus-lock/dist/es2015/focusables.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/Combination.js","webpack://_N_E/./node_modules/react-focus-lock/dist/es2015/index.js","webpack://_N_E/./node_modules/react-remove-scroll-bar/dist/es2015/constants.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/medium.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/UI.js","webpack://_N_E/./node_modules/use-sidecar/dist/es2015/exports.js","webpack://_N_E/./node_modules/get-nonce/dist/es2015/index.js","webpack://_N_E/./node_modules/react-style-singleton/dist/es2015/singleton.js","webpack://_N_E/./node_modules/react-style-singleton/dist/es2015/component.js","webpack://_N_E/./node_modules/react-style-singleton/dist/es2015/hook.js","webpack://_N_E/./node_modules/react-remove-scroll-bar/dist/es2015/utils.js","webpack://_N_E/./node_modules/react-remove-scroll-bar/dist/es2015/component.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/handleScroll.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/SideEffect.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/sidecar.js","webpack://_N_E/./node_modules/react-remove-scroll/dist/es2015/Combination.js","webpack://_N_E/./node_modules/@reach/dialog/dist/dialog.esm.js"],"names":["isInAmpMode","React","AmpStateContext","ampFirst","hybrid","hasQuery","fadeIn","keyframes","rem","BaseDialogContentStyles","css","theme","zIndex","colors","palette","black","white","math","borderRadius","medium","DialogOverlayStyles","transparentize","DialogOverlay","styled","ReachDialogOverlay","DialogContentStyles","DialogContent","ReachDialogContent","DialogTitle","H5","attrs","as","id","DialogCloseButton","button","type","redDark","DialogClose","children","iconDimensions","props","aria-hidden","role","width","height","ReachDialog","useIsMounted","mountedRef","useRef","isMounted","useCallback","current","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_ref","d","fill","_ref2","SvgIconCross","xmlns","viewBox","warning","module","exports","defaultHead","inAmpMode","head","charSet","name","content","onlyReactElement","child","list","fragmentChild","fragmentList","METATYPES","reduceComponents","headElements","headElementChildren","headElement","keys","tags","metaTypes","metaCategories","h","isUnique","hasKey","len","metatype","category","categories","unique","c","Head","ampState","useContext","headManager","HeadManagerContext","reduceComponentsToState","clipPath","SvgIconAlert","candidateSelectors","candidateSelector","join","matches","Element","msMatchesSelector","webkitMatchesSelector","tabbable","el","options","candidate","candidateTabindex","regularTabbables","orderedTabbables","candidates","querySelectorAll","includeContainer","Array","slice","unshift","isNodeMatchingSelectorTabbable","getTabindex","push","documentOrder","tabIndex","node","sort","sortOrderedTabbables","map","a","concat","isNodeMatchingSelectorFocusable","isInput","isRadio","checked","nodes","getCheckedRadio","ownerDocument","isTabbableRadio","isNonTabbableRadio","disabled","isHiddenInput","offsetParent","getComputedStyle","visibility","isHidden","isTabbable","Error","isFocusable","focusableCandidateSelector","tabindexAttr","parseInt","getAttribute","isNaN","contentEditable","isContentEditable","b","tagName","TypeError","SvgIconEmergency","Wrapper","div","mediaQueries","List","ul","Item","li","Link","iconSize","svgSize","size","EmergencyNav","iconProps","href","rel","title","aria-label","SvgIconFacebook","SvgIconInstagram","SvgIconLinkedin","SvgIconTwitter","SvgIconYoutube","large","Intro","p","hideVisually","small","Reveal","SocialNav","settings","url","facebook","twitter","instagram","linkedin","youtube","Copyright","FooterGroup","FooterLinks","greyDark","Footer","aria-labelledby","nav","link","blank","undefined","slugify","defaultProps","_objectWithoutPropertiesLoose","excluded","sourceKeys","indexOf","CLEAR_SELECTION_INDEX","CLICK_MENU_ITEM","CLOSE_MENU","OPEN_MENU_AT_INDEX","OPEN_MENU_CLEARED","SEARCH_FOR_ITEM","SELECT_ITEM_AT_INDEX","SET_BUTTON_ID","MenuDescendantContext","MenuContext","initialState","buttonId","isExpanded","typeaheadQuery","selectionIndex","buttonRef","menuRef","popoverRef","_useDescendantsInit","descendants","setDescendants","_React$useReducer","reducer","state","dispatch","_id","menuId","buttonClickedRef","selectCallbacks","readyToSelect","context","window","__REACH_DISABLE_TOOLTIPS","requestAnimationFrame","items","set","Provider","value","isOpen","forwardedRef","_ref2$as","Comp","onKeyDown","onMouseDown","_React$useContext","_React$useContext$sta","ref","firstNonDisabledIndex","findIndex","item","newButtonId","payload","event","preventDefault","index","isRightClick","nativeEvent","_ref3","indexProp","_ref3$isLink","isLink","onClick","onDragStart","onMouseEnter","onMouseLeave","onMouseMove","onMouseUp","onSelect","valueTextProp","valueText","_React$useContext2","_React$useContext2$st","ownRef","_React$useState","setValueText","setValueTextFromDom","textContent","mouseEventStarted","element","isSelected","select","listener","addEventListener","removeEventListener","useMenuItemId","click","_ref4","_ref4$as","_ref5","_ref5$as","_React$useContext3","_React$useContext3$st","menuItems","match","string","found","find","_item$element","_item$element$dataset","_item$element$dataset2","dataset","valuetext","toLowerCase","startsWith","findItemFromTypeahead","timeout","setTimeout","clearTimeout","prevMenuItemsLength","prevSelected","prevSelectionIndex","handleKeyDown","selected","query","currentIndex","orientation","rotate","filter","callback","_ref6","_ref6$as","component","console","warn","_ref7","_ref7$portal","portal","_ref8","_ref8$as","_ref8$portal","position","_React$useContext4","popover","contains","commonProps","hidden","targetRef","which","focus","action","max","Math","min","SvgIconHamburger","NavContainer","AlertButton","MenuLink","lighten","grey","MenuList","ReachMenuList","navContainer","background","buttonBase","MenuButton","ReachMenuButton","CloseButton","LogoContainer","Logo","img","PrimaryNav","navItems","isLoggedIn","logoTitle","onLogout","CMSLinks","useMemo","passHref","APP_ROUTES","home","src","alt","leave","LeaveEarlyIntroModeEnum","Default","stay","account","users","stayInformed","resources","australianWarningSystem","fireDangerRatings","signIn","signUp","BarGlobals","createGlobalStyle","Bar","orange","StatusBarClose","StatusBar","onClose","headerBase","StyledHeader","header","Header","useAuth","isVerified","loading","logout","useIsLoggedIn","siteSettings","useSiteSettings","useState","isUnverified","setIsUnverified","useEffect","BackLinkStyled","SaveButtonWrapper","SaveButton","Button","PlanControls","onDismiss","onSave","backLink","useStore","navigation","showClose","close","showSave","save","resetBacklink","split","Preview","space","ExitPreview","variant","PreviewBanner","preview","router","useRouter","Cookies","remove","previewCookieName","replace","UpgradeMessageDialog","useUserProfileAPI","useUserProfile","useUpdateUserProfile","usePlans","usePlanAPI","updateUserProfile","mutate","plans","data","userProfile","showDialog","setShowDialog","logger","log","PLAN_VERSION","latestAcknowledgedVersion","info","GlobalStyles","text","SkipNav","ContentWrapper","Main","main","values","dimBackground","SingleUseDialog","dynamic","Layout","mainBackground","showPlanControls","showEditControls","afterMainContent","queryClient","useQueryClient","isAuthenticated","isAnonymous","getPlanId","setPlanId","getPlanDraftDirtyFlag","getPlanDraft","clearStore","plan","draft","progress","planStep","planType","useCreatePlan","useUpsertPlan","createRemotePlan","updateRemotePlan","remotePlanData","showClosePlannerModal","setShowClosePlannerModal","cancelActionRef","handleLeaveWithoutSaving","then","planRoute","getPlanLink","storedBacklink","showDefaultNav","createPlan","currentDraft","newPlanName","derivePlanTitle","mutateAsync","res","planId","planDataWithMetadata","logCreatePlan","error","savePlan","currentPlanId","handleSaveClick","summary","handleDismissClick","planDraft","logDismissPlan","getPlanStepId","clear","footer","leastDestructiveRef","storageKey","VisuallyHidden","span","HideVisually","iter","Symbol","iterator","from","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","BackLink","linkProps","arrayLikeToArray","arr","isArray","getPageTitle","complete","planName","PlanDataTypeEnum","Leave","Stay","thisPlan","allPlans","numberOfPlansOfType","baseTitle","getPlanTitle","getIntro","getPlanPDFName","getLetterFromIndex","alphabet","result","groupCount","floor","remainder","toUpperCase","AlertDialogContext","labelId","descriptionId","overlayRef","initialFocusRef","getElementById","AlertDialogLabel","_ref3$as","AlertDialogOverlay","ReachAlertDialog","ReachAlertDialogOverlay","AlertDialogContent","ReachAlertDialogContent","H4","ReachAlertDialogLabel","AlertDialogDescription","ReachAlertDialogDescription","AlertDialogActionsWrapper","StyledButton","migrate","produce","version","whenToLeave","whenToLeaveWithSelections","selections","notes","place","whereToGo","nameOfPlaceToGo","wayToGetThere","routes","getPlaceToGo","whereToGoOptions","places","whoToCall","first","second","firstContact","secondContact","whoToCallOptions","contacts","whatToTake","whatToTakeAndWhereToStore","kitLocation","acknowledged","backup","shelter","backupAndShelter","nooneHome","guests","completed","completionAcknowledged","migratePlan","steps","leaveEarly","migrateV1toV2","stepsToMigrate","toVersion","failedStep","factory","charMap","JSON","parse","locales","locale","replacement","slug","reduce","ch","trim","RegExp","lower","strict","extend","customMap","queryKeys","token","isRegisteredUser","ready","setReady","plansApi","PlansApi","apiKey","planHelpers","getPlans","checkPlans","email","upsertPlan","useQuery","enabled","retry","refetchOnWindowFocus","onSuccess","isPlanDirty","selectedPlanId","localStorage","getItem","planIdStorageKey","planData","migratedPlan","logPlanMigration","updated","setItem","onError","toast","statusMessages","fetchError","useHasExistingPlan","useCheckPlanForEmail","useMutation","invalidateQueries","isDirty","createError","success","saveSuccess","prefetchQuery","saveError","saveErrorUnauthenticated","emailPlan","Promise","resolve","message","json","response","isDevBuild","reject","condition","format","e","f","args","argIndex","framesToPop","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_Subscribable","MutationObserver","client","_this","setOptions","bindMethods","updateResult","_proto","bind","reset","defaultMutationOptions","onUnsubscribe","_this$currentMutation","listeners","currentMutation","removeObserver","onMutationUpdate","notifyOptions","notify","getCurrentResult","currentResult","variables","mutateOptions","getMutationCache","build","addObserver","execute","status","_this2","notifyManager","batch","onSettled","forEach","arg1","arg2","arg3","observerRef","observer","hasListeners","setCurrentResult","subscribe","batchCalls","catch","useErrorBoundary","QueryObserver","initialDataUpdateCount","initialErrorUpdateCount","trackedProps","refetch","onSubscribe","updateQuery","currentQuery","willFetchOnMount","executeFetch","updateTimers","destroy","willLoadOnMount","dataUpdatedAt","retryOnMount","willRefetchOnMount","refetchOnMount","isStale","willFetchOnReconnect","refetchOnReconnect","willFetchOnWindowFocus","willFetchOptionally","isStaleByTime","staleTime","clearTimers","previousOptions","defaultQueryObserverOptions","optionalFetch","updateStaleTimeout","updateRefetchInterval","queryKey","refetchInterval","getTrackedCurrentResult","trackedCurrentResult","getNextResult","unsubscribe","isFetching","isError","throwOnError","getCurrentQuery","getQueryCache","fetch","fetchOptions","_this3","promise","_this4","clearStaleTimeout","staleTimeoutId","_this5","clearRefetchInterval","refetchIntervalId","setInterval","refetchIntervalInBackground","focusManager","isFocused","clearInterval","getNewResult","_this$previousQueryRe","isPreviousData","isPlaceholderData","keepPreviousData","dataUpdateCount","previousQueryResult","isSuccess","_this$currentResultSt","_this$previousOptions","_this$currentResult","currentResultState","structuralSharing","placeholderData","errorUpdatedAt","failureCount","fetchFailureCount","isFetched","errorUpdateCount","isFetchedAfterMount","isLoadingError","isRefetchError","shouldNotifyListeners","prevResult","_this6","_this$options","notifyOnChangeProps","notifyOnChangePropsExclusions","includedProps","_loop","changed","isIncluded","some","x","isExcluded","v","_ret","_this7","defineProperty","configurable","enumerable","get","prop","includes","cache","prevQuery","onQueryUpdate","_this8","createValue","_isReset","clearReset","isReset","QueryErrorResetBoundaryContext","createContext","useBaseQuery","Observer","errorResetBoundary","defaultedOptions","suspense","isLoading","finally","usersApi","UsersApi","getUserProfile","auth","userProfileFetchError","showToast","userProfileUpdateSuccess","userProfileUpdateError","createDescendantContext","initialValue","registerDescendant","unregisterDescendant","useDescendant","descendant","forceUpdate","previousDescendants","someDescendantsHaveChanged","_previousDescendants$","useDescendantsInit","useDescendants","ctx","DescendantProvider","Ctx","explicitIndex","rest","newItems","Boolean","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","newItem","useDescendantKeyDown","_options$key","_options$orientation","_options$rotate","_options$rtl","rtl","selectableDescendants","next","getNextOption","prev","getPreviousOption","nextOrPrev","prevOrNext","prevOrFirst","ctrlKey","getFirstOption","nextOrLast","getLastOption","last","Portal","_ref$type","mountNode","portalNode","createElement","body","appendChild","removeChild","constructor","_hasHeadManager","emitChange","Component","prefetched","prefetch","isLocalURL","err","curLocale","pathname","resolveHref","resolvedAs","Children","childRef","useIntersection","rootMargin","setRef","setIntersectionRef","shouldPrefetch","isVisible","isPrefetched","childProps","nodeName","isModifiedEvent","scroll","shallow","document","linkClicked","priority","localeDomain","getDomainLocale","addBasePath","addLocale","rafId","observedNodes","Map","run","changedStates","newRect","getBoundingClientRect","rect","callbacks","cb","observe","wasEmpty","has","hasRectChanged","unobserve","splice","cancelAnimationFrame","useRect","nodeRef","observeOrOptions","deprecated_onChange","onChange","_observeOrOptions$obs","setElement","initialRectIsSet","initialRefIsSet","_React$useState2","setRect","onChangeRef","stableOnChange","elem","cleanup","_ref$as","_ref$position","positionDefault","_ref$unstable_observa","unstable_observableRefs","popoverRect","targetRect","triggerRef","shiftKey","shiftTabbedFromElementAfterTrigger","focusLastTabbableInPopover","shiftTabbedOutOfPopover","focusTriggerRef","shiftTabbedToBrowserChrome","disableTabbablesInPopover","tabbedFromTriggerToPopover","focusFirstPopoverTabbable","tabbedOutOfPopover","focusTabbableAfterTrigger","tabbedToBrowserChrome","getElementAfterTrigger","elements","targetIndex","elementAfterTrigger","activeElement","_triggerRef$current","restoreTabIndexTuplés","enableTabbablesInPopover","useSimulateTabNavigationForReactTree","style","getStyles","_len","_key","getTopPosition","top","getCollisions","directionUp","pageYOffset","left","directionRight","right","pageXOffset","positionMatchWidth","offsetLeft","offsetBottom","collisions","innerWidth","bottom","innerHeight","directionLeft","directionDown","useIsomorphicLayoutEffect","canUseDOM","self","assignRef","isFunction","createNamedContext","defaultValue","displayName","forwardRefWithAs","render","getOwnerDocument","isBoolean","toString","isString","makeId","_len2","_key2","val","noop","useCheckStyles","useLazyRef","fn","__internalSet","useForceUpdate","create","useForkedRef","_len4","refs","_key4","every","usePrevious","useStableCallback","callbackRef","useUpdateEffect","effect","deps","mounted","wrapEvent","theirHandler","ourHandler","defaultPrevented","serverHandoffComplete","genId","useId","idFromProps","initialId","setId","String","spin","Spinner","spinnerSize","color","centre","mainColor","rgba","common","components","heading","H1","h1","H2","h2","H3","h3","h4","h5","setIsLoggedIn","OldCookies","api","noConflict","attributes","decode","s","decodeURIComponent","init","converter","path","defaults","expires","Date","toUTCString","stringify","test","write","encodeURIComponent","escape","stringifiedAttributes","attributeName","cookie","jar","cookies","parts","charAt","read","getJSON","withConverter","block","border","lightBlue","forwardRef","isDisabled","instance","observers","IntersectionObserver","entries","entry","createObserver","setVisible","hasIntersectionObserver","FOCUS_GROUP","FOCUS_DISABLED","useMergeRefs","facade","useCallbackRef","newValue","hiddenGuard","padding","overflow","propTypes","ItoI","innerCreateMedium","middleware","buffer","assigned","useMedium","assignSyncMedium","cbs","assignMedium","pendingQueue","executeQueue","cycle","createMedium","createSidecarMedium","async","ssr","mediumFocus","currentTarget","mediumBlur","mediumEffect","mediumSidecar","emptyArray","FocusLock","parentRef","_extends2","realObserved","setObserved","observed","isActive","originalFocusedElement","noFocusGuards","persistentFocus","crossFrame","autoFocus","group","allowTextSelection","className","whiteList","_props$shards","shards","_props$as","Container","_props$lockProps","lockProps","containerProps","SideCar","sideCar","shouldReturnFocus","returnFocus","onActivationCallback","onActivation","onDeactivationCallback","onDeactivation","allowDefer","focusOptions","onFocus","onBlur","setObserveNode","newObserved","hasLeadingGuards","hasTailingGuards","mergedRef","reducePropsToState","handleStateChangeOnClient","WrappedComponent","mountedInstances","SideEffect","_PureComponent","peek","componentDidMount","componentDidUpdate","componentWillUnmount","getDisplayName","toArray","ret","asArray","getTopParent","parentNode","getAllAffectedNodes","acc","currentNode","contained","Set","l","j","DOCUMENT_POSITION_CONTAINED_BY","add","DOCUMENT_POSITION_CONTAINS","_","filterNested","focusInsideIframe","topNode","focusInside","focusGuard","correctNode","findSelectedRadio","pickFirstFocus","pickFocusable","nodeType","DOCUMENT_NODE","computedStyle","getPropertyValue","DOCUMENT_FRAGMENT_NODE","host","isGuard","isNotAGuard","isDefined","NEW_FOCUS","newFocus","innerNodes","outerNodes","lastNode","cnt","firstFocus","lastFocus","isOnGuard","activeIndex","lastIndex","lastNodeInside","indexDiff","firstNodeIndex","lastNodeIndex","correctedNodes","resultSet","correctNodes","correctedIndexDiff","returnFirstNode","returnLastNode","abs","tabSort","tabDiff","orderByTabIndex","filterNegative","keepGuards","queryTabbables","queryGuardTabbables","getFocusables","parents","withGuards","parent","filterFocusable","notHiddenInput","getTabbableNodes","topNodes","getAllTabbableNodes","parentAutofocusables","parentFocus","getParentAutofocusables","getParents","getCommonParent","nodeA","nodeB","parentsA","parentsB","currentParent","getTopCommonParent","baseActiveElement","leftEntry","rightEntries","activeElements","leftEntries","topCommon","subEntry","getFocusMerge","commonParent","anyFocusable","innerElements","_a","autoFocusables","orderedInnerElements","srcNodes","dstNodes","remap","entity","reorderNodes","newId","autoFocusable","allParentAutofocusables","autofocus","guardCount","lockDisabled","focusable","contentWindow","deferAction","setImmediate","lastActiveTrap","lastActiveFocus","lastPortaledElement","focusWasOutsideWindow","defaultWhitelist","autoGuard","startIndex","end","step","allNodes","lastGuard","guard","focusAutoGuard","lockItem","extractRef","_lastActiveTrap","workingNode","portaledElement","workingArea","focusWhitelisted","blur","newActiveElement","getFocusabledIn","focusedIndex","removeAttribute","onTrap","stopPropagation","observerNode","onWindowBlur","moveFocusInside","propsList","traps","trap","lastTrap","sameTrap","FocusLockCombination","zeroRightClassName","fullWidthClassName","effectCar","nothing","RemoveScroll","onScrollCapture","onWheelCapture","onTouchMoveCapture","setCallbacks","forwardProps","removeScrollBar","noIsolation","inert","allowPinchZoom","_b","containerRef","lockRef","only","classNames","fullWidth","zeroRight","currentNonce","Target","isSideCarExport","makeStyleTag","tag","nonce","setAttribute","stylesheetSingleton","counter","stylesheet","styleSheet","cssText","createTextNode","getElementsByTagName","insertStyleTag","styleSingleton","useStyle","sheet","styles","styleHookSingleton","zeroGap","gap","getGapWidth","gapMode","offsets","cs","getOffset","documentWidth","documentElement","clientWidth","windowWidth","allowRelative","important","RemoveScrollBar","setGap","noRelative","noImportant","locationCouldBeScrolled","axis","elementCouldBeScrolled","getScrollVariables","overflowY","overflowX","elementCouldBeVScrolled","elementCouldBeHScrolled","scrollTop","scrollHeight","clientHeight","scrollLeft","scrollWidth","getHScrollVariables","passiveSupported","nonPassive","passive","getTouchXY","changedTouches","clientX","clientY","getDeltaXY","deltaX","deltaY","generateStyle","idCounter","lockStack","exported","shouldPreventQueue","touchStartRef","activeAxis","Style","lastProps","classList","allow_1","shouldCancelEvent","touches","currentAxis","touch","touchStart","moveDirection","canBeScrolledInMainDirection","cancelingAxis","endTarget","sourceDelta","noOverscroll","delta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","elementScroll","handleScroll","shouldPrevent","_event","sourceEvent","y","should","shardNodes","shouldCancel","scrollTouchStart","scrollWheel","scrollTouchMove","inst","ReactRemoveScroll","bool","func","_ref$isOpen","_ref2$dangerouslyBypa","dangerouslyBypassFocusLock","_ref2$dangerouslyBypa2","dangerouslyBypassScrollLock","_ref2$onDismiss","_ref2$unstable_lockFo","unstable_lockFocusAcrossFrames","mouseDownTarget","overlayNode","activateFocusLock","dialogNode","originalValues","rootNodes","_dialogNode$parentNod","_dialogNode$parentNod2","attr","originalValue","createAriaHider","_ref4$allowPinchZoom","_ref4$onDismiss"],"mappings":"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","file":"static/chunks/aaa22d061e7e3a94ca9ac845bbdab600d8a66541.c2bd5284701e51744bca.js","sourcesContent":["import React from 'react'\nimport { AmpStateContext } from './amp-context'\n\nexport function isInAmpMode({\n ampFirst = false,\n hybrid = false,\n hasQuery = false,\n} = {}): boolean {\n return ampFirst || (hybrid && hasQuery)\n}\n\nexport function useAmp(): boolean {\n // Don't assign the context value to a variable to save bytes\n return isInAmpMode(React.useContext(AmpStateContext))\n}\n","import {\n Dialog as ReachDialog,\n DialogContent as ReachDialogContent,\n DialogOverlay as ReachDialogOverlay,\n} from '@reach/dialog';\nimport { ReactComponent as CrossIcon } from 'assets/icons/icon-cross.svg';\nimport { H5 } from 'components/headings';\nimport { HideVisually } from 'components/hide-visually';\nimport { math, rem, transparentize } from 'polished';\nimport React, { FC } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\n\nconst fadeIn = keyframes`\n from {\n transform: translate3d(0, ${rem(-14)}, 0);\n opacity: 0;\n }\n to {\n transform: translate3d(0, 0, 0);\n opacity: 1;\n }\n`;\n\nexport const BaseDialogContentStyles = css`\n z-index: ${({ theme }) => theme.zIndex[4]};\n padding: ${rem(40)};\n color: ${({ theme }) => theme.colors.palette.black};\n font-size: ${rem(18)};\n line-height: 1.3;\n background-color: ${({ theme }) => theme.colors.palette.white};\n border-radius: ${({ theme }) => math(`(${theme.borderRadius.medium}) / 2 `)};\n outline: none;\n animation: ${fadeIn} 200ms ease-out both;\n\n @media (prefers-reduced-motion) {\n animation-name: none;\n }\n\n * + p {\n margin: 1em 0 0;\n }\n\n ul {\n padding: 0 0 0 1em;\n\n li + li {\n margin-top: 0.5em;\n }\n }\n`;\n\nexport const DialogOverlayStyles = css`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: ${({ theme }) => theme.zIndex[4]};\n display: flex;\n overflow: auto;\n background-color: ${({ theme }) =>\n transparentize(0.5, theme.colors.palette.black)};\n`;\n\nexport const DialogOverlay = styled(ReachDialogOverlay)`\n ${DialogOverlayStyles}\n`;\n\nexport const DialogContentStyles = css`\n position: relative;\n width: calc(100% - 2.5rem);\n max-width: ${rem(340)};\n margin: auto;\n ${BaseDialogContentStyles}\n`;\n\nexport const DialogContent = styled(ReachDialogContent)`\n ${DialogContentStyles}\n`;\n\nexport const DialogTitle = styled(H5).attrs({ as: 'h2', id: 'dialog-title' })`\n margin: 0 0 1em;\n color: ${({ theme }) => theme.colors.palette.black};\n`;\n\nconst DialogCloseButton = styled.button.attrs({ type: 'button' })`\n position: absolute;\n top: ${rem(4)};\n right: ${rem(4)};\n width: ${rem(44)};\n height: ${rem(44)};\n margin: 0;\n padding: 0;\n color: ${({ theme }) => theme.colors.palette.black};\n background-color: ${({ theme }) => theme.colors.palette.white};\n border: 0;\n border-radius: 100%;\n cursor: pointer;\n\n svg {\n vertical-align: middle;\n }\n\n &:hover,\n &:focus {\n color: ${({ theme }) => theme.colors.palette.redDark};\n }\n`;\n\ninterface DialogCloseProps extends React.HTMLAttributes {\n iconDimensions?: number;\n}\n\nexport const DialogClose: FC = ({\n children,\n iconDimensions,\n ...props\n}) => (\n \n \n {children}\n \n);\n\nconst Dialog = styled(ReachDialog)`\n ${BaseDialogContentStyles}\n`;\n\nexport default Dialog;\n","import React from 'react';\nimport { isServer } from '../core/utils';\nexport function useIsMounted() {\n var mountedRef = React.useRef(false);\n var isMounted = React.useCallback(function () {\n return mountedRef.current;\n }, []);\n React[isServer ? 'useEffect' : 'useLayoutEffect'](function () {\n mountedRef.current = true;\n return function () {\n mountedRef.current = false;\n };\n }, []);\n return isMounted;\n}","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M.707 21.92L21.921.707a1 1 0 111.414 1.414L2.122 23.335A1 1 0 11.707 21.92z\",\n fill: \"currentColor\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.121.707L23.334 21.92a1 1 0 11-1.414 1.415L.707 2.12A1 1 0 012.121.707z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconCross(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 25 25\"\n }, props), _ref, _ref2);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNSAyNSI+CiAgPHBhdGggZD0iTS43MDcgMjEuOTJMMjEuOTIxLjcwN2ExIDEgMCAxMTEuNDE0IDEuNDE0TDIuMTIyIDIzLjMzNUExIDEgMCAxMS43MDcgMjEuOTJ6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KICA8cGF0aCBkPSJNMi4xMjEuNzA3TDIzLjMzNCAyMS45MmExIDEgMCAxMS0xLjQxNCAxLjQxNUwuNzA3IDIuMTJBMSAxIDAgMDEyLjEyMS43MDd6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPC9zdmc+Cg==\";\nexport { SvgIconCross as ReactComponent };","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","import React, { useContext } from 'react'\nimport Effect from './side-effect'\nimport { AmpStateContext } from './amp-context'\nimport { HeadManagerContext } from './head-manager-context'\nimport { isInAmpMode } from './amp'\n\ntype WithInAmpMode = {\n inAmpMode?: boolean\n}\n\nexport function defaultHead(inAmpMode = false): JSX.Element[] {\n const head = []\n if (!inAmpMode) {\n head.push()\n }\n return head\n}\n\nfunction onlyReactElement(\n list: Array>,\n child: React.ReactChild\n): Array> {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list\n }\n // Adds support for React.Fragment\n if (child.type === React.Fragment) {\n return list.concat(\n React.Children.toArray(child.props.children).reduce(\n (\n fragmentList: Array>,\n fragmentChild: React.ReactChild\n ): Array> => {\n if (\n typeof fragmentChild === 'string' ||\n typeof fragmentChild === 'number'\n ) {\n return fragmentList\n }\n return fragmentList.concat(fragmentChild)\n },\n []\n )\n )\n }\n return list.concat(child)\n}\n\nconst METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']\n\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like \n Also adds support for deduplicated `key` properties\n*/\nfunction unique() {\n const keys = new Set()\n const tags = new Set()\n const metaTypes = new Set()\n const metaCategories: { [metatype: string]: Set<string> } = {}\n\n return (h: React.ReactElement<any>) => {\n let isUnique = true\n let hasKey = false\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true\n const key = h.key.slice(h.key.indexOf('$') + 1)\n if (keys.has(key)) {\n isUnique = false\n } else {\n keys.add(key)\n }\n }\n\n // eslint-disable-next-line default-case\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false\n } else {\n tags.add(h.type)\n }\n break\n case 'meta':\n for (let i = 0, len = METATYPES.length; i < len; i++) {\n const metatype = METATYPES[i]\n if (!h.props.hasOwnProperty(metatype)) continue\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false\n } else {\n metaTypes.add(metatype)\n }\n } else {\n const category = h.props[metatype]\n const categories = metaCategories[metatype] || new Set()\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false\n } else {\n categories.add(category)\n metaCategories[metatype] = categories\n }\n }\n }\n break\n }\n\n return isUnique\n }\n}\n\n/**\n *\n * @param headElements List of multiple <Head> instances\n */\nfunction reduceComponents(\n headElements: Array<React.ReactElement<any>>,\n props: WithInAmpMode\n) {\n return headElements\n .reduce(\n (list: React.ReactChild[], headElement: React.ReactElement<any>) => {\n const headElementChildren = React.Children.toArray(\n headElement.props.children\n )\n return list.concat(headElementChildren)\n },\n []\n )\n .reduce(onlyReactElement, [])\n .reverse()\n .concat(defaultHead(props.inAmpMode))\n .filter(unique())\n .reverse()\n .map((c: React.ReactElement<any>, i: number) => {\n const key = c.key || i\n if (\n process.env.NODE_ENV !== 'development' &&\n process.env.__NEXT_OPTIMIZE_FONTS &&\n !props.inAmpMode\n ) {\n if (\n c.type === 'link' &&\n c.props['href'] &&\n // TODO(prateekbh@): Replace this with const from `constants` when the tree shaking works.\n ['https://fonts.googleapis.com/css'].some((url) =>\n c.props['href'].startsWith(url)\n )\n ) {\n const newProps = { ...(c.props || {}) }\n newProps['data-href'] = newProps['href']\n newProps['href'] = undefined\n return React.cloneElement(c, newProps)\n }\n }\n return React.cloneElement(c, { key })\n })\n}\n\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */\nfunction Head({ children }: { children: React.ReactNode }) {\n const ampState = useContext(AmpStateContext)\n const headManager = useContext(HeadManagerContext)\n return (\n <Effect\n reduceComponentsToState={reduceComponents}\n headManager={headManager}\n inAmpMode={isInAmpMode(ampState)}\n >\n {children}\n </Effect>\n )\n}\n\n// TODO: Remove in the next major release\nHead.rewind = () => {}\n\nexport default Head\n","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#icon-alert_svg__icon-alert_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.718 26.629L17.68 3.346a1.96 1.96 0 00-3.358 0L.28 26.629a1.96 1.96 0 001.68 2.973h28.078a1.96 1.96 0 001.68-2.973zM16.01 10.452c.807 0 1.489.454 1.489 1.26 0 2.46-.29 5.996-.29 8.457 0 .64-.702.91-1.199.91-.661 0-1.22-.27-1.22-.91 0-2.46-.289-5.996-.289-8.456 0-.806.662-1.261 1.51-1.261zm.021 15.237c-.91 0-1.592-.745-1.592-1.592a1.58 1.58 0 011.592-1.592c.848 0 1.571.723 1.571 1.592 0 .847-.723 1.591-1.57 1.591z\",\n fill: \"currentColor\"\n}));\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"icon-alert_svg__icon-alert_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h32v32H0z\"\n})));\n\nfunction SvgIconAlert(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n }, props), _ref, _ref2);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+CiAgPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CiAgICA8cGF0aCBkPSJNMzEuNzE4IDI2LjYyOUwxNy42OCAzLjM0NmExLjk2IDEuOTYgMCAwMC0zLjM1OCAwTC4yOCAyNi42MjlhMS45NiAxLjk2IDAgMDAxLjY4IDIuOTczaDI4LjA3OGExLjk2IDEuOTYgMCAwMDEuNjgtMi45NzN6TTE2LjAxIDEwLjQ1MmMuODA3IDAgMS40ODkuNDU0IDEuNDg5IDEuMjYgMCAyLjQ2LS4yOSA1Ljk5Ni0uMjkgOC40NTcgMCAuNjQtLjcwMi45MS0xLjE5OS45MS0uNjYxIDAtMS4yMi0uMjctMS4yMi0uOTEgMC0yLjQ2LS4yODktNS45OTYtLjI4OS04LjQ1NiAwLS44MDYuNjYyLTEuMjYxIDEuNTEtMS4yNjF6bS4wMjEgMTUuMjM3Yy0uOTEgMC0xLjU5Mi0uNzQ1LTEuNTkyLTEuNTkyYTEuNTggMS41OCAwIDAxMS41OTItMS41OTJjLjg0OCAwIDEuNTcxLjcyMyAxLjU3MSAxLjU5MiAwIC44NDctLjcyMyAxLjU5MS0xLjU3IDEuNTkxeiIgZmlsbD0iY3VycmVudENvbG9yIi8+CiAgPC9nPgogIDxkZWZzPgogICAgPGNsaXBQYXRoIGlkPSJjbGlwMCI+CiAgICAgIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMzJ2MzJIMHoiLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgo8L3N2Zz4K\";\nexport { SvgIconAlert as ReactComponent };","var candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n];\nvar candidateSelector = candidateSelectors.join(',');\n\nvar matches = typeof Element === 'undefined'\n ? function () {}\n : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nfunction tabbable(el, options) {\n options = options || {};\n\n var regularTabbables = [];\n var orderedTabbables = [];\n\n var candidates = el.querySelectorAll(candidateSelector);\n\n if (options.includeContainer) {\n if (matches.call(el, candidateSelector)) {\n candidates = Array.prototype.slice.apply(candidates);\n candidates.unshift(el);\n }\n }\n\n var i, candidate, candidateTabindex;\n for (i = 0; i < candidates.length; i++) {\n candidate = candidates[i];\n\n if (!isNodeMatchingSelectorTabbable(candidate)) continue;\n\n candidateTabindex = getTabindex(candidate);\n if (candidateTabindex === 0) {\n regularTabbables.push(candidate);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n node: candidate,\n });\n }\n }\n\n var tabbableNodes = orderedTabbables\n .sort(sortOrderedTabbables)\n .map(function(a) { return a.node })\n .concat(regularTabbables);\n\n return tabbableNodes;\n}\n\ntabbable.isTabbable = isTabbable;\ntabbable.isFocusable = isFocusable;\n\nfunction isNodeMatchingSelectorTabbable(node) {\n if (\n !isNodeMatchingSelectorFocusable(node)\n || isNonTabbableRadio(node)\n || getTabindex(node) < 0\n ) {\n return false;\n }\n return true;\n}\n\nfunction isTabbable(node) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, candidateSelector) === false) return false;\n return isNodeMatchingSelectorTabbable(node);\n}\n\nfunction isNodeMatchingSelectorFocusable(node) {\n if (\n node.disabled\n || isHiddenInput(node)\n || isHidden(node)\n ) {\n return false;\n }\n return true;\n}\n\nvar focusableCandidateSelector = candidateSelectors.concat('iframe').join(',');\nfunction isFocusable(node) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, focusableCandidateSelector) === false) return false;\n return isNodeMatchingSelectorFocusable(node);\n}\n\nfunction getTabindex(node) {\n var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n if (!isNaN(tabindexAttr)) return tabindexAttr;\n // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n if (isContentEditable(node)) return 0;\n return node.tabIndex;\n}\n\nfunction sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n}\n\nfunction isContentEditable(node) {\n return node.contentEditable === 'true';\n}\n\nfunction isInput(node) {\n return node.tagName === 'INPUT';\n}\n\nfunction isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n}\n\nfunction isRadio(node) {\n return isInput(node) && node.type === 'radio';\n}\n\nfunction isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n}\n\nfunction getCheckedRadio(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked) {\n return nodes[i];\n }\n }\n}\n\nfunction isTabbableRadio(node) {\n if (!node.name) return true;\n // This won't account for the edge case where you have radio groups with the same\n // in separate forms on the same page.\n var radioSet = node.ownerDocument.querySelectorAll('input[type=\"radio\"][name=\"' + node.name + '\"]');\n var checked = getCheckedRadio(radioSet);\n return !checked || checked === node;\n}\n\nfunction isHidden(node) {\n // offsetParent being null will allow detecting cases where an element is invisible or inside an invisible element,\n // as long as the element does not use position: fixed. For them, their visibility has to be checked directly as well.\n return node.offsetParent === null || getComputedStyle(node).visibility === 'hidden';\n}\n\nmodule.exports = tabbable;\n","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.83 16.308l-.66-.661c1.772-1.772 2.309-3.883 1.601-6.28-.54-1.827-1.616-3.125-1.628-3.137l.719-.602c.047.054 4.804 5.849-.031 10.68z\",\n fill: \"currentColor\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.587 19.028l-.66-.661c2.802-2.802 3.653-6.144 2.534-9.933-.848-2.865-2.542-4.909-2.561-4.928l.719-.603c.07.09 7.255 8.842-.032 16.125z\",\n fill: \"currentColor\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.597 21.853l-.66-.66c9.237-9.238.065-20.404-.028-20.516l.715-.599c.101.117 9.809 11.943-.027 21.775zM7.858 16.661c-.046-.058-4.803-5.849.028-10.68l.66.661c-1.764 1.764-2.304 3.867-1.609 6.253.533 1.83 1.625 3.152 1.637 3.168l-.716.598z\",\n fill: \"currentColor\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.106 19.385c-.074-.086-7.26-8.837.027-16.124l.66.66c-2.802 2.802-3.653 6.14-2.533 9.934.847 2.864 2.541 4.908 2.56 4.928l-.714.602z\",\n fill: \"currentColor\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.372 22.21c-.097-.12-9.809-11.942.031-21.778l.66.66C1.202 4.955.02 9.564 1.556 14.792c1.158 3.948 3.513 6.789 3.536 6.816l-.719.602zm14.686-7.76h-1.29l-.377-7.385h2.044l-.377 7.384zm0 2.253h-1.29v-1.406h1.29v1.406zM19.218 0L17.17 5.215 9.183 8.923 14.535 21.2l9.54-3.133.02-16.066L19.218 0z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconEmergency(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 35 23\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMjMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTI2LjgzIDE2LjMwOGwtLjY2LS42NjFjMS43NzItMS43NzIgMi4zMDktMy44ODMgMS42MDEtNi4yOC0uNTQtMS44MjctMS42MTYtMy4xMjUtMS42MjgtMy4xMzdsLjcxOS0uNjAyYy4wNDcuMDU0IDQuODA0IDUuODQ5LS4wMzEgMTAuNjh6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KICA8cGF0aCBkPSJNMjguNTg3IDE5LjAyOGwtLjY2LS42NjFjMi44MDItMi44MDIgMy42NTMtNi4xNDQgMi41MzQtOS45MzMtLjg0OC0yLjg2NS0yLjU0Mi00LjkwOS0yLjU2MS00LjkyOGwuNzE5LS42MDNjLjA3LjA5IDcuMjU1IDguODQyLS4wMzIgMTYuMTI1eiIgZmlsbD0iY3VycmVudENvbG9yIi8+CiAgPHBhdGggZD0iTTMwLjU5NyAyMS44NTNsLS42Ni0uNjZjOS4yMzctOS4yMzguMDY1LTIwLjQwNC0uMDI4LTIwLjUxNmwuNzE1LS41OTljLjEwMS4xMTcgOS44MDkgMTEuOTQzLS4wMjcgMjEuNzc1ek03Ljg1OCAxNi42NjFjLS4wNDYtLjA1OC00LjgwMy01Ljg0OS4wMjgtMTAuNjhsLjY2LjY2MWMtMS43NjQgMS43NjQtMi4zMDQgMy44NjctMS42MDkgNi4yNTMuNTMzIDEuODMgMS42MjUgMy4xNTIgMS42MzcgMy4xNjhsLS43MTYuNTk4eiIgZmlsbD0iY3VycmVudENvbG9yIi8+CiAgPHBhdGggZD0iTTYuMTA2IDE5LjM4NWMtLjA3NC0uMDg2LTcuMjYtOC44MzcuMDI3LTE2LjEyNGwuNjYuNjZjLTIuODAyIDIuODAyLTMuNjUzIDYuMTQtMi41MzMgOS45MzQuODQ3IDIuODY0IDIuNTQxIDQuOTA4IDIuNTYgNC45MjhsLS43MTQuNjAyeiIgZmlsbD0iY3VycmVudENvbG9yIi8+CiAgPHBhdGggZD0iTTQuMzcyIDIyLjIxYy0uMDk3LS4xMi05LjgwOS0xMS45NDIuMDMxLTIxLjc3OGwuNjYuNjZDMS4yMDIgNC45NTUuMDIgOS41NjQgMS41NTYgMTQuNzkyYzEuMTU4IDMuOTQ4IDMuNTEzIDYuNzg5IDMuNTM2IDYuODE2bC0uNzE5LjYwMnptMTQuNjg2LTcuNzZoLTEuMjlsLS4zNzctNy4zODVoMi4wNDRsLS4zNzcgNy4zODR6bTAgMi4yNTNoLTEuMjl2LTEuNDA2aDEuMjl2MS40MDZ6TTE5LjIxOCAwTDE3LjE3IDUuMjE1IDkuMTgzIDguOTIzIDE0LjUzNSAyMS4ybDkuNTQtMy4xMzMuMDItMTYuMDY2TDE5LjIxOCAweiIgZmlsbD0iY3VycmVudENvbG9yIi8+Cjwvc3ZnPgo=\";\nexport { SvgIconEmergency as ReactComponent };","import { rem, size } from 'polished';\nimport styled, { css } from 'styled-components';\n\nexport const Wrapper = styled.div`\n display: flex;\n justify-content: center;\n margin: ${rem(16)} 0;\n\n ${({ theme }) => theme.mediaQueries.medium} {\n margin-right: ${rem(8)};\n margin-left: ${rem(8)};\n }\n`;\n\nexport const List = styled.ul`\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n list-style: none;\n\n ${({ theme }) => theme.mediaQueries.medium} {\n flex-direction: row;\n width: auto;\n }\n`;\n\nexport const Item = styled.li`\n align-self: stretch;\n`;\n\ninterface LinkProps {\n iconSize?: number;\n}\n\nexport const Link = styled.a<LinkProps>`\n display: flex;\n align-items: center;\n height: 100%;\n padding: ${rem(18)} ${rem(28)};\n color: ${({ theme }) => theme.colors.palette.white};\n font-size: ${rem(16)};\n line-height: 1.3;\n text-align: left;\n text-decoration: none;\n transition: background-color 150ms ease-in-out;\n\n ${({ theme }) => theme.mediaQueries.medium} {\n padding: ${rem(10)} ${rem(30)} ${rem(7)};\n font-size: ${rem(14)};\n }\n\n strong {\n white-space: nowrap;\n\n ${({ theme }) => theme.mediaQueries.medium} {\n display: block;\n }\n }\n\n abbr {\n text-decoration: none;\n }\n\n svg {\n ${({ iconSize }) => {\n const baseSize = 18;\n const svgSize = iconSize ?? baseSize;\n\n return css`\n ${size(svgSize)};\n\n flex-shrink: 0;\n margin-right: ${rem(20 - (iconSize ? svgSize - baseSize : 0))};\n\n path {\n fill: #fff;\n }\n `;\n }}\n }\n`;\n","import { ReactComponent as IconEmergency } from 'assets/icons/icon-emergency.svg';\nimport { ReactComponent as IconPhone } from 'assets/icons/icon-phone.svg';\nimport React, { FC } from 'react';\nimport { Item, Link, List, Wrapper } from './emergency-nav.styled';\n\nconst EmergencyNav: FC = () => {\n const iconProps = { height: 16, width: 16 };\n\n return (\n <Wrapper>\n <List>\n <Item>\n <Link\n href='https://www.emergency.wa.gov.au/'\n target='_blank'\n rel='noopener noreferrer'\n title='Emergency WA (opens in new window)'\n iconSize={26}\n >\n <IconEmergency aria-hidden role='presentation' {...iconProps} />\n <div>\n <strong>Alerts & Warnings</strong> EmergencyWA\n </div>\n </Link>\n </Item>\n <Item>\n <Link href='tel:000'>\n <IconPhone aria-label='Call' {...iconProps} />\n <div>\n <strong>To report a fire</strong> Contact Triple Zero (000)\n immediately\n </div>\n </Link>\n </Item>\n <Item>\n <Link href='tel:133337'>\n <IconPhone aria-label='Call' {...iconProps} />\n <div>\n <strong>DFES Emergency Information Line</strong> 13 DFES (13 3337)\n </div>\n </Link>\n </Item>\n </List>\n </Wrapper>\n );\n};\n\nexport default EmergencyNav;\n","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.255 16.096C32.255 7.218 25.038 0 16.138 0 7.218 0 0 7.218 0 16.096 0 24.144 5.898 30.786 13.626 32V20.737h-4.13v-4.641h4.13V12.54c0-4.024 2.385-6.26 6.068-6.26 1.767 0 3.598.341 3.598.341v3.918H21.27c-2 0-2.64 1.256-2.64 2.512v3.024h4.493l-.724 4.64H18.63v11.242c7.729-1.17 13.626-7.835 13.626-15.861z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconFacebook(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 33 32\"\n }, props), _ref);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMyAzMiI+CiAgPHBhdGggZD0iTTMyLjI1NSAxNi4wOTZDMzIuMjU1IDcuMjE4IDI1LjAzOCAwIDE2LjEzOCAwIDcuMjE4IDAgMCA3LjIxOCAwIDE2LjA5NiAwIDI0LjE0NCA1Ljg5OCAzMC43ODYgMTMuNjI2IDMyVjIwLjczN2gtNC4xM3YtNC42NDFoNC4xM1YxMi41NGMwLTQuMDI0IDIuMzg1LTYuMjYgNi4wNjgtNi4yNiAxLjc2NyAwIDMuNTk4LjM0MSAzLjU5OC4zNDF2My45MThIMjEuMjdjLTIgMC0yLjY0IDEuMjU2LTIuNjQgMi41MTJ2My4wMjRoNC40OTNsLS43MjQgNC42NGgtMy43Njl2MTEuMjQyYzcuNzI5LTEuMTcgMTMuNjI2LTcuODM1IDEzLjYyNi0xNS44NjF6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPC9zdmc+Cg==\";\nexport { SvgIconFacebook as ReactComponent };","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.09 22.454c-.067 1.569-.34 2.41-.544 2.978a5.356 5.356 0 01-3.046 3.045c-.568.227-1.41.477-2.977.546-1.682.068-2.205.09-6.477.09-4.273 0-4.796-.022-6.478-.09-1.568-.069-2.409-.341-2.977-.546a4.93 4.93 0 01-1.841-1.181 5.284 5.284 0 01-1.205-1.841c-.227-.569-.477-1.41-.545-2.978-.068-1.681-.09-2.181-.09-6.454s.022-4.773.09-6.455c.068-1.568.34-2.409.545-2.977.25-.705.66-1.318 1.205-1.841a4.929 4.929 0 011.84-1.182c.57-.227 1.41-.477 2.978-.545 1.682-.068 2.205-.091 6.478-.091 4.272 0 4.795.023 6.477.09 1.568.046 2.431.296 2.977.523a4.93 4.93 0 011.84 1.182 5.285 5.285 0 011.206 1.841c.227.568.477 1.41.545 2.977.068 1.682.09 2.205.09 6.455 0 4.273 0 4.773-.09 6.454zM31.978 9.41c-.068-1.704-.34-2.864-.75-3.886-.409-1.068-1.023-2.046-1.863-2.841A7.87 7.87 0 0026.524.842C25.5.455 24.34.18 22.636.09 20.91.023 20.386 0 16.023 0c-4.364 0-4.887.023-6.614.09-1.704.07-2.864.342-3.886.75-1.068.41-2.046 1.024-2.841 1.842A7.575 7.575 0 00.84 5.522C.455 6.546.18 7.706.09 9.41 0 11.114 0 11.66 0 16s.023 4.886.09 6.59c.07 1.706.342 2.864.75 3.887a7.919 7.919 0 001.865 2.841 7.576 7.576 0 002.84 1.841c1.023.387 2.182.66 3.887.75 1.704.068 2.25.091 6.614.091 4.363 0 4.886-.023 6.613-.09 1.705-.07 2.864-.342 3.887-.75a8.062 8.062 0 004.681-4.683c.387-1.023.66-2.181.75-3.886.068-1.705.091-2.25.091-6.591 0-4.34 0-4.886-.09-6.59z\",\n fill: \"currentColor\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.045 21.318a5.335 5.335 0 01-5.34-5.34c0-2.932 2.386-5.319 5.34-5.319 2.955 0 5.341 2.387 5.341 5.318a5.335 5.335 0 01-5.34 5.341zm0-13.545c-4.545 0-8.227 3.682-8.227 8.204 0 4.546 3.682 8.205 8.227 8.205 4.546 0 8.227-3.682 8.227-8.204 0-4.523-3.681-8.205-8.227-8.205zm10.478-.318a1.91 1.91 0 01-1.931 1.909 1.926 1.926 0 01-1.932-1.91 1.91 1.91 0 011.931-1.908c1.091-.023 1.932.84 1.932 1.909z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconInstagram(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 33 32\"\n }, props), _ref, _ref2);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMyAzMiI+CiAgPHBhdGggZD0iTTI5LjA5IDIyLjQ1NGMtLjA2NyAxLjU2OS0uMzQgMi40MS0uNTQ0IDIuOTc4YTUuMzU2IDUuMzU2IDAgMDEtMy4wNDYgMy4wNDVjLS41NjguMjI3LTEuNDEuNDc3LTIuOTc3LjU0Ni0xLjY4Mi4wNjgtMi4yMDUuMDktNi40NzcuMDktNC4yNzMgMC00Ljc5Ni0uMDIyLTYuNDc4LS4wOS0xLjU2OC0uMDY5LTIuNDA5LS4zNDEtMi45NzctLjU0NmE0LjkzIDQuOTMgMCAwMS0xLjg0MS0xLjE4MSA1LjI4NCA1LjI4NCAwIDAxLTEuMjA1LTEuODQxYy0uMjI3LS41NjktLjQ3Ny0xLjQxLS41NDUtMi45NzgtLjA2OC0xLjY4MS0uMDktMi4xODEtLjA5LTYuNDU0cy4wMjItNC43NzMuMDktNi40NTVjLjA2OC0xLjU2OC4zNC0yLjQwOS41NDUtMi45NzcuMjUtLjcwNS42Ni0xLjMxOCAxLjIwNS0xLjg0MWE0LjkyOSA0LjkyOSAwIDAxMS44NC0xLjE4MmMuNTctLjIyNyAxLjQxLS40NzcgMi45NzgtLjU0NSAxLjY4Mi0uMDY4IDIuMjA1LS4wOTEgNi40NzgtLjA5MSA0LjI3MiAwIDQuNzk1LjAyMyA2LjQ3Ny4wOSAxLjU2OC4wNDYgMi40MzEuMjk2IDIuOTc3LjUyM2E0LjkzIDQuOTMgMCAwMTEuODQgMS4xODIgNS4yODUgNS4yODUgMCAwMTEuMjA2IDEuODQxYy4yMjcuNTY4LjQ3NyAxLjQxLjU0NSAyLjk3Ny4wNjggMS42ODIuMDkgMi4yMDUuMDkgNi40NTUgMCA0LjI3MyAwIDQuNzczLS4wOSA2LjQ1NHpNMzEuOTc4IDkuNDFjLS4wNjgtMS43MDQtLjM0LTIuODY0LS43NS0zLjg4Ni0uNDA5LTEuMDY4LTEuMDIzLTIuMDQ2LTEuODYzLTIuODQxLS43OTYtLjgxOC0xLjc3My0xLjQzMi0yLjg0MS0xLjg0MUMyNS41LjQ1NSAyNC4zNC4xOCAyMi42MzYuMDkgMjAuOTEuMDIzIDIwLjM4NiAwIDE2LjAyMyAwYy00LjM2NCAwLTQuODg3LjAyMy02LjYxNC4wOS0xLjcwNC4wNy0yLjg2NC4zNDItMy44ODYuNzUtMS4wNjguNDEtMi4wNDYgMS4wMjQtMi44NDEgMS44NDJBNy41NzUgNy41NzUgMCAwMC44NCA1LjUyMkMuNDU1IDYuNTQ2LjE4IDcuNzA2LjA5IDkuNDEgMCAxMS4xMTQgMCAxMS42NiAwIDE2YzAgNC4zNC4wMjMgNC44ODYuMDkgNi41OS4wNyAxLjcwNi4zNDIgMi44NjQuNzUgMy44ODdhNy45MTkgNy45MTkgMCAwMDEuODY1IDIuODQxIDcuNTc2IDcuNTc2IDAgMDAyLjg0IDEuODQxYzEuMDIzLjM4NyAyLjE4Mi42NiAzLjg4Ny43NSAxLjcwNC4wNjggMi4yNS4wOTEgNi42MTQuMDkxIDQuMzYzIDAgNC44ODYtLjAyMyA2LjYxMy0uMDkgMS43MDUtLjA3IDIuODY0LS4zNDIgMy44ODctLjc1YTguMDYyIDguMDYyIDAgMDA0LjY4MS00LjY4M2MuMzg3LTEuMDIzLjY2LTIuMTgxLjc1LTMuODg2LjA2OC0xLjcwNS4wOTEtMi4yNS4wOTEtNi41OTEgMC00LjM0IDAtNC44ODYtLjA5LTYuNTl6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KICA8cGF0aCBkPSJNMTYuMDQ1IDIxLjMxOGE1LjMzNSA1LjMzNSAwIDAxLTUuMzQtNS4zNGMwLTIuOTMyIDIuMzg2LTUuMzE5IDUuMzQtNS4zMTkgMi45NTUgMCA1LjM0MSAyLjM4NyA1LjM0MSA1LjMxOGE1LjMzNSA1LjMzNSAwIDAxLTUuMzQgNS4zNDF6bTAtMTMuNTQ1Yy00LjU0NSAwLTguMjI3IDMuNjgyLTguMjI3IDguMjA0IDAgNC41NDYgMy42ODIgOC4yMDUgOC4yMjcgOC4yMDUgNC41NDYgMCA4LjIyNy0zLjY4MiA4LjIyNy04LjIwNCAwLTQuNTIzLTMuNjgxLTguMjA1LTguMjI3LTguMjA1ek0yNi41MjMgNy40NTVhMS45MSAxLjkxIDAgMDEtMS45MzEgMS45MDljLTEuMDY5IDAtMS45MzItLjg2NC0xLjkzMi0xLjkxYTEuOTEgMS45MSAwIDAxMS45MzEtMS45MDhjMS4wOTEtLjAyMyAxLjkzMi44NCAxLjkzMiAxLjkwOXoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8L3N2Zz4K\";\nexport { SvgIconInstagram as ReactComponent };","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.692 0H2.308A2.308 2.308 0 000 2.308v27.384A2.308 2.308 0 002.308 32h27.384A2.308 2.308 0 0032 29.692V2.308A2.308 2.308 0 0029.692 0zM11.351 24.188H7.454V12.463h3.897v11.723zM9.402 10.863h-.025c-1.308 0-2.153-.9-2.153-2.025 0-1.15.871-2.025 2.204-2.025 1.333 0 2.153.875 2.179 2.025 0 1.125-.846 2.025-2.205 2.025zm16 13.325h-3.897v-6.272c0-1.576-.564-2.651-1.974-2.651-1.076 0-1.717.725-2 1.425-.102.25-.127.6-.127.95v6.547h-3.897s.051-10.623 0-11.723h3.897v1.66c.517-.799 1.444-1.935 3.511-1.935 2.564 0 4.486 1.675 4.486 5.276v6.723z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconLinkedin(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n }, props), _ref);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+CiAgPHBhdGggZD0iTTI5LjY5MiAwSDIuMzA4QTIuMzA4IDIuMzA4IDAgMDAwIDIuMzA4djI3LjM4NEEyLjMwOCAyLjMwOCAwIDAwMi4zMDggMzJoMjcuMzg0QTIuMzA4IDIuMzA4IDAgMDAzMiAyOS42OTJWMi4zMDhBMi4zMDggMi4zMDggMCAwMDI5LjY5MiAwek0xMS4zNTEgMjQuMTg4SDcuNDU0VjEyLjQ2M2gzLjg5N3YxMS43MjN6TTkuNDAyIDEwLjg2M2gtLjAyNWMtMS4zMDggMC0yLjE1My0uOS0yLjE1My0yLjAyNSAwLTEuMTUuODcxLTIuMDI1IDIuMjA0LTIuMDI1IDEuMzMzIDAgMi4xNTMuODc1IDIuMTc5IDIuMDI1IDAgMS4xMjUtLjg0NiAyLjAyNS0yLjIwNSAyLjAyNXptMTYgMTMuMzI1aC0zLjg5N3YtNi4yNzJjMC0xLjU3Ni0uNTY0LTIuNjUxLTEuOTc0LTIuNjUxLTEuMDc2IDAtMS43MTcuNzI1LTIgMS40MjUtLjEwMi4yNS0uMTI3LjYtLjEyNy45NXY2LjU0N2gtMy44OTdzLjA1MS0xMC42MjMgMC0xMS43MjNoMy44OTd2MS42NmMuNTE3LS43OTkgMS40NDQtMS45MzUgMy41MTEtMS45MzUgMi41NjQgMCA0LjQ4NiAxLjY3NSA0LjQ4NiA1LjI3NnY2LjcyM3oiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8L3N2Zz4K\";\nexport { SvgIconLinkedin as ReactComponent };","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M336.33 142.251l386.39 516.64-388.83 420.05h87.51l340.42-367.76 275.05 367.76h297.8l-408.13-545.7 361.92-390.99h-87.51l-313.51 338.7-253.31-338.7h-297.8zm128.69 64.46h136.81l604.13 807.76h-136.81l-604.13-807.76z\"\n});\n\nfunction SvgIconTwitter(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n viewBox: \"0 0 1668.56 1221.19\"\n }, props), _ref);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDE2NjguNTYgMTIyMS4xOSI+CiAgPHBhdGggZD0ibTMzNi4zMyAxNDIuMjUxIDM4Ni4zOSA1MTYuNjQtMzg4LjgzIDQyMC4wNWg4Ny41MWwzNDAuNDItMzY3Ljc2IDI3NS4wNSAzNjcuNzZoMjk3LjhsLTQwOC4xMy01NDUuNyAzNjEuOTItMzkwLjk5aC04Ny41MWwtMzEzLjUxIDMzOC43LTI1My4zMS0zMzguN2gtMjk3Ljh6bTEyOC42OSA2NC40NmgxMzYuODFsNjA0LjEzIDgwNy43NmgtMTM2LjgxbC02MDQuMTMtODA3Ljc2eiIvPgo8L3N2Zz4K\";\nexport { SvgIconTwitter as ReactComponent };","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.366 3.502A3.758 3.758 0 0027.722.857C25.375.215 15.984.215 15.984.215s-9.39 0-11.738.618a3.835 3.835 0 00-2.644 2.669C.984 5.849.984 10.717.984 10.717s0 4.893.618 7.216a3.759 3.759 0 002.644 2.644c2.373.643 11.738.643 11.738.643s9.39 0 11.738-.618a3.759 3.759 0 002.645-2.644c.617-2.348.617-7.216.617-7.216s.025-4.893-.618-7.24zM12.994 15.215V6.22l7.809 4.497-7.809 4.498z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconYoutube(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 31 22\"\n }, props), _ref);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMSAyMiI+CiAgPHBhdGggZD0iTTMwLjM2NiAzLjUwMkEzLjc1OCAzLjc1OCAwIDAwMjcuNzIyLjg1N0MyNS4zNzUuMjE1IDE1Ljk4NC4yMTUgMTUuOTg0LjIxNXMtOS4zOSAwLTExLjczOC42MThhMy44MzUgMy44MzUgMCAwMC0yLjY0NCAyLjY2OUMuOTg0IDUuODQ5Ljk4NCAxMC43MTcuOTg0IDEwLjcxN3MwIDQuODkzLjYxOCA3LjIxNmEzLjc1OSAzLjc1OSAwIDAwMi42NDQgMi42NDRjMi4zNzMuNjQzIDExLjczOC42NDMgMTEuNzM4LjY0M3M5LjM5IDAgMTEuNzM4LS42MThhMy43NTkgMy43NTkgMCAwMDIuNjQ1LTIuNjQ0Yy42MTctMi4zNDguNjE3LTcuMjE2LjYxNy03LjIxNnMuMDI1LTQuODkzLS42MTgtNy4yNHpNMTIuOTk0IDE1LjIxNVY2LjIybDcuODA5IDQuNDk3LTcuODA5IDQuNDk4eiIgZmlsbD0iY3VycmVudENvbG9yIi8+Cjwvc3ZnPgo=\";\nexport { SvgIconYoutube as ReactComponent };","import { hideVisually, rem } from 'polished';\nimport styled from 'styled-components';\nimport { Reveal } from '../hide-visually';\n\nexport const Wrapper = styled.div`\n display: none;\n align-content: center;\n align-items: center;\n justify-content: center;\n margin: ${rem(16)};\n\n ${({ theme }) => theme.mediaQueries.large} {\n display: flex;\n }\n`;\n\nexport const List = styled.ul`\n margin: 0;\n padding: 0;\n list-style: none;\n`;\n\nexport const Item = styled.li`\n display: inline-block;\n\n & + * {\n margin-left: ${rem(22)};\n }\n`;\n\nexport const Intro = styled.p`\n ${hideVisually()}\n\n ${({ theme }) => theme.mediaQueries.small} {\n ${Reveal()}\n\n margin-right: ${rem(22)};\n }\n`;\n\nexport const Link = styled.a`\n position: relative;\n display: inline-block;\n padding: 6px;\n color: ${({ theme }) => theme.colors.palette.white};\n text-decoration: none;\n transition: color 150ms ease-in-out;\n\n &::before {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: ${({ theme }) => theme.zIndex[0]};\n display: block;\n width: 0;\n height: 0;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n transition: box-shadow 150ms ease-in-out;\n content: '';\n }\n\n &:hover {\n color: ${({ theme }) => theme.colors.palette.redDark};\n }\n\n svg {\n position: relative;\n z-index: ${({ theme }) => theme.zIndex[1]};\n vertical-align: top;\n }\n`;\n","import { ReactComponent as IconFacebook } from 'assets/icons/icon-facebook.svg';\nimport { ReactComponent as IconInstagram } from 'assets/icons/icon-instagram.svg';\nimport { ReactComponent as IconLinkedIn } from 'assets/icons/icon-linkedin.svg';\nimport { ReactComponent as IconTwitter } from 'assets/icons/icon-twitter.svg';\nimport { ReactComponent as IconYouTube } from 'assets/icons/icon-youtube.svg';\nimport { HideVisually } from 'components/hide-visually';\nimport React, { FC } from 'react';\nimport { settings } from 'utils/config';\nimport { Intro, Item, Link, List, Wrapper } from './social-nav.styled';\n\nconst SocialNav: FC = () => {\n const iconProps = {\n width: 20,\n height: 20,\n 'aria-hidden': true,\n role: 'presentation',\n };\n\n return (\n <Wrapper>\n <Intro>\n <strong>Follow us</strong>\n </Intro>\n <List>\n <Item>\n <Link\n href={settings.url.facebook}\n target='_blank'\n rel='noopener noreferrer'\n >\n <IconFacebook {...iconProps} />\n <HideVisually>Facebook (opens in new window)</HideVisually>\n </Link>\n </Item>\n <Item>\n <Link\n href={settings.url.twitter}\n target='_blank'\n rel='noopener noreferrer'\n >\n <IconTwitter {...iconProps} />\n <HideVisually>Twitter (opens in new window)</HideVisually>\n </Link>\n </Item>\n <Item>\n <Link\n href={settings.url.instagram}\n target='_blank'\n rel='noopener noreferrer'\n >\n <IconInstagram {...iconProps} />\n <HideVisually>Instagram (opens in new window)</HideVisually>\n </Link>\n </Item>\n <Item>\n <Link\n href={settings.url.linkedin}\n target='_blank'\n rel='noopener noreferrer'\n >\n <IconLinkedIn {...iconProps} />\n <HideVisually>LinkedIn (opens in new window)</HideVisually>\n </Link>\n </Item>\n <Item>\n <Link\n href={settings.url.youtube}\n target='_blank'\n rel='noopener noreferrer'\n >\n <IconYouTube {...iconProps} />\n <HideVisually>YouTube (opens in new window)</HideVisually>\n </Link>\n </Item>\n </List>\n </Wrapper>\n );\n};\n\nexport default SocialNav;\n","import { rem } from 'polished';\nimport styled from 'styled-components';\n\nexport const Copyright = styled.p`\n margin: 0;\n margin-top: ${rem(20)};\n font-size: ${rem(12)};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n margin: 0;\n margin-left: ${rem(60)};\n }\n`;\n\nexport const FooterGroup = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n color: ${({ theme }) => theme.colors.palette.white};\n background: ${({ theme }) => theme.colors.palette.black};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n justify-content: center;\n }\n`;\n\nexport const FooterLinks = styled.div`\n padding: ${rem(30)};\n color: ${({ theme }) => theme.colors.palette.white};\n background-color: ${({ theme }) => theme.colors.palette.greyDark};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n li {\n margin: 0;\n font-size: ${rem(12)};\n list-style: none;\n }\n\n ul {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n\n & > * + * {\n margin-top: ${rem(10)};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n margin-top: 0;\n }\n }\n\n ${({ theme }) => theme.mediaQueries.medium} {\n display: inline-grid;\n grid-auto-flow: column;\n grid-gap: ${rem(30)};\n }\n }\n\n a {\n color: inherit;\n text-decoration: none;\n transition: color 150ms ease-in-out;\n\n &:hover {\n color: ${({ theme }) => theme.colors.palette.redDark};\n text-decoration: underline;\n }\n }\n`;\n","import EmergencyNav from 'components/emergency-nav';\nimport { HideVisually } from 'components/hide-visually';\nimport SocialNav from 'components/social-nav';\nimport Link from 'next/link';\nimport React, { FC } from 'react';\nimport slugify from 'slugify';\nimport { SiteSettings } from 'types/sanity';\nimport { Copyright, FooterGroup, FooterLinks } from './footer.styled';\n\ninterface Props {\n nav: SiteSettings['nav']['footer'];\n}\n\nconst Footer: FC<Props> = (props) => {\n return (\n <footer role='contentinfo'>\n <nav aria-labelledby='footer-nav'>\n <FooterGroup>\n <HideVisually as='h2' id='footer-nav'>\n Footer navigation\n </HideVisually>\n <EmergencyNav />\n <SocialNav />\n </FooterGroup>\n <FooterLinks>\n <ul>\n {!!props.nav.length &&\n props.nav.map((link, i) => {\n const target = link.blank ? '_blank' : undefined;\n const rel = link.blank ? 'noopener noreferrer' : undefined;\n const key = slugify(`${link.title}${i}`);\n return (\n <li key={key}>\n <Link href='/[slug]' as={link.url}>\n <a target={target} rel={rel}>\n {link.title}\n </a>\n </Link>\n </li>\n );\n })}\n <li>\n <Link href='/sitemap'>Sitemap</Link>\n </li>\n </ul>\n <Copyright>\n © Government of Western Australia. All rights reserved.\n </Copyright>\n </FooterLinks>\n </nav>\n </footer>\n );\n};\n\nFooter.defaultProps = {\n nav: [],\n};\n\nexport default Footer;\n","import { useRef, useReducer, useEffect, createElement, useContext, useMemo, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useId } from '@reach/auto-id';\nimport { Popover } from '@reach/popover';\nimport { useDescendantsInit, DescendantProvider, useDescendants, useDescendantKeyDown, createDescendantContext, useDescendant } from '@reach/descendants';\nimport { makeId, useCheckStyles, isFunction, forwardRefWithAs, useForkedRef, wrapEvent, usePrevious, isString, noop, getOwnerDocument, createNamedContext } from '@reach/utils';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\n// Actions\n\nvar CLEAR_SELECTION_INDEX = \"CLEAR_SELECTION_INDEX\";\nvar CLICK_MENU_ITEM = \"CLICK_MENU_ITEM\";\nvar CLOSE_MENU = \"CLOSE_MENU\";\nvar OPEN_MENU_AT_FIRST_ITEM = \"OPEN_MENU_AT_FIRST_ITEM\";\nvar OPEN_MENU_AT_INDEX = \"OPEN_MENU_AT_INDEX\";\nvar OPEN_MENU_CLEARED = \"OPEN_MENU_CLEARED\";\nvar SEARCH_FOR_ITEM = \"SEARCH_FOR_ITEM\";\nvar SELECT_ITEM_AT_INDEX = \"SELECT_ITEM_AT_INDEX\";\nvar SET_BUTTON_ID = \"SET_BUTTON_ID\";\nvar MenuDescendantContext = /*#__PURE__*/createDescendantContext(\"MenuDescendantContext\");\nvar MenuContext = /*#__PURE__*/createNamedContext(\"MenuContext\", {});\nvar initialState = {\n // The button ID is needed for aria controls and can be set directly and\n // updated for top-level use via context. Otherwise a default is set by useId.\n // TODO: Consider deprecating direct ID in 1.0 in favor of id at the top level\n // for passing deterministic IDs to descendent components.\n buttonId: null,\n // Whether or not the menu is expanded\n isExpanded: false,\n // When a user begins typing a character string, the selection will change if\n // a matching item is found\n typeaheadQuery: \"\",\n // The index of the current selected item. When the selection is cleared a\n // value of -1 is used.\n selectionIndex: -1\n}; ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * Menu\r\n *\r\n * The wrapper component for the other components. No DOM element is rendered.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menu\r\n */\n\nvar Menu = function Menu(_ref) {\n var id = _ref.id,\n children = _ref.children;\n var buttonRef = useRef(null);\n var menuRef = useRef(null);\n var popoverRef = useRef(null);\n\n var _useDescendantsInit = useDescendantsInit(),\n descendants = _useDescendantsInit[0],\n setDescendants = _useDescendantsInit[1];\n\n var _React$useReducer = useReducer(reducer, initialState),\n state = _React$useReducer[0],\n dispatch = _React$useReducer[1];\n\n var _id = useId(id);\n\n var menuId = id || makeId(\"menu\", _id); // We use an event listener attached to the window to capture outside clicks\n // that close the menu. We don't want the initial button click to trigger this\n // when a menu is closed, so we can track this behavior in a ref for now.\n // We shouldn't need this when we rewrite with state machine logic.\n\n var buttonClickedRef = useRef(false); // We will put children callbacks in a ref to avoid triggering endless render\n // loops when using render props if the app code doesn't useCallback\n // https://github.com/reach/reach-ui/issues/523\n\n var selectCallbacks = useRef([]); // If the popover's position overlaps with an option when the popover\n // initially opens, the mouseup event will trigger a select. To prevent that,\n // we decide the menu button is only ready to make a selection if the pointer\n // moves first, otherwise the user is just registering the initial button\n // click rather than selecting an item. This is similar to a native select\n // on most platforms, and our menu button popover works similarly.\n\n var readyToSelect = useRef(false);\n var context = {\n buttonRef: buttonRef,\n dispatch: dispatch,\n menuId: menuId,\n menuRef: menuRef,\n popoverRef: popoverRef,\n buttonClickedRef: buttonClickedRef,\n readyToSelect: readyToSelect,\n selectCallbacks: selectCallbacks,\n state: state\n }; // When the menu is open, focus is placed on the menu itself so that\n // keyboard navigation is still possible.\n\n useEffect(function () {\n if (state.isExpanded) {\n // @ts-ignore\n window.__REACH_DISABLE_TOOLTIPS = true;\n window.requestAnimationFrame(function () {\n focus(menuRef.current);\n });\n } else {\n // We want to ignore the immediate focus of a tooltip so it doesn't pop\n // up again when the menu closes, only pops up when focus returns again\n // to the tooltip (like native OS tooltips).\n // @ts-ignore\n window.__REACH_DISABLE_TOOLTIPS = false;\n }\n }, [state.isExpanded]);\n useCheckStyles(\"menu-button\");\n return createElement(DescendantProvider, {\n context: MenuDescendantContext,\n items: descendants,\n set: setDescendants\n }, createElement(MenuContext.Provider, {\n value: context\n }, isFunction(children) ? children({\n isExpanded: state.isExpanded,\n // TODO: Remove in 1.0\n isOpen: state.isExpanded\n }) : children));\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n Menu.displayName = \"Menu\";\n Menu.propTypes = {\n children: /*#__PURE__*/PropTypes.oneOfType([PropTypes.func, PropTypes.node])\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuButton\r\n *\r\n * Wraps a DOM `button` that toggles the opening and closing of the dropdown\r\n * menu. Must be rendered inside of a `<Menu>`.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menubutton\r\n */\n\n\nvar MenuButton = /*#__PURE__*/forwardRefWithAs(function MenuButton(_ref2, forwardedRef) {\n var _ref2$as = _ref2.as,\n Comp = _ref2$as === void 0 ? \"button\" : _ref2$as,\n onKeyDown = _ref2.onKeyDown,\n onMouseDown = _ref2.onMouseDown,\n id = _ref2.id,\n props = _objectWithoutPropertiesLoose(_ref2, [\"as\", \"onKeyDown\", \"onMouseDown\", \"id\"]);\n\n var _React$useContext = useContext(MenuContext),\n buttonRef = _React$useContext.buttonRef,\n buttonClickedRef = _React$useContext.buttonClickedRef,\n menuId = _React$useContext.menuId,\n _React$useContext$sta = _React$useContext.state,\n buttonId = _React$useContext$sta.buttonId,\n isExpanded = _React$useContext$sta.isExpanded,\n dispatch = _React$useContext.dispatch;\n\n var ref = useForkedRef(buttonRef, forwardedRef);\n var items = useDescendants(MenuDescendantContext);\n var firstNonDisabledIndex = useMemo(function () {\n return items.findIndex(function (item) {\n return !item.disabled;\n });\n }, [items]);\n useEffect(function () {\n var newButtonId = id != null ? id : menuId ? makeId(\"menu-button\", menuId) : \"menu-button\";\n\n if (buttonId !== newButtonId) {\n dispatch({\n type: SET_BUTTON_ID,\n payload: newButtonId\n });\n }\n }, [buttonId, dispatch, id, menuId]);\n\n function handleKeyDown(event) {\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n event.preventDefault(); // prevent scroll\n\n dispatch({\n type: OPEN_MENU_AT_INDEX,\n payload: {\n index: firstNonDisabledIndex\n }\n });\n break;\n\n case \"Enter\":\n case \" \":\n dispatch({\n type: OPEN_MENU_AT_INDEX,\n payload: {\n index: firstNonDisabledIndex\n }\n });\n break;\n }\n }\n\n function handleMouseDown(event) {\n if (!isExpanded) {\n buttonClickedRef.current = true;\n }\n\n if (isRightClick(event.nativeEvent)) {\n return;\n } else if (isExpanded) {\n dispatch({\n type: CLOSE_MENU,\n payload: {\n buttonRef: buttonRef\n }\n });\n } else {\n dispatch({\n type: OPEN_MENU_CLEARED\n });\n }\n }\n\n return createElement(Comp // When the menu is displayed, the element with role `button` has\n // `aria-expanded` set to `true`. When the menu is hidden, it is\n // recommended that `aria-expanded` is not present.\n // https://www.w3.org/TR/wai-aria-practices-1.2/#menubutton\n , Object.assign({\n \"aria-expanded\": isExpanded ? true : undefined,\n \"aria-haspopup\": true,\n \"aria-controls\": menuId\n }, props, {\n ref: ref,\n \"data-reach-menu-button\": \"\",\n id: buttonId || undefined,\n onKeyDown: wrapEvent(onKeyDown, handleKeyDown),\n onMouseDown: wrapEvent(onMouseDown, handleMouseDown),\n type: \"button\"\n }));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n MenuButton.displayName = \"MenuButton\";\n MenuButton.propTypes = {\n children: PropTypes.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuItemImpl\r\n *\r\n * MenuItem and MenuLink share most of the same functionality captured here.\r\n */\n\n\nvar MenuItemImpl = /*#__PURE__*/forwardRefWithAs(function MenuItemImpl(_ref3, forwardedRef) {\n var Comp = _ref3.as,\n indexProp = _ref3.index,\n _ref3$isLink = _ref3.isLink,\n isLink = _ref3$isLink === void 0 ? false : _ref3$isLink,\n onClick = _ref3.onClick,\n onDragStart = _ref3.onDragStart,\n onMouseDown = _ref3.onMouseDown,\n onMouseEnter = _ref3.onMouseEnter,\n onMouseLeave = _ref3.onMouseLeave,\n onMouseMove = _ref3.onMouseMove,\n onMouseUp = _ref3.onMouseUp,\n onSelect = _ref3.onSelect,\n disabled = _ref3.disabled,\n valueTextProp = _ref3.valueText,\n props = _objectWithoutPropertiesLoose(_ref3, [\"as\", \"index\", \"isLink\", \"onClick\", \"onDragStart\", \"onMouseDown\", \"onMouseEnter\", \"onMouseLeave\", \"onMouseMove\", \"onMouseUp\", \"onSelect\", \"disabled\", \"valueText\"]);\n\n var _React$useContext2 = useContext(MenuContext),\n buttonRef = _React$useContext2.buttonRef,\n dispatch = _React$useContext2.dispatch,\n readyToSelect = _React$useContext2.readyToSelect,\n selectCallbacks = _React$useContext2.selectCallbacks,\n _React$useContext2$st = _React$useContext2.state,\n selectionIndex = _React$useContext2$st.selectionIndex,\n isExpanded = _React$useContext2$st.isExpanded;\n\n var ownRef = useRef(null); // After the ref is mounted to the DOM node, we check to see if we have an\n // explicit valueText prop before looking for the node's textContent for\n // typeahead functionality.\n\n var _React$useState = useState(valueTextProp || \"\"),\n valueText = _React$useState[0],\n setValueText = _React$useState[1];\n\n var setValueTextFromDom = useCallback(function (node) {\n if (node) {\n ownRef.current = node;\n\n if (!valueTextProp || node.textContent && valueText !== node.textContent) {\n setValueText(node.textContent);\n }\n }\n }, [valueText, valueTextProp]);\n var ref = useForkedRef(forwardedRef, setValueTextFromDom);\n var mouseEventStarted = useRef(false);\n var index = useDescendant({\n element: ownRef.current,\n key: valueText,\n disabled: disabled,\n isLink: isLink\n }, MenuDescendantContext, indexProp);\n var isSelected = index === selectionIndex && !disabled; // Update the callback ref array on every render\n\n selectCallbacks.current[index] = onSelect;\n\n function select() {\n focus(buttonRef.current);\n onSelect && onSelect();\n dispatch({\n type: CLICK_MENU_ITEM\n });\n }\n\n function handleClick(event) {\n if (isLink && !isRightClick(event.nativeEvent)) {\n if (disabled) {\n event.preventDefault();\n } else {\n select();\n }\n }\n }\n\n function handleDragStart(event) {\n // Because we don't preventDefault on mousedown for links (we need the\n // native click event), clicking and holding on a link triggers a\n // dragstart which we don't want.\n if (isLink) {\n event.preventDefault();\n }\n }\n\n function handleMouseDown(event) {\n if (isRightClick(event.nativeEvent)) return;\n\n if (isLink) {\n // Signal that the mouse is down so we can react call the right function\n // if the user is clicking on a link.\n mouseEventStarted.current = true;\n } else {\n event.preventDefault();\n }\n }\n\n function handleMouseEnter(event) {\n if (!isSelected && index != null && !disabled) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: index\n }\n });\n }\n }\n\n function handleMouseLeave(event) {\n // Clear out selection when mouse over a non-menu item child.\n dispatch({\n type: CLEAR_SELECTION_INDEX\n });\n }\n\n function handleMouseMove() {\n readyToSelect.current = true;\n\n if (!isSelected && index != null && !disabled) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: index\n }\n });\n }\n }\n\n function handleMouseUp(event) {\n if (!readyToSelect.current) {\n readyToSelect.current = true;\n return;\n }\n\n if (isRightClick(event.nativeEvent)) return;\n\n if (isLink) {\n // If a mousedown event was initiated on a menu link followed by a\n // mouseup event on the same link, we do nothing; a click event will\n // come next and handle selection. Otherwise, we trigger a click event.\n if (mouseEventStarted.current) {\n mouseEventStarted.current = false;\n } else if (ownRef.current) {\n ownRef.current.click();\n }\n } else {\n if (!disabled) {\n select();\n }\n }\n } // When the menu closes, reset readyToSelect for the next interaction.\n\n\n useEffect(function () {\n if (!isExpanded) {\n readyToSelect.current = false;\n }\n }, [isExpanded, readyToSelect]); // Any time a mouseup event occurs anywhere in the document, we reset the\n // mouseEventStarted ref so we can check it again when needed.\n\n useEffect(function () {\n var ownerDocument = getOwnerDocument(ownRef.current);\n\n var listener = function listener() {\n return mouseEventStarted.current = false;\n };\n\n ownerDocument.addEventListener(\"mouseup\", listener);\n return function () {\n return ownerDocument.removeEventListener(\"mouseup\", listener);\n };\n }, []);\n return createElement(Comp, Object.assign({\n role: \"menuitem\",\n id: useMenuItemId(index),\n tabIndex: -1\n }, props, {\n ref: ref,\n \"aria-disabled\": disabled || undefined,\n \"data-reach-menu-item\": \"\",\n \"data-selected\": isSelected ? \"\" : undefined,\n \"data-valuetext\": valueText,\n onClick: wrapEvent(onClick, handleClick),\n onDragStart: wrapEvent(onDragStart, handleDragStart),\n onMouseDown: wrapEvent(onMouseDown, handleMouseDown),\n onMouseEnter: wrapEvent(onMouseEnter, handleMouseEnter),\n onMouseLeave: wrapEvent(onMouseLeave, handleMouseLeave),\n onMouseMove: wrapEvent(onMouseMove, handleMouseMove),\n onMouseUp: wrapEvent(onMouseUp, handleMouseUp)\n }));\n}); ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuItem\r\n *\r\n * Handles menu selection. Must be a direct child of a `<MenuList>`.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menuitem\r\n */\n\nvar MenuItem = /*#__PURE__*/forwardRefWithAs(function MenuItem(_ref4, forwardedRef) {\n var _ref4$as = _ref4.as,\n as = _ref4$as === void 0 ? \"div\" : _ref4$as,\n props = _objectWithoutPropertiesLoose(_ref4, [\"as\"]);\n\n return createElement(MenuItemImpl, Object.assign({}, props, {\n ref: forwardedRef,\n as: as\n }));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n MenuItem.displayName = \"MenuItem\";\n MenuItem.propTypes = {\n as: PropTypes.any,\n onSelect: PropTypes.func.isRequired\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuItems\r\n *\r\n * A low-level wrapper for menu items. Compose it with `MenuPopover` for more\r\n * control over the nested components and their rendered DOM nodes, or if you\r\n * need to nest arbitrary components between the outer wrapper and your list.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menuitems\r\n */\n\n\nvar MenuItems = /*#__PURE__*/forwardRefWithAs(function MenuItems(_ref5, forwardedRef) {\n var _ref5$as = _ref5.as,\n Comp = _ref5$as === void 0 ? \"div\" : _ref5$as,\n children = _ref5.children,\n id = _ref5.id,\n onKeyDown = _ref5.onKeyDown,\n props = _objectWithoutPropertiesLoose(_ref5, [\"as\", \"children\", \"id\", \"onKeyDown\"]);\n\n var _React$useContext3 = useContext(MenuContext),\n menuId = _React$useContext3.menuId,\n dispatch = _React$useContext3.dispatch,\n buttonRef = _React$useContext3.buttonRef,\n menuRef = _React$useContext3.menuRef,\n selectCallbacks = _React$useContext3.selectCallbacks,\n _React$useContext3$st = _React$useContext3.state,\n isExpanded = _React$useContext3$st.isExpanded,\n buttonId = _React$useContext3$st.buttonId,\n selectionIndex = _React$useContext3$st.selectionIndex,\n typeaheadQuery = _React$useContext3$st.typeaheadQuery;\n\n var menuItems = useDescendants(MenuDescendantContext);\n var ref = useForkedRef(menuRef, forwardedRef);\n useEffect(function () {\n // Respond to user char key input with typeahead\n var match = findItemFromTypeahead(menuItems, typeaheadQuery);\n\n if (typeaheadQuery && match != null) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: match\n }\n });\n }\n\n var timeout = window.setTimeout(function () {\n return typeaheadQuery && dispatch({\n type: SEARCH_FOR_ITEM,\n payload: \"\"\n });\n }, 1000);\n return function () {\n return window.clearTimeout(timeout);\n };\n }, [dispatch, menuItems, typeaheadQuery]);\n var prevMenuItemsLength = usePrevious(menuItems.length);\n var prevSelected = usePrevious(menuItems[selectionIndex]);\n var prevSelectionIndex = usePrevious(selectionIndex);\n useEffect(function () {\n if (selectionIndex > menuItems.length - 1) {\n // If for some reason our selection index is larger than our possible\n // index range (let's say the last item is selected and the list\n // dynamically updates), we need to select the last item in the list.\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: menuItems.length - 1\n }\n });\n } else if ( // Checks if\n // - menu length has changed\n // - selection index has not changed BUT selected item has changed\n //\n // This prevents any dynamic adding/removing of menu items from actually\n // changing a user's expected selection.\n prevMenuItemsLength !== menuItems.length && selectionIndex > -1 && prevSelected && prevSelectionIndex === selectionIndex && menuItems[selectionIndex] !== prevSelected) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: menuItems.findIndex(function (i) {\n return i.key === prevSelected.key;\n })\n }\n });\n }\n }, [dispatch, menuItems, prevMenuItemsLength, prevSelected, prevSelectionIndex, selectionIndex]);\n var handleKeyDown = wrapEvent(function handleKeyDown(event) {\n var key = event.key;\n\n if (!isExpanded) {\n return;\n }\n\n switch (key) {\n case \"Enter\":\n case \" \":\n var selected = menuItems.find(function (item) {\n return item.index === selectionIndex;\n }); // For links, the Enter key will trigger a click by default, but for\n // consistent behavior across menu items we'll trigger a click when\n // the spacebar is pressed.\n\n if (selected) {\n if (selected.isLink && selected.element) {\n selected.element.click();\n } else {\n event.preventDefault(); // Focus the button first by default when an item is selected.\n // We fire the onSelect callback next so the app can manage\n // focus if needed.\n\n focus(buttonRef.current);\n selectCallbacks.current[selected.index] && selectCallbacks.current[selected.index]();\n dispatch({\n type: CLICK_MENU_ITEM\n });\n }\n }\n\n break;\n\n case \"Escape\":\n focus(buttonRef.current);\n dispatch({\n type: CLOSE_MENU,\n payload: {\n buttonRef: buttonRef\n }\n });\n break;\n\n case \"Tab\":\n // prevent leaving\n event.preventDefault();\n break;\n\n default:\n // Check if a user is typing some char keys and respond by setting\n // the query state.\n if (isString(key) && key.length === 1) {\n var query = typeaheadQuery + key.toLowerCase();\n dispatch({\n type: SEARCH_FOR_ITEM,\n payload: query\n });\n }\n\n break;\n }\n }, useDescendantKeyDown(MenuDescendantContext, {\n currentIndex: selectionIndex,\n orientation: \"vertical\",\n rotate: false,\n filter: function filter(item) {\n return !item.disabled;\n },\n callback: function callback(index) {\n dispatch({\n type: SELECT_ITEM_AT_INDEX,\n payload: {\n index: index\n }\n });\n },\n key: \"index\"\n }));\n return (// TODO: Should probably file a but in jsx-a11y, but this is correct\n // according to https://www.w3.org/TR/wai-aria-practices-1.2/examples/menu-button/menu-button-actions-active-descendant.html\n // eslint-disable-next-line jsx-a11y/aria-activedescendant-has-tabindex\n createElement(Comp // Refers to the descendant menuitem element that is visually indicated\n // as focused.\n // https://www.w3.org/TR/wai-aria-practices-1.2/examples/menu-button/menu-button-actions-active-descendant.html\n , Object.assign({\n \"aria-activedescendant\": useMenuItemId(selectionIndex) || undefined,\n \"aria-labelledby\": buttonId || undefined,\n // The element that contains the menu items displayed by activating the\n // button has role menu.\n // https://www.w3.org/TR/wai-aria-practices-1.2/#menubutton\n role: \"menu\",\n tabIndex: -1\n }, props, {\n ref: ref,\n \"data-reach-menu-items\": \"\",\n id: menuId,\n onKeyDown: wrapEvent(onKeyDown, handleKeyDown)\n }), children)\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n MenuItems.displayName = \"MenuItems\";\n MenuItems.propTypes = {\n children: PropTypes.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuLink\r\n *\r\n * Handles linking to a different page in the menu. By default it renders `<a>`,\r\n * but also accepts any other kind of Link as long as the `Link` uses the\r\n * `React.forwardRef` API.\r\n *\r\n * Must be a direct child of a `<MenuList>`.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menulink\r\n */\n\n\nvar MenuLink = /*#__PURE__*/forwardRefWithAs(function MenuLink(_ref6, forwardedRef) {\n var _ref6$as = _ref6.as,\n as = _ref6$as === void 0 ? \"a\" : _ref6$as,\n component = _ref6.component,\n onSelect = _ref6.onSelect,\n props = _objectWithoutPropertiesLoose(_ref6, [\"as\", \"component\", \"onSelect\"]);\n\n if (component) {\n console.warn(\"[@reach/menu-button]: Please use the `as` prop instead of `component`.\");\n }\n\n return createElement(\"div\", {\n role: \"none\",\n tabIndex: -1\n }, createElement(MenuItemImpl, Object.assign({}, props, {\n ref: forwardedRef,\n \"data-reach-menu-link\": \"\",\n as: as,\n isLink: true,\n onSelect: onSelect || noop\n })));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n MenuLink.displayName = \"MenuLink\";\n MenuLink.propTypes = {\n as: PropTypes.any,\n component: PropTypes.any\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuList\r\n *\r\n * Wraps a DOM element that renders the menu items. Must be rendered inside of\r\n * a `<Menu>`.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menulist\r\n */\n\n\nvar MenuList = /*#__PURE__*/forwardRefWithAs(function MenuList(_ref7, forwardedRef) {\n var _ref7$portal = _ref7.portal,\n portal = _ref7$portal === void 0 ? true : _ref7$portal,\n props = _objectWithoutPropertiesLoose(_ref7, [\"portal\"]);\n\n return createElement(MenuPopover, {\n portal: portal\n }, createElement(MenuItems, Object.assign({}, props, {\n ref: forwardedRef,\n \"data-reach-menu-list\": \"\"\n })));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n MenuList.displayName = \"MenuList\";\n MenuList.propTypes = {\n children: PropTypes.node.isRequired\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * MenuPopover\r\n *\r\n * A low-level wrapper for the popover that appears when a menu button is open.\r\n * You can compose it with `MenuItems` for more control over the nested\r\n * components and their rendered DOM nodes, or if you need to nest arbitrary\r\n * components between the outer wrapper and your list.\r\n *\r\n * @see Docs https://reach.tech/menu-button#menupopover\r\n */\n\n\nvar MenuPopover = /*#__PURE__*/forwardRefWithAs(function MenuPopover(_ref8, forwardedRef) {\n var _ref8$as = _ref8.as,\n Comp = _ref8$as === void 0 ? \"div\" : _ref8$as,\n children = _ref8.children,\n _ref8$portal = _ref8.portal,\n portal = _ref8$portal === void 0 ? true : _ref8$portal,\n position = _ref8.position,\n props = _objectWithoutPropertiesLoose(_ref8, [\"as\", \"children\", \"portal\", \"position\"]);\n\n var _React$useContext4 = useContext(MenuContext),\n buttonRef = _React$useContext4.buttonRef,\n buttonClickedRef = _React$useContext4.buttonClickedRef,\n dispatch = _React$useContext4.dispatch,\n menuRef = _React$useContext4.menuRef,\n popoverRef = _React$useContext4.popoverRef,\n isExpanded = _React$useContext4.state.isExpanded;\n\n var ref = useForkedRef(popoverRef, forwardedRef);\n useEffect(function () {\n var ownerDocument = getOwnerDocument(popoverRef.current);\n\n function listener(event) {\n if (buttonClickedRef.current) {\n buttonClickedRef.current = false;\n } else if (!popoverContainsEventTarget(popoverRef.current, event.target)) {\n // We on want to close only if focus rests outside the menu\n dispatch({\n type: CLOSE_MENU,\n payload: {\n buttonRef: buttonRef\n }\n });\n }\n }\n\n ownerDocument.addEventListener(\"mousedown\", listener); // see https://github.com/reach/reach-ui/pull/700#discussion_r530369265\n // ownerDocument.addEventListener(\"touchstart\", listener);\n\n return function () {\n ownerDocument.removeEventListener(\"mousedown\", listener); // ownerDocument.removeEventListener(\"touchstart\", listener);\n };\n }, [buttonClickedRef, buttonRef, dispatch, menuRef, popoverRef]);\n\n var commonProps = _extends({\n ref: ref,\n // TODO: remove in 1.0\n \"data-reach-menu\": \"\",\n \"data-reach-menu-popover\": \"\",\n hidden: !isExpanded,\n children: children\n }, props);\n\n return portal ? createElement(Popover, Object.assign({}, commonProps, {\n as: Comp,\n targetRef: buttonRef,\n position: position\n })) : createElement(Comp, Object.assign({}, commonProps));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n MenuPopover.displayName = \"MenuPopover\";\n MenuPopover.propTypes = {\n children: PropTypes.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * A hook that exposes data for a given `Menu` component to its descendants.\r\n *\r\n * @see Docs https://reach.tech/menu-button#usemenubuttoncontext\r\n */\n\n\nfunction useMenuButtonContext() {\n var _React$useContext5 = useContext(MenuContext),\n isExpanded = _React$useContext5.state.isExpanded;\n\n return useMemo(function () {\n return {\n isExpanded: isExpanded\n };\n }, [isExpanded]);\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * When a user's typed input matches the string displayed in a menu item, it is\r\n * expected that the matching menu item is selected. This is our matching\r\n * function.\r\n */\n\n\nfunction findItemFromTypeahead(items, string) {\n if (string === void 0) {\n string = \"\";\n }\n\n if (!string) {\n return null;\n }\n\n var found = items.find(function (item) {\n var _item$element, _item$element$dataset, _item$element$dataset2;\n\n return item.disabled ? false : (_item$element = item.element) === null || _item$element === void 0 ? void 0 : (_item$element$dataset = _item$element.dataset) === null || _item$element$dataset === void 0 ? void 0 : (_item$element$dataset2 = _item$element$dataset.valuetext) === null || _item$element$dataset2 === void 0 ? void 0 : _item$element$dataset2.toLowerCase().startsWith(string);\n });\n return found ? items.indexOf(found) : null;\n}\n\nfunction useMenuItemId(index) {\n var _React$useContext6 = useContext(MenuContext),\n menuId = _React$useContext6.menuId;\n\n return index != null && index > -1 ? makeId(\"option-\" + index, menuId) : undefined;\n}\n\nfunction isRightClick(nativeEvent) {\n return nativeEvent.which === 3 || nativeEvent.button === 2;\n}\n\nfunction focus(element) {\n element && element.focus();\n}\n\nfunction popoverContainsEventTarget(popover, target) {\n return !!(popover && popover.contains(target));\n}\n\nfunction reducer(state, action) {\n if (action === void 0) {\n action = {};\n }\n\n switch (action.type) {\n case CLICK_MENU_ITEM:\n return _extends({}, state, {\n isExpanded: false,\n selectionIndex: -1\n });\n\n case CLOSE_MENU:\n return _extends({}, state, {\n isExpanded: false,\n selectionIndex: -1\n });\n\n case OPEN_MENU_AT_FIRST_ITEM:\n return _extends({}, state, {\n isExpanded: true,\n selectionIndex: 0\n });\n\n case OPEN_MENU_AT_INDEX:\n return _extends({}, state, {\n isExpanded: true,\n selectionIndex: action.payload.index\n });\n\n case OPEN_MENU_CLEARED:\n return _extends({}, state, {\n isExpanded: true,\n selectionIndex: -1\n });\n\n case SELECT_ITEM_AT_INDEX:\n if (action.payload.index >= 0) {\n return _extends({}, state, {\n selectionIndex: action.payload.max != null ? Math.min(Math.max(action.payload.index, 0), action.payload.max) : Math.max(action.payload.index, 0)\n });\n }\n\n return state;\n\n case CLEAR_SELECTION_INDEX:\n return _extends({}, state, {\n selectionIndex: -1\n });\n\n case SET_BUTTON_ID:\n return _extends({}, state, {\n buttonId: action.payload\n });\n\n case SEARCH_FOR_ITEM:\n if (typeof action.payload !== \"undefined\") {\n return _extends({}, state, {\n typeaheadQuery: action.payload\n });\n }\n\n return state;\n\n default:\n return state;\n }\n}\n\nexport { Menu, MenuButton, MenuItem, MenuItems, MenuLink, MenuList, MenuPopover, useMenuButtonContext };\n//# sourceMappingURL=menu-button.esm.js.map\n","function _extends() { _extends = Object.assign || 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\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.125 7H.875a.875.875 0 010-1.75h26.25a.875.875 0 110 1.75zm0 8.75H.875a.875.875 0 010-1.75h26.25a.875.875 0 110 1.75zm0 8.75H.875a.875.875 0 010-1.75h26.25a.875.875 0 110 1.75z\",\n fill: \"currentColor\"\n});\n\nfunction SvgIconHamburger(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 28 28\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjggMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI3LjEyNSA3SC44NzVhLjg3NS44NzUgMCAwMTAtMS43NWgyNi4yNWEuODc1Ljg3NSAwIDExMCAxLjc1ek0yNy4xMjUgMTUuNzVILjg3NWEuODc1Ljg3NSAwIDAxMC0xLjc1aDI2LjI1YS44NzUuODc1IDAgMTEwIDEuNzV6TTI3LjEyNSAyNC41SC44NzVhLjg3NS44NzUgMCAwMTAtMS43NWgyNi4yNWEuODc1Ljg3NSAwIDExMCAxLjc1eiIgZmlsbD0iY3VycmVudENvbG9yIi8+PC9zdmc+Cg==\";\nexport { SvgIconHamburger as ReactComponent };","import {\n MenuLink,\n MenuButton as ReachMenuButton,\n MenuList as ReachMenuList,\n} from '@reach/menu-button';\nimport { lighten, rem, size } from 'polished';\nimport styled, { css } from 'styled-components';\n\nexport const NavContainer = styled.div`\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const AlertButton = styled(MenuLink)`\n display: flex;\n align-items: center;\n margin-top: var(--padding);\n margin-right: ${rem(15)};\n margin-left: ${rem(15)};\n padding: ${rem(20)};\n color: inherit;\n text-decoration: none;\n background-color: ${({ theme }) => lighten(0.45, theme.colors.palette.grey)};\n border-radius: ${({ theme }) => theme.borderRadius.medium};\n cursor: pointer;\n\n svg {\n flex-shrink: 0;\n width: ${rem(35)};\n height: ${rem(22)};\n margin-right: ${rem(20)};\n }\n\n strong {\n display: block;\n }\n`;\n\nexport const MenuList = styled(ReachMenuList)`\n --padding: ${rem(15)};\n\n position: absolute;\n top: ${rem(-10)};\n right: ${rem(-20)};\n width: 100%;\n max-width: ${rem(340)};\n padding: ${rem(50)} var(--padding);\n color: ${({ theme }) => theme.colors.palette.black};\n background-color: ${({ theme }) => theme.colors.palette.white};\n border-radius: ${({ theme }) => theme.borderRadius.medium};\n box-shadow: 0 4px 80px rgba(0, 0, 0, 0.4);\n\n ${({ theme }) => theme.mediaQueries.medium} {\n top: ${rem(1)};\n right: ${rem(-16)};\n }\n\n [data-selected] {\n color: ${({ theme }) => theme.colors.palette.white};\n background-color: ${({ theme }) => theme.colors.palette.black};\n }\n\n @keyframes enter {\n 0% {\n transform: translateY(${rem(-20)});\n opacity: 0;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n & {\n animation: enter 0.2s ease;\n\n @media (prefers-reduced-motion) {\n transform: none;\n opacity: 1;\n animation-name: none;\n }\n }\n\n &:focus {\n outline: 0;\n }\n\n a:not(${AlertButton}),\n [data-reach-menu-item]:not(${AlertButton}) {\n display: block;\n padding: var(--padding);\n text-decoration: none;\n border-radius: ${({ theme }) => theme.borderRadius.small};\n cursor: pointer;\n }\n`;\n\nconst navContainer = css`\n padding: ${rem(16)};\n background-color: ${({ theme }) => theme.colors.background};\n border-radius: ${({ theme }) => theme.borderRadius.medium};\n`;\n\nconst buttonBase = css`\n --fill-color: ${({ theme }) => theme.colors.palette.black};\n\n ${size(20)}\n\n position: relative;\n display: block;\n background-color: transparent;\n border: 0;\n cursor: pointer;\n\n &::before {\n ${size('100%')}\n\n position: absolute;\n top: 0;\n left: 0;\n transform: scale(2);\n content: '';\n }\n\n svg {\n ${size('100%')}\n\n position: absolute;\n top: 0;\n left: 0;\n color: var(--fill-color);\n }\n`;\n\nexport const MenuButton = styled(ReachMenuButton)`\n --fill-color: ${({ theme }) => theme.colors.palette.black};\n\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n padding: 0;\n border: none;\n cursor: pointer;\n\n svg {\n ${size(24)}\n\n color: var(--fill-color);\n }\n\n ${({ theme }) => theme.mediaQueries.medium} {\n ${size(60)};\n\n background-color: ${({ theme }) => theme.colors.background};\n border-radius: ${({ theme }) => theme.borderRadius.medium};\n }\n`;\n\nexport const CloseButton = styled(ReachMenuButton)`\n ${buttonBase}\n --fill-color: ${({ theme }) => theme.colors.palette.black};\n\n position: absolute;\n top: ${rem(20)};\n right: ${rem(20)};\n`;\n\nexport const LogoContainer = styled.a`\n cursor: pointer;\n ${({ theme }) => theme.mediaQueries.medium} {\n ${navContainer};\n }\n`;\n\nexport const Logo = styled.img`\n display: block;\n width: ${rem(100)};\n height: ${rem(38)};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n width: ${rem(158)};\n height: ${rem(60)};\n }\n`;\n","import { Menu, MenuItem, MenuLink } from '@reach/menu-button';\nimport { ReactComponent as IconCross } from 'assets/icons/icon-cross.svg';\nimport { ReactComponent as IconEmergency } from 'assets/icons/icon-emergency.svg';\nimport { ReactComponent as IconHamburger } from 'assets/icons/icon-hamburger.svg';\nimport { HideVisually } from 'components/hide-visually';\nimport Link from 'next/link';\nimport { FC, useMemo } from 'react';\nimport slugify from 'slugify';\nimport { LeaveEarlyIntroModeEnum } from 'types/base';\nimport { SiteSettings } from 'types/sanity';\nimport APP_ROUTES from 'utils/routes';\nimport {\n AlertButton,\n CloseButton,\n Logo,\n LogoContainer,\n MenuButton,\n MenuList,\n NavContainer,\n} from './primary-nav.styles';\n\ninterface Props {\n logoTitle: string;\n onLogout: () => void;\n navItems?: SiteSettings['nav']['header'];\n isLoggedIn?: boolean;\n}\n\nconst PrimaryNav: FC<Props> = ({\n navItems,\n isLoggedIn,\n logoTitle,\n onLogout,\n}) => {\n const CMSLinks = useMemo(\n () =>\n navItems?.map((link, i) => {\n const target = link.blank ? '_blank' : undefined;\n const rel = link.blank ? 'noopener noreferrer' : undefined;\n const key = slugify(`${link.title}${i}`);\n\n return (\n <Link key={key} href='/[slug]' as={link.url} passHref>\n <MenuLink target={target} rel={rel}>\n {link.title}\n </MenuLink>\n </Link>\n );\n }),\n [navItems]\n );\n\n return (\n <Menu>\n <NavContainer>\n <Link href={APP_ROUTES.home}>\n <LogoContainer>\n <Logo\n src='/logo-dfes.svg'\n alt={`${logoTitle} Homepage`}\n width='158'\n height='60'\n />\n </LogoContainer>\n </Link>\n <MenuButton aria-label='Open Menu'>\n <IconHamburger aria-hidden />\n </MenuButton>\n <nav role='navigation'>\n <HideVisually as='h2'>Main navigation</HideVisually>\n <MenuList portal={false}>\n <CloseButton aria-label='Close Menu'>\n <IconCross aria-hidden />\n </CloseButton>\n <Link href={APP_ROUTES.home} passHref>\n <MenuLink>Home</MenuLink>\n </Link>\n {!isLoggedIn && (\n <>\n <Link\n href={`${APP_ROUTES.leave.index}?mode=${LeaveEarlyIntroModeEnum.Default}`}\n as={APP_ROUTES.leave.index}\n passHref\n >\n <MenuLink>Be safe and leave early plan</MenuLink>\n </Link>\n <Link href={APP_ROUTES.stay.index} passHref>\n <MenuLink>Stay and defend plan</MenuLink>\n </Link>\n </>\n )}\n {isLoggedIn && (\n <>\n <Link href={APP_ROUTES.account} passHref>\n <MenuLink>My bushfire plans</MenuLink>\n </Link>\n <Link href={APP_ROUTES.users.settings} passHref>\n <MenuLink>Account settings</MenuLink>\n </Link>\n </>\n )}\n <Link href={APP_ROUTES.stayInformed} passHref>\n <MenuLink>Stay informed</MenuLink>\n </Link>\n <Link href={APP_ROUTES.resources} passHref>\n <MenuLink>Bushfire preparation resources</MenuLink>\n </Link>\n <Link href={APP_ROUTES.australianWarningSystem} passHref>\n <MenuLink>Australian Warning System</MenuLink>\n </Link>\n <Link href={APP_ROUTES.fireDangerRatings} passHref>\n <MenuLink>Fire Danger Rating System</MenuLink>\n </Link>\n {isLoggedIn && (\n <>\n {CMSLinks}\n <MenuItem onSelect={onLogout}>Logout</MenuItem>\n </>\n )}\n {!isLoggedIn && (\n <>\n {CMSLinks}\n <Link href={APP_ROUTES.users.signIn} passHref>\n <MenuLink>Login</MenuLink>\n </Link>\n <Link href={APP_ROUTES.users.signUp} passHref>\n <MenuLink>Create an account</MenuLink>\n </Link>\n </>\n )}\n <AlertButton\n href='https://www.emergency.wa.gov.au/'\n target='_blank'\n rel='noopener noreferrer'\n >\n <IconEmergency />\n <div>\n <strong>Alerts and Warnings</strong>\n EmergencyWA\n </div>\n <HideVisually>(opens in new window)</HideVisually>\n </AlertButton>\n </MenuList>\n </nav>\n </NavContainer>\n </Menu>\n );\n};\n\nexport default PrimaryNav;\n","import { rem, size } from 'polished';\nimport styled, { createGlobalStyle } from 'styled-components';\n\nexport const BarGlobals = createGlobalStyle`\n :root {\n --body-offset: ${rem(65)};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n --body-offset: ${rem(45)};\n }\n }\n`;\n\nexport const Bar = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n z-index: ${({ theme }) => theme.zIndex[2]};\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: var(--body-offset);\n padding: 0 ${rem(10)};\n color: ${({ theme }) => theme.colors.palette.black};\n background-color: ${({ theme }) => theme.colors.palette.orange};\n\n svg {\n display: block;\n margin-right: ${rem(10)};\n ${size(rem(24))}\n\n ${({ theme }) => theme.mediaQueries.small} {\n margin-right: ${rem(20)};\n }\n }\n`;\n\nexport const StatusBarClose = styled.button.attrs({ type: 'button' })`\n width: ${rem(16)};\n height: ${rem(16)};\n margin: 0;\n padding: 0;\n color: ${({ theme }) => theme.colors.palette.black};\n background: none;\n border: 0;\n cursor: pointer;\n\n svg {\n width: 100%;\n height: 100%;\n }\n\n ${({ theme }) => theme.mediaQueries.medium} {\n position: absolute;\n top: ${rem(16)};\n right: ${rem(56)};\n }\n`;\n\nexport const StatusBarLink = styled.a`\n text-decoration: underline;\n cursor: pointer;\n`;\n","import Portal from '@reach/portal';\nimport { ReactComponent as AlertIcon } from 'assets/icons/icon-alert.svg';\nimport { ReactComponent as CrossIcon } from 'assets/icons/icon-cross.svg';\nimport { FC, ReactNode } from 'react';\nimport { Bar, BarGlobals, StatusBarClose } from './status-bar.styles';\n\ninterface StatusBarProps {\n children: ReactNode;\n onClose?: () => void;\n}\n\nconst StatusBar: FC<StatusBarProps> = ({ children, onClose }) => {\n return (\n <>\n <BarGlobals />\n <Portal>\n <Bar>\n <AlertIcon />\n {children}\n {onClose && (\n <StatusBarClose onClick={onClose}>\n <CrossIcon />\n </StatusBarClose>\n )}\n </Bar>\n </Portal>\n </>\n );\n};\n\nexport default StatusBar;\n","import { rem } from 'polished';\nimport styled, { css } from 'styled-components';\n\nexport const headerBase = css`\n width: 100%;\n height: var(--header-height);\n padding: ${rem(20)} ${rem(30)};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n padding: ${rem(40)} ${rem(50)};\n }\n`;\n\nexport const StyledHeader = styled.header`\n ${headerBase};\n\n position: absolute;\n top: var(--body-offset, 0);\n left: 0;\n z-index: ${({ theme }) => theme.zIndex[4]};\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n &::before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 90%;\n content: '';\n }\n`;\n","import PrimaryNav from 'components/primary-nav';\nimport StatusBar from 'components/status-bar';\nimport useAuth from 'hooks/use-auth';\nimport { useIsLoggedIn } from 'hooks/use-is-loggedIn';\nimport { useSiteSettings } from 'hooks/use-siteSettings';\nimport { FC, useEffect, useState } from 'react';\nimport { SiteSettings } from 'types/sanity';\nimport { StyledHeader } from './header.styles';\n\ninterface Props {\n nav: SiteSettings['nav']['header'];\n}\n\nconst Header: FC<Props> = (props) => {\n const { isVerified, loading, logout } = useAuth();\n const isLoggedIn = useIsLoggedIn();\n const { siteSettings } = useSiteSettings();\n const [isUnverified, setIsUnverified] = useState(false);\n\n useEffect(() => {\n setIsUnverified(!loading && isLoggedIn && !isVerified);\n }, [isLoggedIn, isVerified, loading]);\n\n return (\n <StyledHeader role='banner'>\n {isUnverified && (\n <StatusBar>\n Your email is not verified. Please check your inbox and follow\n instructions.\n </StatusBar>\n )}\n <PrimaryNav\n logoTitle={siteSettings.title}\n navItems={props.nav}\n isLoggedIn={isLoggedIn}\n onLogout={logout}\n />\n </StyledHeader>\n );\n};\n\nHeader.defaultProps = {\n nav: [],\n};\n\nexport default Header;\n","import { BackLinkStyled } from 'components/back-link/back-link.styles';\nimport Button from 'components/button';\nimport { headerBase } from 'components/header/header.styles';\nimport { rem, size } from 'polished';\nimport styled from 'styled-components';\n\nexport const Header = styled.div`\n ${headerBase};\n\n position: absolute;\n z-index: ${({ theme }) => theme.zIndex[1]};\n display: flex;\n align-items: center;\n pointer-events: none;\n\n a {\n pointer-events: all;\n }\n\n ${BackLinkStyled} {\n margin: 0;\n }\n`;\n\nexport const CloseButton = styled.button`\n ${size(24)}\n\n position: relative;\n margin-left: auto;\n background: none;\n border: 0;\n cursor: pointer;\n pointer-events: all;\n\n svg {\n position: absolute;\n top: 0;\n left: 0;\n ${size('100%')}\n\n color: ${({ theme }) => theme.colors.palette.black};\n }\n`;\n\nexport const SaveButtonWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${({ theme }) => theme.colors.palette.black};\n`;\n\nexport const SaveButton = styled(Button)`\n display: inline-block;\n margin: ${rem(30)} 0;\n background: none;\n border: 0;\n`;\n","import { ReactComponent as Cross } from 'assets/icons/icon-cross.svg';\nimport BackLink from 'components/back-link';\nimport { FC, useCallback, useMemo } from 'react';\nimport { useStore } from 'store';\nimport {\n CloseButton,\n Header,\n SaveButton,\n SaveButtonWrapper,\n} from './plan-controls.styles';\n\nexport type PlanControlOptions = {\n close: boolean;\n save: boolean;\n};\n\ninterface Props {\n onDismiss?: () => void;\n onSave?: () => void;\n backLink?: string;\n options?: true | PlanControlOptions;\n}\n\nconst PlanControls: FC<Props> = ({ onDismiss, onSave, options, backLink }) => {\n const [set, navigation] = useStore((state) => [state.set, state.navigation]);\n const href = useMemo(() => backLink, [backLink]);\n const showClose = useMemo(\n () => !backLink && (options === true || options?.close === true),\n [backLink, options]\n );\n const showSave = useMemo(\n () => !backLink && (options === true || options?.save === true),\n [backLink, options]\n );\n\n const resetBacklink = useCallback(() => {\n if (navigation.backLink) {\n set(({ navigation }) => {\n navigation.backLink = '';\n }, 'resetBacklink');\n }\n }, [navigation.backLink, set]);\n\n return (\n <>\n <Header>\n {href && (\n <BackLink\n href={href}\n as={href?.split('?')[0]}\n onClick={resetBacklink}\n >\n Continue Editing\n </BackLink>\n )}\n {showClose && (\n <CloseButton onClick={onDismiss} aria-label='Close plan'>\n <Cross aria-hidden role='presentation' />\n </CloseButton>\n )}\n </Header>\n\n {showSave && (\n <SaveButtonWrapper>\n <SaveButton onClick={onSave}>Save & exit</SaveButton>\n </SaveButtonWrapper>\n )}\n </>\n );\n};\n\nexport default PlanControls;\n","import Button from 'components/button';\nimport { rem } from 'polished';\nimport styled from 'styled-components';\n\nexport const Preview = styled.div`\n margin-top: var(--header-height);\n padding: ${({ theme }) => theme.space.small};\n color: ${({ theme }) => theme.colors.palette.black};\n font-weight: bold;\n text-align: center;\n background: ${({ theme }) => theme.colors.palette.orange};\n`;\n\nexport const ExitPreview = styled(Button).attrs({\n type: 'button',\n variant: 'dark',\n})`\n margin-left: ${rem(20)};\n`;\n","import Cookies from 'js-cookie';\nimport { useRouter } from 'next/router';\nimport React, { FC } from 'react';\nimport { settings } from 'utils/config';\nimport APP_ROUTES from 'utils/routes';\nimport { ExitPreview, Preview } from './preview-banner.styled';\n\ninterface Props {\n preview?: boolean;\n}\n\nconst PreviewBanner: FC<Props> = ({ preview }) => {\n const router = useRouter();\n\n if (!preview) return null;\n\n const exitPreview = () => {\n Cookies.remove(settings.previewCookieName);\n router.replace(APP_ROUTES.home);\n };\n\n return (\n <Preview>\n This page is a preview.{' '}\n <ExitPreview onClick={exitPreview}>Exit preview mode</ExitPreview>\n </Preview>\n );\n};\n\nPreviewBanner.defaultProps = {\n preview: false,\n};\n\nexport default PreviewBanner;\n","import { logger } from '@hatchd/utils';\nimport { PLAN_VERSION } from 'api/migration/constants';\nimport { DialogClose, DialogContent, DialogOverlay } from 'components/dialog';\nimport { usePlanAPI } from 'hooks/use-plan';\nimport { useUserProfileAPI } from 'hooks/use-user-profile';\nimport React, { FC, useEffect, useState } from 'react';\n\n/**\n * A dialog which will only render when the user is seeing a new PLAN_VERSION for the first time\n */\nconst UpgradeMessageDialog: FC = () => {\n const { useUserProfile, useUpdateUserProfile } = useUserProfileAPI();\n const { usePlans } = usePlanAPI();\n const { mutate: updateUserProfile } = useUpdateUserProfile();\n const { data: plans } = usePlans();\n const { data: userProfile } = useUserProfile();\n\n // Dialog state\n const [showDialog, setShowDialog] = useState<boolean>(false);\n\n const close = () => {\n setShowDialog(false);\n\n // Update the user object to the latest app version\n if (userProfile?.data) {\n logger.log(`Updating latest acknowledged version to \"${PLAN_VERSION}\"`);\n updateUserProfile({\n ...userProfile.data,\n latestAcknowledgedVersion: PLAN_VERSION,\n });\n }\n };\n\n // Open the dialog if the user has a plan and the last version they acknowledged does not match the current PLAN_VERSION\n useEffect(() => {\n if (\n plans !== undefined &&\n plans.data.length !== 0 &&\n userProfile !== undefined &&\n userProfile?.data.latestAcknowledgedVersion !== PLAN_VERSION\n ) {\n logger.info('Show upgrade message, user has not seen the latest version');\n setShowDialog(true);\n }\n }, [plans, userProfile]);\n\n return (\n <DialogOverlay isOpen={showDialog} onDismiss={close} aria-label=''>\n <DialogContent aria-label={`My Bushfire Plan Version ${PLAN_VERSION}`}>\n The My Bushfire Plan website and app have been updated to help you make\n your bushfire plan even more effective. There are new features, more\n resources, and more information throughout to help you make a fireproof\n plan. Create or review your plan now.\n <DialogClose onClick={close}>Close</DialogClose>\n </DialogContent>\n </DialogOverlay>\n );\n};\n\nexport default UpgradeMessageDialog;\n","import { hideVisually, rem } from 'polished';\nimport styled, { createGlobalStyle, css } from 'styled-components';\n\nexport const GlobalStyles = createGlobalStyle`\n :root {\n /**\n Disable the reach warning that styles are not imported.\n Reference: https://reach.tech/styling/\n */\n --reach-combobox: 1;\n --reach-dialog: 1;\n --reach-menu-button: 1;\n --reach-alert-dialog: 1;\n --header-height: ${rem(80)};\n --focus-color: ${({ theme }) => theme.colors.palette.redDark};\n\n ${({ theme }) => theme.mediaQueries.medium} {\n --header-height: ${rem(140)};\n }\n }\n\n * {\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n &::before,\n &::after {\n box-sizing: inherit;\n }\n }\n\n html,\n body {\n margin: 0;\n padding: 0;\n color: ${({ theme }) => theme.colors.text};\n font-weight: normal;\n font-family: 'Roboto Condensed', sans-serif;\n background-color: ${({ theme }) => theme.colors.background};\n }\n\n body {\n margin-top: var(--body-offset);\n }\n\n main {\n background-color: #222;\n }\n\n label {\n font-weight: 700;\n }\n\n a {\n color: currentColor;\n\n &:hover {\n text-decoration: none;\n }\n }\n\n :focus-visible {\n outline: 0;\n box-shadow: inset 0 0 0 2px ${({ theme }) =>\n theme.colors.palette\n .white}, 0 0 0 2px var(--focus-color), 0 0 8px var(--focus-color);\n }\n`;\n\nexport const SkipNav = styled.a.attrs({\n id: 'skip-nav',\n href: '#maincontent',\n})`\n color: ${({ theme }) => theme.colors.palette.redDark};\n background-color: ${({ theme }) => theme.colors.background};\n ${{ ...hideVisually() }}\n\n &:focus {\n z-index: ${({ theme }) => theme.zIndex[5]};\n width: auto;\n height: auto;\n padding: 1rem;\n clip: auto;\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n`;\n\ninterface MainProps {\n background?: string | string[];\n dimBackground?: boolean;\n}\n\nexport const Main = styled.main<MainProps>`\n position: relative;\n z-index: ${({ theme }) => theme.zIndex[0]};\n display: flex;\n flex: 1 0 auto;\n flex-direction: column;\n\n &::before,\n &::after {\n position: absolute;\n left: 0;\n z-index: -1;\n display: ${({ background }) => (background ? 'block' : 'none')};\n width: 100%;\n content: '';\n }\n\n /* Background image */\n &::before {\n top: 0;\n height: 100%;\n background-color: ${({ theme }) => theme.colors.palette.greyDark};\n\n /* Handle background images, return if a string, loop and use media queries based on index if array,\n basically a ghetto version of what styled-system does :D */\n ${({ theme, background }) => {\n if (typeof background === 'string') {\n return css`\n background-image: url(${background});\n `;\n } else {\n return background?.map((item, index) => {\n if (index === 0) {\n return css`\n background-image: url(${item});\n `;\n }\n\n return css`\n ${Object.values(theme.mediaQueries)[index - 1]} {\n background-image: url(${item});\n }\n `;\n });\n }\n }}\n\n background-attachment: fixed;\n background-position: center bottom;\n background-repeat: no-repeat;\n background-size: cover;\n opacity: ${({ dimBackground }) => (dimBackground ? 0.5 : 1)};\n }\n`;\n","import { logger } from '@hatchd/utils';\nimport { ReactComponent as AlertIcon } from 'assets/icons/icon-alert.svg';\nimport {\n AlertDialogActionsWrapper,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogLabel,\n AlertDialogOverlay,\n} from 'components/alert-dialog';\nimport Button from 'components/button';\nimport Footer from 'components/footer';\nimport Header from 'components/header';\nimport PlanControls, { PlanControlOptions } from 'components/plan-controls';\nimport { derivePlanTitle } from 'components/plan-summary/utils';\nimport PreviewBanner from 'components/preview-banner';\nimport UpgradeMessageDialog from 'components/upgrade-message-dialog';\nimport useAuth from 'hooks/use-auth';\nimport { usePlanAPI } from 'hooks/use-plan';\nimport { useSiteSettings } from 'hooks/use-siteSettings';\nimport dynamic from 'next/dynamic';\nimport { useRouter } from 'next/router';\nimport {\n FC,\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useQueryClient } from 'react-query';\nimport { logCreatePlan, logDismissPlan } from 'services/analytics';\nimport { useStore } from 'store';\nimport { getPlanLink } from 'utils/helpers';\nimport { getPlanStepId } from 'utils/plan-helpers';\nimport APP_ROUTES from 'utils/routes';\nimport { ContentWrapper, GlobalStyles, Main, SkipNav } from './layout.styled';\n\n// Dynamically import components not needed right away\nconst SingleUseDialog = dynamic(() => import('components/single-use-dialog'));\n\nexport type Props = {\n preview?: boolean;\n mainBackground?: string | string[];\n dimBackground?: boolean;\n showPlanControls?: boolean | PlanControlOptions;\n showEditControls?: boolean;\n afterMainContent?: ReactElement;\n};\n\nconst Layout: FC<Props> = ({\n preview,\n children,\n mainBackground,\n showPlanControls = false,\n showEditControls = false,\n dimBackground = false,\n afterMainContent,\n}) => {\n const { siteSettings } = useSiteSettings();\n const router = useRouter();\n const queryClient = useQueryClient();\n const { loading, isAuthenticated, isAnonymous } = useAuth();\n const [getPlanId, setPlanId] = useStore((state) => [\n state.getPlanId,\n state.setPlanId,\n ]);\n const getPlanDraftDirtyFlag = useStore(\n (state) => state.getPlanDraftDirtyFlag\n );\n const getPlanDraft = useStore((state) => state.getPlanDraft);\n const navigation = useStore((state) => state.navigation);\n const clearStore = useStore((state) => state.clearStore);\n const [planType, planStep] = useStore((state) => [\n state.plan.draft.type,\n state.progress.planStep,\n ]);\n const { usePlans, useCreatePlan, useUpsertPlan } = usePlanAPI();\n const createRemotePlan = useCreatePlan();\n const updateRemotePlan = useUpsertPlan();\n const { data: remotePlanData } = usePlans();\n\n const [showClosePlannerModal, setShowClosePlannerModal] = useState(false);\n /** Ref to the least destructive action (the dismiss action) */\n const cancelActionRef = useRef<HTMLButtonElement | null>(null);\n\n /** User decides to continue working on the plan. */\n const handleContinueEditing = () => setShowClosePlannerModal(false);\n\n /** User decides to stop working on the plan. Plan & survey resets. */\n const handleLeaveWithoutSaving = useCallback(() => {\n // Need to clear the store _after_ navigation, otherwise\n // it will contain the data of the last response the user was on\n // due to the `unMountEffect` getting triggered.\n router.push(APP_ROUTES.home).then(() => {\n clearStore();\n });\n }, [clearStore, router]);\n\n /** Determines the routes based on the plan type the user is on. */\n const planRoute = useMemo(() => getPlanLink(planType), [planType]);\n\n /** Backlink used for PlanControls */\n const backLink = useMemo(() => {\n const storedBacklink = navigation.backLink;\n if (storedBacklink) {\n return storedBacklink;\n }\n if (planRoute) {\n return `${planRoute.plan}?step=${planStep}`;\n } else {\n // eslint-disable-next-line no-script-url -- Unlikely fallback.\n return 'javascript:history.back()';\n }\n }, [navigation, planRoute, planStep]);\n\n const showDefaultNav = !showPlanControls && !showEditControls;\n\n const createPlan = useCallback(async () => {\n const currentDraft = getPlanDraft();\n const newPlanName = derivePlanTitle(\n currentDraft,\n remotePlanData?.data || []\n );\n try {\n const res = await createRemotePlan.mutateAsync({\n plan: { ...currentDraft, name: newPlanName },\n });\n const planId = res!.data.planDataWithMetadata.id;\n setPlanId(planId);\n // Log if this is the first save of the plan\n logCreatePlan(currentDraft.type, currentDraft);\n } catch (error) {\n logger.error('Error creating plan', error);\n }\n }, [createRemotePlan, getPlanDraft, remotePlanData?.data, setPlanId]);\n\n const savePlan = useCallback(async () => {\n const currentDraft = getPlanDraft();\n const currentPlanId = getPlanId();\n const isPlanDirty = getPlanDraftDirtyFlag();\n\n if (!isPlanDirty) {\n logger.log('Layout: Clean, nothing to save');\n return;\n }\n\n logger.info('Layout: Dirty, saving!');\n\n try {\n await updateRemotePlan.mutateAsync({\n id: currentPlanId,\n plan: currentDraft,\n });\n } catch (error) {\n logger.error('Error updating plan', error);\n }\n }, [getPlanDraft, getPlanDraftDirtyFlag, getPlanId, updateRemotePlan]);\n\n /** User clicks 'Save & Exit' */\n const handleSaveClick = useCallback(async () => {\n // All users (anon and registered):\n // - If there is a user session and no plan id, create a plan\n // Registered users:\n // - Save the plan\n // - Go to plan summary\n // Anon users:\n // - Save the plan\n // - Go to sign up page\n\n //? NOTE:\n //? To ensure we have the latest store state, we need to create/save the plan\n //? after the page transition (`router.push`).\n\n // REGISTERED USERS\n // If they have a plan, auto-save it.\n // Otherwise, create it at that point.\n if (planRoute && !loading && isAuthenticated && !isAnonymous) {\n router.push(planRoute.summary).then(() => {\n // get the plan id after redirect to ensure the correct plan is show in summary\n const currentPlanId = getPlanId();\n if (currentPlanId) {\n savePlan();\n }\n });\n }\n\n // ANONYMOUS USERS\n if (!loading && isAuthenticated && isAnonymous) {\n const controls = `widthEditControls=true`;\n router\n .push(\n `${APP_ROUTES.users.signUp}/?${controls}`,\n APP_ROUTES.users.signUp\n )\n .then(async () => {\n const currentPlanId = getPlanId();\n if (currentPlanId) {\n await savePlan();\n } else {\n await createPlan();\n }\n });\n }\n }, [\n createPlan,\n getPlanId,\n isAnonymous,\n isAuthenticated,\n loading,\n planRoute,\n router,\n savePlan,\n ]);\n\n /** User clicks 'X', trying to close the planner. */\n const handleDismissClick = useCallback(() => {\n const planDraft = getPlanDraft();\n logDismissPlan(\n planStep,\n getPlanStepId(planStep, planDraft.type),\n planDraft\n );\n\n // REGISTERED USERS\n // - With current plan: move to summary and save.\n // - Without current plan: move to summary.\n if (!loading && isAuthenticated && !isAnonymous) {\n if (planRoute) {\n router.push(planRoute.summary).then(async () => {\n const currentPlanId = getPlanId();\n if (currentPlanId) {\n await savePlan();\n }\n });\n }\n }\n\n // ANONYMOUS USERS\n // Anon users: Show modal with actions.\n // Exception: step 9 goes to summary!\n if (!loading && isAuthenticated && isAnonymous) {\n if (planRoute && planStep === 9) {\n router.push(planRoute.summary);\n } else {\n setShowClosePlannerModal(true);\n }\n }\n }, [\n getPlanDraft,\n getPlanId,\n isAnonymous,\n isAuthenticated,\n loading,\n planRoute,\n planStep,\n router,\n savePlan,\n ]);\n\n useEffect(() => {\n // Reset all plan & survey data if the user becomes\n // unauthenticaed for whatever reason.\n if (!loading && !isAuthenticated) {\n logger.info('Not authenticated. Clearing store');\n queryClient.clear();\n clearStore();\n }\n }, [clearStore, isAuthenticated, loading, queryClient]);\n\n return (\n <>\n <GlobalStyles />\n <SkipNav>Skip to content</SkipNav>\n <PreviewBanner preview={preview} />\n <ContentWrapper>\n {showDefaultNav && <Header nav={siteSettings.nav.header} />}\n <Main\n id='maincontent'\n background={mainBackground}\n dimBackground={dimBackground}\n >\n {children}\n </Main>\n {afterMainContent}\n {showDefaultNav && <Footer nav={siteSettings.nav.footer} />}\n {showPlanControls && (\n <PlanControls\n onDismiss={handleDismissClick}\n onSave={handleSaveClick}\n options={showPlanControls}\n />\n )}\n {showEditControls && <PlanControls backLink={backLink} />}\n\n {showClosePlannerModal && (\n <AlertDialogOverlay leastDestructiveRef={cancelActionRef}>\n <AlertDialogContent>\n <AlertDialogLabel>Your plan will be lost</AlertDialogLabel>\n <AlertDialogDescription>\n You're about to close your bushfire plan. Without saving, all\n your changes will be lost.\n </AlertDialogDescription>\n <AlertDialogActionsWrapper>\n <Button onClick={handleContinueEditing} ref={cancelActionRef}>\n Continue editing\n </Button>\n <Button onClick={handleSaveClick}>Save</Button>\n <Button variant='secondary' onClick={handleLeaveWithoutSaving}>\n Leave without saving\n </Button>\n </AlertDialogActionsWrapper>\n </AlertDialogContent>\n </AlertDialogOverlay>\n )}\n </ContentWrapper>\n {/* Gotcha, if the copy for this needs to be updated and shown to users who may have already seen it, the storageKey will need to be updated */}\n <SingleUseDialog\n storageKey='firstTimeEmergencyDialog'\n title={\n <>\n <AlertIcon aria-hidden /> Important\n </>\n }\n >\n This website does not provide bushfire warnings and alerts. Please visit{' '}\n {/* eslint-disable-next-line react/jsx-no-target-blank */}\n <a href='https://www.emergency.wa.gov.au/' target='_blank'>\n emergency.wa.gov.au\n </a>{' '}\n for official warnings and current information for bushfires, storms,\n cyclones and floods.\n </SingleUseDialog>\n {/* Upgrade message dialog */}\n <UpgradeMessageDialog />\n </>\n );\n};\n\nexport default Layout;\n","import { hideVisually } from 'polished';\nimport styled, { css } from 'styled-components';\n\nexport const VisuallyHidden = styled.span`\n ${hideVisually()};\n`;\n\nexport const Reveal = () => css`\n position: unset;\n width: unset;\n height: unset;\n margin: unset;\n padding: unset;\n overflow: unset;\n white-space: unset;\n clip: unset;\n`;\n\nexport const Visible = styled.div`\n ${Reveal()}\n`;\n","import React, { FC } from 'react';\nimport { VisuallyHidden } from './hide-visually.styled';\n\ninterface Props extends React.HTMLAttributes<any> {\n as?: keyof JSX.IntrinsicElements | React.ComponentType<any>;\n}\n\n/**\n * Component that \"visually hides\" the content from the UI for a11y purposes.\n * See: https://css-tricks.com/inclusively-hidden/\n */\nexport const HideVisually: FC<Props> = ({ children, as, ...props }) => (\n <VisuallyHidden as={as} {...props}>\n {children}\n </VisuallyHidden>\n);\n","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","import React from 'react'\n\nexport const HeadManagerContext: React.Context<{\n updateHead?: (state: any) => void\n mountedInstances?: any\n updateScripts?: (state: any) => void\n scripts?: any\n}> = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n HeadManagerContext.displayName = 'HeadManagerContext'\n}\n","import objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","import Link, { LinkProps } from 'next/link';\nimport React, { FC } from 'react';\nimport { BackLinkStyled } from './back-link.styles';\n\ninterface Props extends React.PropsWithChildren<LinkProps> {\n onClick?: () => void;\n}\n\nconst BackLink: FC<Props> = ({ onClick, children, ...linkProps }) => {\n return (\n <Link {...linkProps} passHref>\n <BackLinkStyled onClick={onClick}>{children}</BackLinkStyled>\n </Link>\n );\n};\n\nexport default BackLink;\n","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","import { PlanData, PlanDataTypeEnum, PlanDataWithMetadata } from 'api/client';\nimport { getPlanTitle } from 'utils/helpers';\n\nexport function getPageTitle(\n type: PlanDataTypeEnum,\n complete: boolean\n): string {\n let planName: string = '';\n if (type === PlanDataTypeEnum.Leave) planName = 'Leave Early';\n if (type === PlanDataTypeEnum.Stay) planName = 'Stay and Defend';\n\n if (complete) {\n return `My ${planName} plan`;\n } else {\n return planName;\n }\n}\n\nexport function derivePlanTitle(\n thisPlan: PlanData,\n allPlans: PlanDataWithMetadata[]\n): string {\n const numberOfPlansOfType = allPlans.filter(\n ({ plan }) => plan.type === thisPlan.type\n ).length;\n\n const baseTitle = getPlanTitle(thisPlan.type);\n\n if (numberOfPlansOfType === 0) {\n return baseTitle;\n }\n\n return `${baseTitle} ${numberOfPlansOfType + 1}`;\n}\n\nexport function getIntro(type: PlanDataTypeEnum): string {\n return type === PlanDataTypeEnum.Leave\n ? 'Because you have answered no or unsure your safest bushfire plan is to:'\n : 'Because you answered yes to all questions, it seems you are committed to the high risk plan:';\n}\n\n// H/T Noel @ Adapptor\nexport function getPlanPDFName(planType: PlanDataTypeEnum | undefined) {\n switch (planType) {\n case PlanDataTypeEnum.Stay:\n return 'DFES-StayAndDefendPlan';\n case PlanDataTypeEnum.Leave:\n return 'DFES-LeaveEarlyPlan';\n default:\n return 'DFES-Plan';\n }\n}\n\nexport function getLetterFromIndex(index: number) {\n const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');\n let result = '';\n\n if (index >= alphabet.length) {\n // IF index is higher then the number of letters in alphabet\n // Then form some grouping e.g. 1A, 1B, 2A etc\n const groupCount = Math.floor(index / alphabet.length);\n const remainder = index - groupCount * alphabet.length;\n result = `${groupCount}${alphabet[remainder].toUpperCase()}`;\n } else {\n result = alphabet[index].toUpperCase();\n }\n return result;\n}\n","import { useRef, createElement, useContext, useEffect } from 'react';\nimport { DialogOverlay, DialogContent } from '@reach/dialog';\nimport { useId } from '@reach/auto-id';\nimport { forwardRefWithAs, useForkedRef, makeId, getOwnerDocument, createNamedContext } from '@reach/utils';\nimport invariant from 'invariant';\nimport PropTypes from 'prop-types';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nvar AlertDialogContext = /*#__PURE__*/createNamedContext(\"AlertDialogContext\", {}); ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * AlertDialogOverlay\r\n *\r\n * Low-level component if you need more control over the styles or rendering of\r\n * the dialog overlay. In the following example we use the AlertDialogOverlay\r\n * and AlertDialogContent to have more control over the styles.\r\n *\r\n * Note: You must render an `AlertDialogContent` inside.\r\n *\r\n * @see Docs https://reach.tech/alert-dialog#alertdialogoverlay\r\n */\n\nvar AlertDialogOverlay = /*#__PURE__*/forwardRefWithAs(function AlertDialogOverlay(_ref, forwardedRef) {\n var leastDestructiveRef = _ref.leastDestructiveRef,\n props = _objectWithoutPropertiesLoose(_ref, [\"leastDestructiveRef\"]);\n\n var ownRef = useRef(null);\n var ref = useForkedRef(forwardedRef, ownRef);\n var id = useId(props.id);\n var labelId = id ? makeId(\"alert-dialog\", id) : undefined;\n var descriptionId = id ? makeId(\"alert-dialog-description\", id) : undefined;\n return createElement(AlertDialogContext.Provider, {\n value: {\n labelId: labelId,\n descriptionId: descriptionId,\n overlayRef: ownRef,\n leastDestructiveRef: leastDestructiveRef\n }\n }, createElement(DialogOverlay, Object.assign({}, props, {\n ref: ref,\n \"data-reach-alert-dialog-overlay\": true,\n initialFocusRef: leastDestructiveRef\n })));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n AlertDialogOverlay.displayName = \"AlertDialogOverlay\";\n AlertDialogOverlay.propTypes = {\n isOpen: PropTypes.bool,\n onDismiss: PropTypes.func,\n leastDestructiveRef: function leastDestructiveRef() {\n return null;\n },\n children: PropTypes.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * AlertDialogContent\r\n *\r\n * Low-level component if you need more control over the styles or rendering of\r\n * the dialog content.\r\n *\r\n * Note: Must be a child of `AlertDialogOverlay`.\r\n *\r\n * Note: You only need to use this when you are also styling\r\n * `AlertDialogOverlay`, otherwise you can use the high-level `AlertDialog`\r\n * component and pass the props to it.\r\n *\r\n * @see Docs https://reach.tech/alert-dialog#alertdialogcontent\r\n */\n\n\nvar AlertDialogContent = /*#__PURE__*/forwardRefWithAs(function AlertDialogContent(_ref2, forwardedRef) {\n var children = _ref2.children,\n props = _objectWithoutPropertiesLoose(_ref2, [\"children\"]);\n\n var _React$useContext = useContext(AlertDialogContext),\n descriptionId = _React$useContext.descriptionId,\n labelId = _React$useContext.labelId,\n leastDestructiveRef = _React$useContext.leastDestructiveRef,\n overlayRef = _React$useContext.overlayRef;\n\n useEffect(function () {\n var ownerDocument = getOwnerDocument(overlayRef.current);\n\n if (labelId) {\n !ownerDocument.getElementById(labelId) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"@reach/alert-dialog: You must render a `<AlertDialogLabel>`\\n inside an `<AlertDialog/>`.\") : invariant(false) : void 0;\n }\n\n !leastDestructiveRef ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"@reach/alert-dialog: You must provide a `leastDestructiveRef` to\\n `<AlertDialog>` or `<AlertDialogOverlay/>`. Please see\\n https://ui.reach.tech/alert-dialog/#alertdialogoverlay-leastdestructiveref\") : invariant(false) : void 0; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [labelId, leastDestructiveRef]);\n return createElement(DialogContent // The element that contains all elements of the dialog, including the\n // alert message and any dialog buttons, has role alertdialog.\n // https://www.w3.org/TR/wai-aria-practices-1.2/#alertdialog\n , Object.assign({\n // The element that contains all elements of the dialog, including the\n // alert message and any dialog buttons, has role alertdialog.\n // https://www.w3.org/TR/wai-aria-practices-1.2/#alertdialog\n role: \"alertdialog\",\n \"aria-describedby\": descriptionId,\n \"aria-labelledby\": props[\"aria-label\"] ? undefined : labelId\n }, props, {\n ref: forwardedRef,\n \"data-reach-alert-dialong-content\": true,\n \"data-reach-alert-dialog-content\": true\n }), children);\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n AlertDialogContent.displayName = \"AlertDialogContent\";\n AlertDialogContent.propTypes = {\n children: PropTypes.node\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * AlertDialogLabel\r\n *\r\n * The first thing ready by screen readers when the dialog opens, usually the\r\n * title of the dialog like \"Warning!\" or \"Please confirm!\".\r\n *\r\n * This is required. The `AlertDialog` will throw an error if no label is\r\n * rendered.\r\n *\r\n * @see Docs https://reach.tech/alert-dialog#alertdialoglabel\r\n */\n\n\nvar AlertDialogLabel = /*#__PURE__*/forwardRefWithAs(function (_ref3, forwardedRef) {\n var _ref3$as = _ref3.as,\n Comp = _ref3$as === void 0 ? \"div\" : _ref3$as,\n props = _objectWithoutPropertiesLoose(_ref3, [\"as\"]);\n\n var _React$useContext2 = useContext(AlertDialogContext),\n labelId = _React$useContext2.labelId;\n\n return createElement(Comp, Object.assign({}, props, {\n ref: forwardedRef,\n id: labelId,\n \"data-reach-alert-dialog-label\": true\n }));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n AlertDialogLabel.displayName = \"AlertDialogLabel\";\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * AlertDialogDescription\r\n *\r\n * Additional content read by screen readers, usually a longer description\r\n * about what you need from the user like \"This action is permanent, are you\r\n * sure?\" etc.\r\n *\r\n * @see Docs https://reach.tech/alert-dialog#alertdialogdescription\r\n * @param props\r\n */\n\n\nvar AlertDialogDescription = /*#__PURE__*/forwardRefWithAs(function AlertDialogDescription(_ref4, forwardedRef) {\n var _ref4$as = _ref4.as,\n Comp = _ref4$as === void 0 ? \"div\" : _ref4$as,\n props = _objectWithoutPropertiesLoose(_ref4, [\"as\"]);\n\n var _React$useContext3 = useContext(AlertDialogContext),\n descriptionId = _React$useContext3.descriptionId;\n\n return createElement(Comp, Object.assign({}, props, {\n ref: forwardedRef,\n id: descriptionId,\n \"data-reach-alert-dialog-description\": true\n }));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n AlertDialogDescription.displayName = \"AlertDialogDescription\";\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * AlertDialog\r\n *\r\n * High-level component to render an alert dialog.\r\n *\r\n * @see Docs https://reach.tech/alert-dialog#alertdialog\r\n * @param props\r\n */\n\n\nvar AlertDialog = /*#__PURE__*/forwardRefWithAs(function AlertDialog(_ref5, forwardedRef) {\n var id = _ref5.id,\n isOpen = _ref5.isOpen,\n onDismiss = _ref5.onDismiss,\n leastDestructiveRef = _ref5.leastDestructiveRef,\n props = _objectWithoutPropertiesLoose(_ref5, [\"id\", \"isOpen\", \"onDismiss\", \"leastDestructiveRef\"]);\n\n return createElement(AlertDialogOverlay, Object.assign({}, {\n isOpen: isOpen,\n onDismiss: onDismiss,\n leastDestructiveRef: leastDestructiveRef,\n id: id\n }), createElement(AlertDialogContent, Object.assign({\n ref: forwardedRef\n }, props)));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n AlertDialog.displayName = \"AlertDialog\";\n AlertDialog.propTypes = {\n isOpen: PropTypes.bool,\n onDismiss: PropTypes.func,\n leastDestructiveRef: function leastDestructiveRef() {\n return null;\n },\n children: PropTypes.node\n };\n}\n\nexport { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogLabel, AlertDialogOverlay };\n//# sourceMappingURL=alert-dialog.esm.js.map\n","import {\n AlertDialog as ReachAlertDialog,\n AlertDialogContent as ReachAlertDialogContent,\n AlertDialogDescription as ReachAlertDialogDescription,\n AlertDialogLabel as ReachAlertDialogLabel,\n AlertDialogOverlay as ReachAlertDialogOverlay,\n} from '@reach/alert-dialog';\nimport { StyledButton } from 'components/button';\nimport {\n BaseDialogContentStyles,\n DialogContentStyles,\n DialogOverlayStyles,\n} from 'components/dialog';\nimport { H4 } from 'components/headings';\nimport { rem } from 'polished';\nimport styled from 'styled-components';\n\n/**\n * NOTE:\n * Every dialog must render an `AlertDialogLabel` so the screen reader knows\n * what to say about the dialog. If an `AlertDialogDescription` is also rendered,\n * the screen reader will also announce that. If you render more than these two\n * elements and some buttons, the screen reader might not announce it so it's important\n * to keep the content inside of `AlertDialogLabel` and `AlertDialogDescription`.\n */\n\nconst AlertDialog = styled(ReachAlertDialog)`\n ${BaseDialogContentStyles}\n`;\n\nexport const AlertDialogOverlay = styled(ReachAlertDialogOverlay)`\n ${DialogOverlayStyles}\n`;\n\nexport const AlertDialogContent = styled(ReachAlertDialogContent)`\n ${DialogContentStyles}\n\n max-width: ${rem(320)};\n text-align: center;\n`;\n\nexport const AlertDialogLabel = styled(H4).attrs({\n as: ReachAlertDialogLabel,\n})`\n color: ${({ theme }) => theme.colors.palette.black};\n`;\n\nexport const AlertDialogDescription = styled(ReachAlertDialogDescription)`\n margin-bottom: ${rem(30)};\n`;\n\nexport const AlertDialogActionsWrapper = styled.div`\n display: inline-flex;\n flex-direction: column;\n\n ${StyledButton} {\n margin-top: ${rem(20)};\n }\n`;\n\nexport default AlertDialog;\n","import produce from 'immer';\nimport { Contact, Place, PlanData } from '../client';\n\n/**\n * The migration tool does not discern between Leave and Stay plan types. The reason for this, is\n * that Stay plans may actually become Leave plans if the user chooses to. Preferably, we won't lose\n * any data throughout the migration.\n */\nexport function migrate(plan: PlanData) {\n const updatedPlan = produce(plan, (draft) => {\n draft.version = 2;\n if (plan.whenToLeave) {\n draft.whenToLeaveWithSelections = {\n selections: [],\n notes: plan.whenToLeave,\n };\n }\n\n const place = getPlaceToGo(plan);\n if (place) {\n draft.whereToGoOptions = { places: [place] };\n }\n\n if (plan.whoToCall?.first || plan.whoToCall?.second) {\n const firstContact: Contact[] = plan.whoToCall.first\n ? [plan.whoToCall.first]\n : [];\n const secondContact: Contact[] = plan.whoToCall.second\n ? [plan.whoToCall.second]\n : [];\n draft.whoToCallOptions = {\n contacts: [...firstContact, ...secondContact],\n };\n }\n\n if (plan.whatToTake?.items) {\n draft.whatToTakeAndWhereToStore = {\n items: plan.whatToTake.items,\n kitLocation: '',\n acknowledged: false,\n };\n }\n\n if (plan.backup || plan.shelter) {\n draft.backupAndShelter = {\n nooneHome: { notes: plan.backup, selections: [] },\n guests: { selections: [] },\n shelter: { notes: plan.shelter, selections: [] },\n };\n }\n\n // Incomplete these as the migration requires the user to update the new fields and recomplete the plan\n draft.completed = false;\n draft.completionAcknowledged = false;\n });\n return updatedPlan;\n}\n\nfunction getPlaceToGo(plan: PlanData): Place | undefined {\n if (plan.whereToGo) {\n const nameOfPlaceToGo: string | undefined = plan.whereToGo.text[0];\n const wayToGetThere: string | undefined = plan.whereToGo.text[1];\n if (nameOfPlaceToGo || wayToGetThere) {\n const place: Place = {\n name: nameOfPlaceToGo || undefined,\n routes: wayToGetThere ? [wayToGetThere] : undefined,\n };\n\n return place;\n }\n }\n\n return undefined;\n}\n","import { PlanData } from '../client';\nimport { PLAN_VERSION } from './constants';\nimport { migrate as migrateV1toV2 } from './v1tov2';\n\nexport interface MigrationSuccessPayload {\n type: 'migrated';\n plan: PlanData;\n stepsToMigrate: number;\n}\nexport interface MigrationNotRequiredPayload {\n type: 'not-required';\n version: number;\n}\nexport interface MigrationFailedPayload {\n type: 'migration-failed';\n plan: PlanData;\n toVersion: number;\n failedStep: number;\n}\n\nexport interface PlanDataMigrationError {\n failedVersion: number;\n}\n\nexport function migratePlan(\n plan: PlanData,\n steps: number = 0\n):\n | MigrationSuccessPayload\n | MigrationNotRequiredPayload\n | MigrationFailedPayload {\n switch (plan.version) {\n case 1: {\n const leaveEarly = migrateV1toV2(plan);\n return migratePlan(leaveEarly, steps + 1);\n }\n // When we get a version 3\n /**\n * case 2:\n * return migratePlan({...plan, plan: {...plan.plan, version: 3}}, appPlanVersion, steps + 1)\n */\n case PLAN_VERSION:\n return steps === 0\n ? { type: 'not-required', version: plan.version }\n : { type: 'migrated', plan, stepsToMigrate: steps };\n default:\n return {\n type: 'migration-failed',\n plan: { ...plan, completed: false, completionAcknowledged: false },\n toVersion: PLAN_VERSION,\n failedStep: steps,\n };\n }\n}\n","\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ō\":\"O\",\"ō\":\"o\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"Ə\":\"E\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"Lj\":\"LJ\",\"lj\":\"lj\",\"Nj\":\"NJ\",\"nj\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"ə\":\"e\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"ѝ\":\"u\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"Ғ\":\"GH\",\"ғ\":\"gh\",\"Қ\":\"KH\",\"қ\":\"kh\",\"Ң\":\"NG\",\"ң\":\"ng\",\"Ү\":\"UE\",\"ү\":\"ue\",\"Ұ\":\"U\",\"ұ\":\"u\",\"Һ\":\"H\",\"һ\":\"h\",\"Ә\":\"AE\",\"ә\":\"ae\",\"Ө\":\"OE\",\"ө\":\"oe\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"Ẁ\":\"W\",\"ẁ\":\"w\",\"Ẃ\":\"W\",\"ẃ\":\"w\",\"Ẅ\":\"W\",\"ẅ\":\"w\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₸\":\"kazakhstani tenge\",\"₹\":\"indian rupee\",\"₺\":\"turkish lira\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\"}')\n var locales = JSON.parse('{\"de\":{\"Ä\":\"AE\",\"ä\":\"ae\",\"Ö\":\"OE\",\"ö\":\"oe\",\"Ü\":\"UE\",\"ü\":\"ue\"},\"vi\":{\"Đ\":\"D\",\"đ\":\"d\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var slug = string.split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n return result + (locale[ch] || charMap[ch] || ch)\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '')\n // trim leading/trailing spaces\n .trim()\n // convert spaces to replacement character\n // also remove duplicates of the replacement character\n .replace(new RegExp('[\\\\s' + replacement + ']+', 'g'), replacement)\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n if (options.strict) {\n // remove anything besides letters, numbers, and the replacement char\n slug = slug\n .replace(new RegExp('[^a-zA-Z0-9' + replacement + ']', 'g'), '')\n // remove duplicates of the replacement character\n .replace(new RegExp('[\\\\s' + replacement + ']+', 'g'), replacement)\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n for (var key in customMap) {\n charMap[key] = customMap[key]\n }\n }\n\n return replace\n}))\n","import { logger } from '@hatchd/utils';\nimport {\n EmailRequest,\n ErrorResponse,\n FetchResult,\n PlanData,\n PlanDataWithMetadata,\n PlansApi,\n} from 'api/client';\nimport { migratePlan } from 'api/migration/PlanMigrator';\nimport { useEffect, useRef, useState } from 'react';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\nimport { toast } from 'react-toastify';\nimport { logPlanMigration } from 'services/analytics';\nimport { useStore } from 'store';\nimport { settings } from 'utils/config';\nimport { isDevBuild } from 'utils/helpers';\nimport statusMessages from 'utils/status-messages';\nimport { PLAN_VERSION } from '../api/migration/constants';\nimport useAuth from './use-auth';\n\nexport const queryKeys = {\n usePlans: 'planData',\n};\n\nexport function usePlanAPI() {\n const { token, isRegisteredUser } = useAuth();\n const [set, getPlanId, getPlanDraftDirtyFlag] = useStore((state) => [\n state.set,\n state.getPlanId,\n state.getPlanDraftDirtyFlag,\n ]);\n const [ready, setReady] = useState(false);\n const plansApi = useRef<PlansApi>();\n const queryClient = useQueryClient();\n\n // Set up the plans api when the token is available\n useEffect(() => {\n if (token) {\n plansApi.current = new PlansApi({ apiKey: token });\n setReady(true);\n }\n }, [token]);\n\n // Note the \"!\" operator is used here as all methods are only ever called once the token is available via the \"enabled\" option\n const planHelpers = {\n // Get the users plans\n getPlans: async () => {\n return plansApi.current?.getPlans(PLAN_VERSION)!;\n },\n // Check if the email has any plans\n checkPlans: ({ email }: { email: string }) => {\n return plansApi.current?.checkPlans(email)!;\n },\n // Create a new plan\n createPlan: ({ plan }: { plan: PlanData }) => {\n return plansApi.current?.createPlan(plan, PLAN_VERSION)!;\n },\n // Update an existing plan\n upsertPlan: ({ id, plan }: { id: string; plan: PlanData }) => {\n return plansApi.current?.upsertPlan(id, plan, PLAN_VERSION)!;\n },\n };\n\n /**\n * Get the list of plans for the signed in user\n */\n const usePlans = () =>\n useQuery<FetchResult<PlanDataWithMetadata[]>>(\n queryKeys.usePlans,\n planHelpers.getPlans,\n {\n enabled: isRegisteredUser && ready,\n retry: false,\n refetchOnWindowFocus: false,\n onSuccess: (data) => {\n const currentPlanId = getPlanId();\n const isPlanDirty = getPlanDraftDirtyFlag();\n\n // Populate the remote draft plan data locally if no data currently exists\n // `data` can be undefined despite what the types say.\n if (\n data?.data.length &&\n isRegisteredUser &&\n !currentPlanId &&\n !isPlanDirty\n ) {\n // Grab the selected plan ID from localStorage\n const selectedPlanId = localStorage.getItem(\n settings.planIdStorageKey\n );\n\n // From the fetched plans get the data for the selected plan OR the first one in the list if localStorage value is undefined\n const planData =\n data?.data.find((plan) => plan.id === selectedPlanId) ||\n data.data[0];\n\n // Migrate the plan data received to ensure it's in the correct format for the current \"PLAN_VERSION\"\n const migratedPlan = migratePlan(planData.plan);\n\n // Log analytics when a plan has migrated successfully\n if (\n migratedPlan.type === 'migrated' ||\n migratedPlan.type === 'migration-failed'\n ) {\n logPlanMigration(migratedPlan, planData.plan.version);\n }\n\n const draft =\n migratedPlan.type === 'migrated'\n ? migratedPlan.plan\n : planData.plan;\n\n set(({ plan }) => {\n plan.planId = planData.id;\n plan.plans = [planData];\n plan.draft = draft;\n plan.updated = planData.updated;\n }, 'saveRemotePlanToDraft');\n\n // Persist selected plan ID to localStorage\n localStorage.setItem(settings.planIdStorageKey, planData.id);\n }\n },\n onError: (error: any) => {\n if (error?.hasOwnProperty('silent')) return;\n logger.error('usePlans error', error);\n toast.error(statusMessages.plan.fetchError);\n },\n }\n );\n\n /**\n * Check if the signed in user has at least one plan\n */\n const useHasExistingPlan = () => {\n const currentPlanId = getPlanId();\n return !!currentPlanId;\n };\n\n /**\n * Check if the email address passed in has any plans\n */\n const useCheckPlanForEmail = () => useMutation(planHelpers.checkPlans);\n\n /**\n * Create a new plan\n */\n const useCreatePlan = () =>\n useMutation(planHelpers.createPlan, {\n onSuccess: () => {\n queryClient.invalidateQueries(queryKeys.usePlans);\n\n // Reset the dirty flag after updating the remote plan\n set(({ plan }) => {\n plan.isDirty = false;\n plan.updated = '';\n }, 'resetPlanDraftDirtyFlag');\n },\n onError: () => {\n toast.error(statusMessages.plan.createError);\n },\n });\n\n /**\n * Update an existing plan\n */\n const useUpsertPlan = () =>\n useMutation(planHelpers.upsertPlan, {\n onSuccess: () => {\n if (isRegisteredUser) {\n toast.success(statusMessages.plan.saveSuccess);\n queryClient.prefetchQuery(queryKeys.usePlans, planHelpers.getPlans);\n\n // Reset the dirty flag after updating the remote plan\n set(({ plan }) => {\n plan.isDirty = false;\n }, 'resetPlanDraftDirtyFlag');\n }\n },\n onError: () => {\n if (isRegisteredUser) {\n toast.error(statusMessages.plan.saveError);\n } else {\n toast.error(statusMessages.plan.saveErrorUnauthenticated);\n }\n },\n });\n\n return {\n usePlans,\n useHasExistingPlan,\n useCheckPlanForEmail,\n useCreatePlan,\n useUpsertPlan,\n };\n}\n\n// TODO: Move to above hook?\nexport async function emailPlan(token: string, data: EmailRequest) {\n try {\n await new PlansApi({ apiKey: token }).emailPlan(data);\n return Promise.resolve({\n message: 'Email has been sent.',\n success: true,\n });\n } catch (error) {\n // `emailPlan` returns a Response promise when it throws...\n const response: ErrorResponse = await error.json();\n let message =\n 'An error has occurred while sending the email. Please try again later.';\n\n if (isDevBuild()) {\n message += ` Server error: ${response.message}`;\n }\n\n return Promise.reject({\n message,\n success: false,\n });\n }\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport { getDefaultState } from './mutation';\nimport { notifyManager } from './notifyManager';\nimport { Subscribable } from './subscribable';\nimport { getStatusProps } from './utils'; // TYPES\n\n// CLASS\nexport var MutationObserver = /*#__PURE__*/function (_Subscribable) {\n _inheritsLoose(MutationObserver, _Subscribable);\n\n function MutationObserver(client, options) {\n var _this;\n\n _this = _Subscribable.call(this) || this;\n _this.client = client;\n\n _this.setOptions(options);\n\n _this.bindMethods();\n\n _this.updateResult();\n\n return _this;\n }\n\n var _proto = MutationObserver.prototype;\n\n _proto.bindMethods = function bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n };\n\n _proto.setOptions = function setOptions(options) {\n this.options = this.client.defaultMutationOptions(options);\n };\n\n _proto.onUnsubscribe = function onUnsubscribe() {\n if (!this.listeners.length) {\n var _this$currentMutation;\n\n (_this$currentMutation = this.currentMutation) == null ? void 0 : _this$currentMutation.removeObserver(this);\n }\n };\n\n _proto.onMutationUpdate = function onMutationUpdate(action) {\n this.updateResult(); // Determine which callbacks to trigger\n\n var notifyOptions = {\n listeners: true\n };\n\n if (action.type === 'success') {\n notifyOptions.onSuccess = true;\n } else if (action.type === 'error') {\n notifyOptions.onError = true;\n }\n\n this.notify(notifyOptions);\n };\n\n _proto.getCurrentResult = function getCurrentResult() {\n return this.currentResult;\n };\n\n _proto.reset = function reset() {\n this.currentMutation = undefined;\n this.updateResult();\n this.notify({\n listeners: true\n });\n };\n\n _proto.mutate = function mutate(variables, options) {\n this.mutateOptions = options;\n\n if (this.currentMutation) {\n this.currentMutation.removeObserver(this);\n }\n\n this.currentMutation = this.client.getMutationCache().build(this.client, _extends({}, this.options, {\n variables: typeof variables !== 'undefined' ? variables : this.options.variables\n }));\n this.currentMutation.addObserver(this);\n return this.currentMutation.execute();\n };\n\n _proto.updateResult = function updateResult() {\n var state = this.currentMutation ? this.currentMutation.state : getDefaultState();\n this.currentResult = _extends({}, state, getStatusProps(state.status), {\n mutate: this.mutate,\n reset: this.reset\n });\n };\n\n _proto.notify = function notify(options) {\n var _this2 = this;\n\n notifyManager.batch(function () {\n // First trigger the mutate callbacks\n if (_this2.mutateOptions) {\n if (options.onSuccess) {\n _this2.mutateOptions.onSuccess == null ? void 0 : _this2.mutateOptions.onSuccess(_this2.currentResult.data, _this2.currentResult.variables, _this2.currentResult.context);\n _this2.mutateOptions.onSettled == null ? void 0 : _this2.mutateOptions.onSettled(_this2.currentResult.data, null, _this2.currentResult.variables, _this2.currentResult.context);\n } else if (options.onError) {\n _this2.mutateOptions.onError == null ? void 0 : _this2.mutateOptions.onError(_this2.currentResult.error, _this2.currentResult.variables, _this2.currentResult.context);\n _this2.mutateOptions.onSettled == null ? void 0 : _this2.mutateOptions.onSettled(undefined, _this2.currentResult.error, _this2.currentResult.variables, _this2.currentResult.context);\n }\n } // Then trigger the listeners\n\n\n if (options.listeners) {\n _this2.listeners.forEach(function (listener) {\n listener(_this2.currentResult);\n });\n }\n });\n };\n\n return MutationObserver;\n}(Subscribable);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport { notifyManager } from '../core/notifyManager';\nimport { noop, parseMutationArgs } from '../core/utils';\nimport { MutationObserver } from '../core/mutationObserver';\nimport { useQueryClient } from './QueryClientProvider';\nimport { useIsMounted } from './useIsMounted'; // HOOK\n\nexport function useMutation(arg1, arg2, arg3) {\n var isMounted = useIsMounted();\n var options = parseMutationArgs(arg1, arg2, arg3);\n var queryClient = useQueryClient(); // Create mutation observer\n\n var observerRef = React.useRef();\n var observer = observerRef.current || new MutationObserver(queryClient, options);\n observerRef.current = observer; // Update options\n\n if (observer.hasListeners()) {\n observer.setOptions(options);\n }\n\n var _React$useState = React.useState(function () {\n return observer.getCurrentResult();\n }),\n currentResult = _React$useState[0],\n setCurrentResult = _React$useState[1]; // Subscribe to the observer\n\n\n React.useEffect(function () {\n return observer.subscribe(notifyManager.batchCalls(function (result) {\n if (isMounted()) {\n setCurrentResult(result);\n }\n }));\n }, [observer, isMounted]);\n var mutate = React.useCallback(function (variables, mutateOptions) {\n observer.mutate(variables, mutateOptions).catch(noop);\n }, [observer]);\n\n if (currentResult.error && observer.options.useErrorBoundary) {\n throw currentResult.error;\n }\n\n return _extends({}, currentResult, {\n mutate: mutate,\n mutateAsync: currentResult.mutate\n });\n}","import { rem, size } from 'polished';\nimport styled from 'styled-components';\n\nexport const BackLinkStyled = styled.a`\n position: relative;\n display: inline-flex;\n align-items: center;\n margin-bottom: ${rem(30)};\n margin-left: ${rem(14)};\n color: ${({ theme }) => theme.colors.palette.black};\n font-weight: bold;\n text-decoration: none;\n\n &::before {\n --translate: ${rem(-10)};\n\n ${size(12)};\n\n display: block;\n border: 2px solid currentColor;\n border-top: 0;\n border-right: 0;\n transform: translateX(var(--translate)) rotate(45deg);\n transition: 0.25s ease-in-out;\n content: '';\n }\n\n &:hover::before {\n --translate: ${rem(-14)};\n }\n`;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport { getStatusProps, isServer, isValidTimeout, noop, replaceEqualDeep, shallowEqualObjects, timeUntilStale } from './utils';\nimport { notifyManager } from './notifyManager';\nimport { focusManager } from './focusManager';\nimport { Subscribable } from './subscribable';\nexport var QueryObserver = /*#__PURE__*/function (_Subscribable) {\n _inheritsLoose(QueryObserver, _Subscribable);\n\n function QueryObserver(client, options) {\n var _this;\n\n _this = _Subscribable.call(this) || this;\n _this.client = client;\n _this.options = options;\n _this.initialDataUpdateCount = 0;\n _this.initialErrorUpdateCount = 0;\n _this.trackedProps = [];\n\n _this.bindMethods();\n\n _this.setOptions(options);\n\n return _this;\n }\n\n var _proto = QueryObserver.prototype;\n\n _proto.bindMethods = function bindMethods() {\n this.remove = this.remove.bind(this);\n this.refetch = this.refetch.bind(this);\n };\n\n _proto.onSubscribe = function onSubscribe() {\n if (this.listeners.length === 1) {\n this.updateQuery();\n this.currentQuery.addObserver(this);\n\n if (this.willFetchOnMount()) {\n this.executeFetch();\n }\n\n this.updateResult();\n this.updateTimers();\n }\n };\n\n _proto.onUnsubscribe = function onUnsubscribe() {\n if (!this.listeners.length) {\n this.destroy();\n }\n };\n\n _proto.willLoadOnMount = function willLoadOnMount() {\n return this.options.enabled !== false && !this.currentQuery.state.dataUpdatedAt && !(this.currentQuery.state.status === 'error' && this.options.retryOnMount === false);\n };\n\n _proto.willRefetchOnMount = function willRefetchOnMount() {\n return this.options.enabled !== false && this.currentQuery.state.dataUpdatedAt > 0 && (this.options.refetchOnMount === 'always' || this.options.refetchOnMount !== false && this.isStale());\n };\n\n _proto.willFetchOnMount = function willFetchOnMount() {\n return this.willLoadOnMount() || this.willRefetchOnMount();\n };\n\n _proto.willFetchOnReconnect = function willFetchOnReconnect() {\n return this.options.enabled !== false && (this.options.refetchOnReconnect === 'always' || this.options.refetchOnReconnect !== false && this.isStale());\n };\n\n _proto.willFetchOnWindowFocus = function willFetchOnWindowFocus() {\n return this.options.enabled !== false && (this.options.refetchOnWindowFocus === 'always' || this.options.refetchOnWindowFocus !== false && this.isStale());\n };\n\n _proto.willFetchOptionally = function willFetchOptionally() {\n return this.options.enabled !== false && this.isStale();\n };\n\n _proto.isStale = function isStale() {\n return this.currentQuery.isStaleByTime(this.options.staleTime);\n };\n\n _proto.destroy = function destroy() {\n this.listeners = [];\n this.clearTimers();\n this.currentQuery.removeObserver(this);\n };\n\n _proto.setOptions = function setOptions(options) {\n this.previousOptions = this.options;\n this.options = this.client.defaultQueryObserverOptions(options);\n\n if (typeof this.options.enabled !== 'undefined' && typeof this.options.enabled !== 'boolean') {\n throw new Error('Expected enabled to be a boolean');\n } // Keep previous query key if the user does not supply one\n\n\n if (!this.options.queryKey) {\n this.options.queryKey = this.previousOptions.queryKey;\n }\n\n var didUpdateQuery = this.updateQuery();\n var optionalFetch;\n var updateResult;\n var updateStaleTimeout;\n var updateRefetchInterval; // If we subscribed to a new query, optionally fetch and update result and timers\n\n if (didUpdateQuery) {\n optionalFetch = true;\n updateResult = true;\n updateStaleTimeout = true;\n updateRefetchInterval = true;\n } // Optionally fetch if the query became enabled\n\n\n if (this.options.enabled !== false && this.previousOptions.enabled === false) {\n optionalFetch = true;\n } // Update result if the select function changed\n\n\n if (this.options.select !== this.previousOptions.select) {\n updateResult = true;\n } // Update stale interval if needed\n\n\n if (this.options.enabled !== this.previousOptions.enabled || this.options.staleTime !== this.previousOptions.staleTime) {\n updateStaleTimeout = true;\n } // Update refetch interval if needed\n\n\n if (this.options.enabled !== this.previousOptions.enabled || this.options.refetchInterval !== this.previousOptions.refetchInterval) {\n updateRefetchInterval = true;\n } // Fetch only if there are subscribers\n\n\n if (this.hasListeners()) {\n if (optionalFetch) {\n this.optionalFetch();\n }\n }\n\n if (updateResult) {\n this.updateResult();\n } // Update intervals only if there are subscribers\n\n\n if (this.hasListeners()) {\n if (updateStaleTimeout) {\n this.updateStaleTimeout();\n }\n\n if (updateRefetchInterval) {\n this.updateRefetchInterval();\n }\n }\n };\n\n _proto.getCurrentResult = function getCurrentResult() {\n return this.currentResult;\n };\n\n _proto.getTrackedCurrentResult = function getTrackedCurrentResult() {\n return this.trackedCurrentResult;\n };\n\n _proto.getNextResult = function getNextResult(options) {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n var unsubscribe = _this2.subscribe(function (result) {\n if (!result.isFetching) {\n unsubscribe();\n\n if (result.isError && (options == null ? void 0 : options.throwOnError)) {\n reject(result.error);\n } else {\n resolve(result);\n }\n }\n });\n });\n };\n\n _proto.getCurrentQuery = function getCurrentQuery() {\n return this.currentQuery;\n };\n\n _proto.remove = function remove() {\n this.client.getQueryCache().remove(this.currentQuery);\n };\n\n _proto.refetch = function refetch(options) {\n return this.fetch(options);\n };\n\n _proto.fetch = function fetch(fetchOptions) {\n var _this3 = this;\n\n return this.executeFetch(fetchOptions).then(function () {\n _this3.updateResult();\n\n return _this3.currentResult;\n });\n };\n\n _proto.optionalFetch = function optionalFetch() {\n if (this.willFetchOptionally()) {\n this.executeFetch();\n }\n };\n\n _proto.executeFetch = function executeFetch(fetchOptions) {\n // Make sure we reference the latest query as the current one might have been removed\n this.updateQuery(); // Fetch\n\n var promise = this.currentQuery.fetch(this.options, fetchOptions);\n\n if (!(fetchOptions == null ? void 0 : fetchOptions.throwOnError)) {\n promise = promise.catch(noop);\n }\n\n return promise;\n };\n\n _proto.updateStaleTimeout = function updateStaleTimeout() {\n var _this4 = this;\n\n this.clearStaleTimeout();\n\n if (isServer || this.currentResult.isStale || !isValidTimeout(this.options.staleTime)) {\n return;\n }\n\n var time = timeUntilStale(this.currentResult.dataUpdatedAt, this.options.staleTime); // The timeout is sometimes triggered 1 ms before the stale time expiration.\n // To mitigate this issue we always add 1 ms to the timeout.\n\n var timeout = time + 1;\n this.staleTimeoutId = setTimeout(function () {\n if (!_this4.currentResult.isStale) {\n _this4.updateResult();\n }\n }, timeout);\n };\n\n _proto.updateRefetchInterval = function updateRefetchInterval() {\n var _this5 = this;\n\n this.clearRefetchInterval();\n\n if (isServer || this.options.enabled === false || !isValidTimeout(this.options.refetchInterval)) {\n return;\n }\n\n this.refetchIntervalId = setInterval(function () {\n if (_this5.options.refetchIntervalInBackground || focusManager.isFocused()) {\n _this5.executeFetch();\n }\n }, this.options.refetchInterval);\n };\n\n _proto.updateTimers = function updateTimers() {\n this.updateStaleTimeout();\n this.updateRefetchInterval();\n };\n\n _proto.clearTimers = function clearTimers() {\n this.clearStaleTimeout();\n this.clearRefetchInterval();\n };\n\n _proto.clearStaleTimeout = function clearStaleTimeout() {\n clearTimeout(this.staleTimeoutId);\n this.staleTimeoutId = undefined;\n };\n\n _proto.clearRefetchInterval = function clearRefetchInterval() {\n clearInterval(this.refetchIntervalId);\n this.refetchIntervalId = undefined;\n };\n\n _proto.getNewResult = function getNewResult() {\n var _this$previousQueryRe;\n\n var state = this.currentQuery.state;\n var isFetching = state.isFetching,\n status = state.status;\n var isPreviousData = false;\n var isPlaceholderData = false;\n var data;\n var dataUpdatedAt = state.dataUpdatedAt; // Optimistically set status to loading if we will start fetching\n\n if (!this.hasListeners() && this.willFetchOnMount()) {\n isFetching = true;\n\n if (!dataUpdatedAt) {\n status = 'loading';\n }\n } // Keep previous data if needed\n\n\n if (this.options.keepPreviousData && !state.dataUpdateCount && ((_this$previousQueryRe = this.previousQueryResult) == null ? void 0 : _this$previousQueryRe.isSuccess) && status !== 'error') {\n data = this.previousQueryResult.data;\n dataUpdatedAt = this.previousQueryResult.dataUpdatedAt;\n status = this.previousQueryResult.status;\n isPreviousData = true;\n } // Select data if needed\n else if (this.options.select && typeof state.data !== 'undefined') {\n var _this$currentResultSt, _this$previousOptions;\n\n // Use the previous select result if the query data and select function did not change\n if (this.currentResult && state.data === ((_this$currentResultSt = this.currentResultState) == null ? void 0 : _this$currentResultSt.data) && this.options.select === ((_this$previousOptions = this.previousOptions) == null ? void 0 : _this$previousOptions.select)) {\n data = this.currentResult.data;\n } else {\n data = this.options.select(state.data);\n\n if (this.options.structuralSharing !== false) {\n var _this$currentResult;\n\n data = replaceEqualDeep((_this$currentResult = this.currentResult) == null ? void 0 : _this$currentResult.data, data);\n }\n }\n } // Use query data\n else {\n data = state.data;\n } // Show placeholder data if needed\n\n\n if (typeof this.options.placeholderData !== 'undefined' && typeof data === 'undefined' && status === 'loading') {\n var placeholderData = typeof this.options.placeholderData === 'function' ? this.options.placeholderData() : this.options.placeholderData;\n\n if (typeof placeholderData !== 'undefined') {\n status = 'success';\n data = placeholderData;\n isPlaceholderData = true;\n }\n }\n\n var result = _extends({}, getStatusProps(status), {\n data: data,\n dataUpdatedAt: dataUpdatedAt,\n error: state.error,\n errorUpdatedAt: state.errorUpdatedAt,\n failureCount: state.fetchFailureCount,\n isFetched: state.dataUpdateCount > 0 || state.errorUpdateCount > 0,\n isFetchedAfterMount: state.dataUpdateCount > this.initialDataUpdateCount || state.errorUpdateCount > this.initialErrorUpdateCount,\n isFetching: isFetching,\n isLoadingError: status === 'error' && state.dataUpdatedAt === 0,\n isPlaceholderData: isPlaceholderData,\n isPreviousData: isPreviousData,\n isRefetchError: status === 'error' && state.dataUpdatedAt !== 0,\n isStale: this.isStale(),\n refetch: this.refetch,\n remove: this.remove\n });\n\n return result;\n };\n\n _proto.shouldNotifyListeners = function shouldNotifyListeners(prevResult, result) {\n var _this6 = this;\n\n var _this$options = this.options,\n notifyOnChangeProps = _this$options.notifyOnChangeProps,\n notifyOnChangePropsExclusions = _this$options.notifyOnChangePropsExclusions;\n\n if (prevResult === result) {\n return false;\n }\n\n if (!prevResult) {\n return true;\n }\n\n if (!notifyOnChangeProps && !notifyOnChangePropsExclusions) {\n return true;\n }\n\n var keys = Object.keys(result);\n var includedProps = notifyOnChangeProps === 'tracked' ? this.trackedProps : notifyOnChangeProps;\n\n var _loop = function _loop(i) {\n var key = keys[i];\n var changed = prevResult[key] !== result[key];\n var isIncluded = includedProps == null ? void 0 : includedProps.some(function (x) {\n return x === key;\n });\n var isExcluded = notifyOnChangePropsExclusions == null ? void 0 : notifyOnChangePropsExclusions.some(function (x) {\n return x === key;\n });\n\n if (changed) {\n if (notifyOnChangePropsExclusions && isExcluded) {\n return \"continue\";\n }\n\n if (!notifyOnChangeProps || isIncluded || notifyOnChangeProps === 'tracked' && _this6.trackedProps.length === 0) {\n return {\n v: true\n };\n }\n }\n };\n\n for (var i = 0; i < keys.length; i++) {\n var _ret = _loop(i);\n\n if (_ret === \"continue\") continue;\n if (typeof _ret === \"object\") return _ret.v;\n }\n\n return false;\n };\n\n _proto.updateResult = function updateResult(action) {\n var _this7 = this;\n\n var prevResult = this.currentResult;\n var result = this.getNewResult(); // Keep reference to the current state on which the current result is based on\n\n this.currentResultState = this.currentQuery.state; // Only update if something has changed\n\n if (shallowEqualObjects(result, prevResult)) {\n return;\n }\n\n this.currentResult = result;\n\n if (this.options.notifyOnChangeProps === 'tracked') {\n var addTrackedProps = function addTrackedProps(prop) {\n if (!_this7.trackedProps.includes(prop)) {\n _this7.trackedProps.push(prop);\n }\n };\n\n this.trackedCurrentResult = {};\n Object.keys(result).forEach(function (key) {\n Object.defineProperty(_this7.trackedCurrentResult, key, {\n configurable: false,\n enumerable: true,\n get: function get() {\n addTrackedProps(key);\n return result[key];\n }\n });\n });\n } // Determine which callbacks to trigger\n\n\n var notifyOptions = {\n cache: true\n };\n\n if ((action == null ? void 0 : action.type) === 'success') {\n notifyOptions.onSuccess = true;\n } else if ((action == null ? void 0 : action.type) === 'error') {\n notifyOptions.onError = true;\n }\n\n if (this.shouldNotifyListeners(prevResult, result)) {\n notifyOptions.listeners = true;\n }\n\n this.notify(notifyOptions);\n };\n\n _proto.updateQuery = function updateQuery() {\n var prevQuery = this.currentQuery;\n var query = this.client.getQueryCache().build(this.client, this.options);\n\n if (query === prevQuery) {\n return false;\n }\n\n this.previousQueryResult = this.currentResult;\n this.currentQuery = query;\n this.initialDataUpdateCount = query.state.dataUpdateCount;\n this.initialErrorUpdateCount = query.state.errorUpdateCount;\n\n if (this.hasListeners()) {\n prevQuery == null ? void 0 : prevQuery.removeObserver(this);\n this.currentQuery.addObserver(this);\n }\n\n return true;\n };\n\n _proto.onQueryUpdate = function onQueryUpdate(action) {\n this.updateResult(action);\n\n if (this.hasListeners()) {\n this.updateTimers();\n }\n };\n\n _proto.notify = function notify(notifyOptions) {\n var _this8 = this;\n\n notifyManager.batch(function () {\n // First trigger the configuration callbacks\n if (notifyOptions.onSuccess) {\n _this8.options.onSuccess == null ? void 0 : _this8.options.onSuccess(_this8.currentResult.data);\n _this8.options.onSettled == null ? void 0 : _this8.options.onSettled(_this8.currentResult.data, null);\n } else if (notifyOptions.onError) {\n _this8.options.onError == null ? void 0 : _this8.options.onError(_this8.currentResult.error);\n _this8.options.onSettled == null ? void 0 : _this8.options.onSettled(undefined, _this8.currentResult.error);\n } // Then trigger the listeners\n\n\n if (notifyOptions.listeners) {\n _this8.listeners.forEach(function (listener) {\n listener(_this8.currentResult);\n });\n } // Then the cache listeners\n\n\n if (notifyOptions.cache) {\n _this8.client.getQueryCache().notify(_this8.currentQuery);\n }\n });\n };\n\n return QueryObserver;\n}(Subscribable);","import React from 'react'; // CONTEXT\n\nfunction createValue() {\n var _isReset = false;\n return {\n clearReset: function clearReset() {\n _isReset = false;\n },\n reset: function reset() {\n _isReset = true;\n },\n isReset: function isReset() {\n return _isReset;\n }\n };\n}\n\nvar QueryErrorResetBoundaryContext = /*#__PURE__*/React.createContext(createValue()); // HOOK\n\nexport var useQueryErrorResetBoundary = function useQueryErrorResetBoundary() {\n return React.useContext(QueryErrorResetBoundaryContext);\n}; // COMPONENT\n\nexport var QueryErrorResetBoundary = function QueryErrorResetBoundary(_ref) {\n var children = _ref.children;\n var value = React.useMemo(function () {\n return createValue();\n }, []);\n return /*#__PURE__*/React.createElement(QueryErrorResetBoundaryContext.Provider, {\n value: value\n }, typeof children === 'function' ? children(value) : children);\n};","import React from 'react';\nimport { notifyManager } from '../core/notifyManager';\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary';\nimport { useQueryClient } from './QueryClientProvider';\nimport { useIsMounted } from './useIsMounted';\nexport function useBaseQuery(options, Observer) {\n var isMounted = useIsMounted();\n var queryClient = useQueryClient();\n var errorResetBoundary = useQueryErrorResetBoundary();\n var defaultedOptions = queryClient.defaultQueryObserverOptions(options); // Include callbacks in batch renders\n\n if (defaultedOptions.onError) {\n defaultedOptions.onError = notifyManager.batchCalls(defaultedOptions.onError);\n }\n\n if (defaultedOptions.onSuccess) {\n defaultedOptions.onSuccess = notifyManager.batchCalls(defaultedOptions.onSuccess);\n }\n\n if (defaultedOptions.onSettled) {\n defaultedOptions.onSettled = notifyManager.batchCalls(defaultedOptions.onSettled);\n }\n\n if (defaultedOptions.suspense) {\n // Always set stale time when using suspense to prevent\n // fetching again when directly re-mounting after suspense\n if (typeof defaultedOptions.staleTime !== 'number') {\n defaultedOptions.staleTime = 1000;\n } // Prevent retrying failed query if the error boundary has not been reset yet\n\n\n if (!errorResetBoundary.isReset()) {\n defaultedOptions.retryOnMount = false;\n }\n } // Create query observer\n\n\n var observerRef = React.useRef();\n var observer = observerRef.current || new Observer(queryClient, defaultedOptions);\n observerRef.current = observer; // Update options\n\n if (observer.hasListeners()) {\n observer.setOptions(defaultedOptions);\n }\n\n var currentResult = observer.getCurrentResult();\n\n var _React$useState = React.useState(currentResult),\n setCurrentResult = _React$useState[1]; // Subscribe to the observer\n\n\n React.useEffect(function () {\n errorResetBoundary.clearReset();\n return observer.subscribe(notifyManager.batchCalls(function (result) {\n if (isMounted()) {\n setCurrentResult(result);\n }\n }));\n }, [observer, errorResetBoundary, isMounted]); // Handle suspense\n\n if (observer.options.suspense || observer.options.useErrorBoundary) {\n if (observer.options.suspense && currentResult.isLoading) {\n errorResetBoundary.clearReset();\n var unsubscribe = observer.subscribe();\n throw observer.refetch().finally(unsubscribe);\n }\n\n if (currentResult.isError) {\n throw currentResult.error;\n }\n }\n\n return observer.options.notifyOnChangeProps === 'tracked' ? observer.getTrackedCurrentResult() : currentResult;\n}","import { QueryObserver } from '../core';\nimport { parseQueryArgs } from '../core/utils';\nimport { useBaseQuery } from './useBaseQuery'; // HOOK\n\nexport function useQuery(arg1, arg2, arg3) {\n var parsedOptions = parseQueryArgs(arg1, arg2, arg3);\n return useBaseQuery(parsedOptions, QueryObserver);\n}","import { logger } from '@hatchd/utils';\nimport { UpdateUserProfileRequest, UsersApi } from 'api/client';\nimport { useEffect, useRef, useState } from 'react';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\nimport { toast } from 'react-toastify';\nimport statusMessages from 'utils/status-messages';\nimport useAuth from './use-auth';\n\nexport const queryKey = 'userProfile';\n\nexport function useUserProfileAPI() {\n const { token, isRegisteredUser } = useAuth();\n const queryClient = useQueryClient();\n const [ready, setReady] = useState(false);\n const usersApi = useRef<UsersApi>();\n\n // Set up the users api when the token is available\n useEffect(() => {\n if (token) {\n usersApi.current = new UsersApi({ apiKey: token });\n setReady(true);\n }\n }, [token]);\n\n const getUserProfile = async () => usersApi.current?.getUserProfile();\n const updateUserProfile = async (data: UpdateUserProfileRequest) =>\n usersApi.current?.updateUserProfile(data);\n\n const useUserProfile = () =>\n useQuery(queryKey, getUserProfile, {\n enabled: isRegisteredUser && ready,\n retry: false,\n refetchOnWindowFocus: false,\n onError: (error: any) => {\n if (error?.hasOwnProperty('silent')) return;\n logger.error('useUserProfile', error);\n toast.error(statusMessages.auth.userProfileFetchError);\n },\n });\n\n const useUpdateUserProfile = (showToast: boolean = true) =>\n useMutation(updateUserProfile, {\n onSuccess: () => {\n queryClient.invalidateQueries(queryKey);\n if (showToast) {\n toast.success(statusMessages.auth.userProfileUpdateSuccess);\n }\n },\n onError: (error: any) => {\n if (error?.hasOwnProperty('silent')) return;\n logger.error('useUserProfile', error);\n toast.error(statusMessages.auth.userProfileUpdateError);\n },\n });\n\n return {\n useUserProfile,\n useUpdateUserProfile,\n };\n}\n","import { useContext, useState, useCallback, createElement, useMemo } from 'react';\nimport { createNamedContext, useForceUpdate, usePrevious, useIsomorphicLayoutEffect, noop } from '@reach/utils';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction createDescendantContext(name, initialValue) {\n if (initialValue === void 0) {\n initialValue = {};\n }\n\n var descendants = [];\n return createNamedContext(name, _extends({\n descendants: descendants,\n registerDescendant: noop,\n unregisterDescendant: noop\n }, initialValue));\n}\n/**\r\n * This hook registers our descendant by passing it into an array. We can then\r\n * search that array by to find its index when registering it in the component.\r\n * We use this for focus management, keyboard navigation, and typeahead\r\n * functionality for some components.\r\n *\r\n * The hook accepts the element node and (optionally) a key. The key is useful\r\n * if multiple descendants have identical text values and we need to\r\n * differentiate siblings for some reason.\r\n *\r\n * Our main goals with this are:\r\n * 1) maximum composability,\r\n * 2) minimal API friction\r\n * 3) SSR compatibility*\r\n * 4) concurrent safe\r\n * 5) index always up-to-date with the tree despite changes\r\n * 6) works with memoization of any component in the tree (hopefully)\r\n *\r\n * * As for SSR, the good news is that we don't actually need the index on the\r\n * server for most use-cases, as we are only using it to determine the order of\r\n * composed descendants for keyboard navigation. However, in the few cases where\r\n * this is not the case, we can require an explicit index from the app.\r\n */\n\n\nfunction useDescendant(descendant, context, indexProp) {\n var forceUpdate = useForceUpdate();\n\n var _React$useContext = useContext(context),\n registerDescendant = _React$useContext.registerDescendant,\n unregisterDescendant = _React$useContext.unregisterDescendant,\n descendants = _React$useContext.descendants; // This will initially return -1 because we haven't registered the descendant\n // on the first render. After we register, this will then return the correct\n // index on the following render and we will re-register descendants\n // so that everything is up-to-date before the user interacts with a\n // collection.\n\n\n var index = indexProp !== null && indexProp !== void 0 ? indexProp : descendants.findIndex(function (item) {\n return item.element === descendant.element;\n });\n var previousDescendants = usePrevious(descendants); // We also need to re-register descendants any time ANY of the other\n // descendants have changed. My brain was melting when I wrote this and it\n // feels a little off, but checking in render and using the result in the\n // effect's dependency array works well enough.\n\n var someDescendantsHaveChanged = descendants.some(function (descendant, index) {\n var _previousDescendants$;\n\n return descendant.element !== (previousDescendants === null || previousDescendants === void 0 ? void 0 : (_previousDescendants$ = previousDescendants[index]) === null || _previousDescendants$ === void 0 ? void 0 : _previousDescendants$.element);\n }); // Prevent any flashing\n\n useIsomorphicLayoutEffect(function () {\n if (!descendant.element) forceUpdate();\n registerDescendant(_extends({}, descendant, {\n index: index\n }));\n return function () {\n return unregisterDescendant(descendant.element);\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [forceUpdate, index, registerDescendant, someDescendantsHaveChanged, unregisterDescendant].concat(Object.values(descendant)));\n return index;\n}\n\nfunction useDescendantsInit() {\n return useState([]);\n}\n\nfunction useDescendants(ctx) {\n return useContext(ctx).descendants;\n}\n\nfunction DescendantProvider(_ref) {\n var Ctx = _ref.context,\n children = _ref.children,\n items = _ref.items,\n set = _ref.set;\n var registerDescendant = useCallback(function (_ref2) {\n var element = _ref2.element,\n explicitIndex = _ref2.index,\n rest = _objectWithoutPropertiesLoose(_ref2, [\"element\", \"index\"]);\n\n if (!element) {\n return;\n }\n\n set(function (items) {\n var newItems;\n\n if (explicitIndex != null) {\n newItems = [].concat(items, [_extends({}, rest, {\n element: element,\n index: explicitIndex\n })]);\n } else if (items.length === 0) {\n // If there are no items, register at index 0 and bail.\n newItems = [].concat(items, [_extends({}, rest, {\n element: element,\n index: 0\n })]);\n } else if (items.find(function (item) {\n return item.element === element;\n })) {\n // If the element is already registered, just use the same array\n newItems = items;\n } else {\n // When registering a descendant, we need to make sure we insert in\n // into the array in the same order that it appears in the DOM. So as\n // new descendants are added or maybe some are removed, we always know\n // that the array is up-to-date and correct.\n //\n // So here we look at our registered descendants and see if the new\n // element we are adding appears earlier than an existing descendant's\n // DOM node via `node.compareDocumentPosition`. If it does, we insert\n // the new element at this index. Because `registerDescendant` will be\n // called in an effect every time the descendants state value changes,\n // we should be sure that this index is accurate when descendent\n // elements come or go from our component.\n var index = items.findIndex(function (item) {\n if (!item.element || !element) {\n return false;\n } // Does this element's DOM node appear before another item in the\n // array in our DOM tree? If so, return true to grab the index at\n // this point in the array so we know where to insert the new\n // element.\n\n\n return Boolean(item.element.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING);\n });\n\n var newItem = _extends({}, rest, {\n element: element,\n index: index\n }); // If an index is not found we will push the element to the end.\n\n\n if (index === -1) {\n newItems = [].concat(items, [newItem]);\n } else {\n newItems = [].concat(items.slice(0, index), [newItem], items.slice(index));\n }\n }\n\n return newItems.map(function (item, index) {\n return _extends({}, item, {\n index: index\n });\n });\n });\n }, // set is a state setter initialized by the useDescendantsInit hook.\n // We can safely ignore the lint warning here because it will not change\n // between renders.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n var unregisterDescendant = useCallback(function (element) {\n if (!element) {\n return;\n }\n\n set(function (items) {\n return items.filter(function (item) {\n return element !== item.element;\n });\n });\n }, // set is a state setter initialized by the useDescendantsInit hook.\n // We can safely ignore the lint warning here because it will not change\n // between renders.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n return createElement(Ctx.Provider, {\n value: useMemo(function () {\n return {\n descendants: items,\n registerDescendant: registerDescendant,\n unregisterDescendant: unregisterDescendant\n };\n }, [items, registerDescendant, unregisterDescendant])\n }, children);\n}\n/**\r\n * Testing this as an abstraction for compound components that use keyboard\r\n * navigation. Hoping this will help us prevent bugs and mismatched behavior\r\n * across various components, but it may also prove to be too messy of an\r\n * abstraction in the end.\r\n *\r\n * Currently used in:\r\n * - Tabs\r\n * - Accordion\r\n *\r\n * @param context\r\n * @param options\r\n */\n\n\nfunction useDescendantKeyDown(context, options) {\n var _React$useContext2 = useContext(context),\n descendants = _React$useContext2.descendants;\n\n var callback = options.callback,\n currentIndex = options.currentIndex,\n filter = options.filter,\n _options$key = options.key,\n key = _options$key === void 0 ? \"index\" : _options$key,\n _options$orientation = options.orientation,\n orientation = _options$orientation === void 0 ? \"vertical\" : _options$orientation,\n _options$rotate = options.rotate,\n rotate = _options$rotate === void 0 ? true : _options$rotate,\n _options$rtl = options.rtl,\n rtl = _options$rtl === void 0 ? false : _options$rtl;\n var index = currentIndex !== null && currentIndex !== void 0 ? currentIndex : -1;\n return function handleKeyDown(event) {\n if (![\"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\", \"PageUp\", \"PageDown\", \"Home\", \"End\"].includes(event.key)) {\n return;\n } // If we use a filter function, we need to re-index our descendants array\n // so that filtered descendent elements aren't selected.\n\n\n var selectableDescendants = filter ? descendants.filter(filter) : descendants; // Current index should map to the updated array vs. the original\n // descendants array.\n\n if (filter) {\n index = selectableDescendants.findIndex(function (descendant) {\n return descendant.index === currentIndex;\n });\n } // We need some options for any of this to work!\n\n\n if (!selectableDescendants.length) {\n return;\n }\n\n function getNextOption() {\n var atBottom = index === selectableDescendants.length - 1;\n return atBottom ? rotate ? getFirstOption() : selectableDescendants[index] : selectableDescendants[(index + 1) % selectableDescendants.length];\n }\n\n function getPreviousOption() {\n var atTop = index === 0;\n return atTop ? rotate ? getLastOption() : selectableDescendants[index] : selectableDescendants[(index - 1 + selectableDescendants.length) % selectableDescendants.length];\n }\n\n function getFirstOption() {\n return selectableDescendants[0];\n }\n\n function getLastOption() {\n return selectableDescendants[selectableDescendants.length - 1];\n }\n\n switch (event.key) {\n case \"ArrowDown\":\n if (orientation === \"vertical\" || orientation === \"both\") {\n event.preventDefault();\n var next = getNextOption();\n callback(key === \"option\" ? next : next[key]);\n }\n\n break;\n\n case \"ArrowUp\":\n if (orientation === \"vertical\" || orientation === \"both\") {\n event.preventDefault();\n var prev = getPreviousOption();\n callback(key === \"option\" ? prev : prev[key]);\n }\n\n break;\n\n case \"ArrowLeft\":\n if (orientation === \"horizontal\" || orientation === \"both\") {\n event.preventDefault();\n var nextOrPrev = (rtl ? getNextOption : getPreviousOption)();\n callback(key === \"option\" ? nextOrPrev : nextOrPrev[key]);\n }\n\n break;\n\n case \"ArrowRight\":\n if (orientation === \"horizontal\" || orientation === \"both\") {\n event.preventDefault();\n var prevOrNext = (rtl ? getPreviousOption : getNextOption)();\n callback(key === \"option\" ? prevOrNext : prevOrNext[key]);\n }\n\n break;\n\n case \"PageUp\":\n event.preventDefault();\n var prevOrFirst = (event.ctrlKey ? getPreviousOption : getFirstOption)();\n callback(key === \"option\" ? prevOrFirst : prevOrFirst[key]);\n break;\n\n case \"Home\":\n event.preventDefault();\n var first = getFirstOption();\n callback(key === \"option\" ? first : first[key]);\n break;\n\n case \"PageDown\":\n event.preventDefault();\n var nextOrLast = (event.ctrlKey ? getNextOption : getLastOption)();\n callback(key === \"option\" ? nextOrLast : nextOrLast[key]);\n break;\n\n case \"End\":\n event.preventDefault();\n var last = getLastOption();\n callback(key === \"option\" ? last : last[key]);\n break;\n }\n };\n}\n\nexport { DescendantProvider, createDescendantContext, useDescendant, useDescendantKeyDown, useDescendants, useDescendantsInit };\n//# sourceMappingURL=descendants.esm.js.map\n","import { useRef, createElement } from 'react';\nimport { useForceUpdate, useIsomorphicLayoutEffect } from '@reach/utils';\nimport { createPortal } from 'react-dom';\n\n/**\r\n * Welcome to @reach/portal!\r\n *\r\n * Creates and appends a DOM node to the end of `document.body` and renders a\r\n * React tree into it. Useful for rendering a natural React element hierarchy\r\n * with a different DOM hierarchy to prevent parent styles from clipping or\r\n * hiding content (for popovers, dropdowns, and modals).\r\n *\r\n * @see Docs https://reach.tech/portal\r\n * @see Source https://github.com/reach/reach-ui/tree/main/packages/portal\r\n * @see React https://reactjs.org/docs/portals.html\r\n */\n/**\r\n * Portal\r\n *\r\n * @see Docs https://reach.tech/portal#portal\r\n */\n\nvar Portal = function Portal(_ref) {\n var children = _ref.children,\n _ref$type = _ref.type,\n type = _ref$type === void 0 ? \"reach-portal\" : _ref$type;\n var mountNode = useRef(null);\n var portalNode = useRef(null);\n var forceUpdate = useForceUpdate();\n useIsomorphicLayoutEffect(function () {\n // This ref may be null when a hot-loader replaces components on the page\n if (!mountNode.current) return; // It's possible that the content of the portal has, itself, been portaled.\n // In that case, it's important to append to the correct document element.\n\n var ownerDocument = mountNode.current.ownerDocument;\n portalNode.current = ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.createElement(type);\n ownerDocument.body.appendChild(portalNode.current);\n forceUpdate();\n return function () {\n if (portalNode.current && portalNode.current.ownerDocument) {\n portalNode.current.ownerDocument.body.removeChild(portalNode.current);\n }\n };\n }, [type, forceUpdate]);\n return portalNode.current ? createPortal(children, portalNode.current) : createElement(\"span\", {\n ref: mountNode\n });\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n Portal.displayName = \"Portal\";\n} ////////////////////////////////////////////////////////////////////////////////\n\nexport default Portal;\nexport { Portal };\n//# sourceMappingURL=portal.esm.js.map\n","import React, { Component } from 'react'\n\nconst isServer = typeof window === 'undefined'\n\ntype State = JSX.Element[] | undefined\n\ntype SideEffectProps = {\n reduceComponentsToState: <T>(\n components: Array<React.ReactElement<any>>,\n props: T\n ) => State\n handleStateChange?: (state: State) => void\n headManager: any\n inAmpMode?: boolean\n}\n\nexport default class extends Component<SideEffectProps> {\n private _hasHeadManager: boolean\n\n emitChange = (): void => {\n if (this._hasHeadManager) {\n this.props.headManager.updateHead(\n this.props.reduceComponentsToState(\n [...this.props.headManager.mountedInstances],\n this.props\n )\n )\n }\n }\n\n constructor(props: any) {\n super(props)\n this._hasHeadManager =\n this.props.headManager && this.props.headManager.mountedInstances\n\n if (isServer && this._hasHeadManager) {\n this.props.headManager.mountedInstances.add(this)\n this.emitChange()\n }\n }\n componentDidMount() {\n if (this._hasHeadManager) {\n this.props.headManager.mountedInstances.add(this)\n }\n this.emitChange()\n }\n componentDidUpdate() {\n this.emitChange()\n }\n componentWillUnmount() {\n if (this._hasHeadManager) {\n this.props.headManager.mountedInstances.delete(this)\n }\n this.emitChange()\n }\n\n render() {\n return null\n }\n}\n","module.exports = require('./dist/client/link')\n","import React, { Children, useEffect } from 'react'\nimport { UrlObject } from 'url'\nimport {\n addBasePath,\n addLocale,\n getDomainLocale,\n isLocalURL,\n NextRouter,\n PrefetchOptions,\n resolveHref,\n} from '../next-server/lib/router/router'\nimport { useRouter } from './router'\nimport { useIntersection } from './use-intersection'\n\ntype Url = string | UrlObject\ntype RequiredKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? never : K\n}[keyof T]\ntype OptionalKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? K : never\n}[keyof T]\n\nexport type LinkProps = {\n href: Url\n as?: Url\n replace?: boolean\n scroll?: boolean\n shallow?: boolean\n passHref?: boolean\n prefetch?: boolean\n locale?: string | false\n}\ntype LinkPropsRequired = RequiredKeys<LinkProps>\ntype LinkPropsOptional = OptionalKeys<LinkProps>\n\nconst prefetched: { [cacheKey: string]: boolean } = {}\n\nfunction prefetch(\n router: NextRouter,\n href: string,\n as: string,\n options?: PrefetchOptions\n): void {\n if (typeof window === 'undefined' || !router) return\n if (!isLocalURL(href)) return\n // Prefetch the JSON page if asked (only in the client)\n // We need to handle a prefetch error here since we may be\n // loading with priority which can reject but we don't\n // want to force navigation since this is only a prefetch\n router.prefetch(href, as, options).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n // rethrow to show invalid URL errors\n throw err\n }\n })\n const curLocale =\n options && typeof options.locale !== 'undefined'\n ? options.locale\n : router && router.locale\n\n // Join on an invalid URI character\n prefetched[href + '%' + as + (curLocale ? '%' + curLocale : '')] = true\n}\n\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const { target } = event.currentTarget as HTMLAnchorElement\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\nfunction linkClicked(\n e: React.MouseEvent,\n router: NextRouter,\n href: string,\n as: string,\n replace?: boolean,\n shallow?: boolean,\n scroll?: boolean,\n locale?: string | false\n): void {\n const { nodeName } = e.currentTarget\n\n if (nodeName === 'A' && (isModifiedEvent(e) || !isLocalURL(href))) {\n // ignore click for browser’s default behavior\n return\n }\n\n e.preventDefault()\n\n // avoid scroll for urls with anchor refs\n if (scroll == null) {\n scroll = as.indexOf('#') < 0\n }\n\n // replace state instead of push if prop is present\n router[replace ? 'replace' : 'push'](href, as, {\n shallow,\n locale,\n scroll,\n }).then((success: boolean) => {\n if (!success) return\n if (scroll) {\n // FIXME: proper route announcing at Router level, not Link:\n document.body.focus()\n }\n })\n}\n\nfunction Link(props: React.PropsWithChildren<LinkProps>) {\n if (process.env.NODE_ENV !== 'production') {\n function createPropError(args: {\n key: string\n expected: string\n actual: string\n }) {\n return new Error(\n `Failed prop type: The prop \\`${args.key}\\` expects a ${args.expected} in \\`<Link>\\`, but got \\`${args.actual}\\` instead.` +\n (typeof window !== 'undefined'\n ? \"\\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n\n // TypeScript trick for type-guarding:\n const requiredPropsGuard: Record<LinkPropsRequired, true> = {\n href: true,\n } as const\n const requiredProps: LinkPropsRequired[] = Object.keys(\n requiredPropsGuard\n ) as LinkPropsRequired[]\n requiredProps.forEach((key: LinkPropsRequired) => {\n if (key === 'href') {\n if (\n props[key] == null ||\n (typeof props[key] !== 'string' && typeof props[key] !== 'object')\n ) {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key],\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _: never = key\n }\n })\n\n // TypeScript trick for type-guarding:\n const optionalPropsGuard: Record<LinkPropsOptional, true> = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true,\n } as const\n const optionalProps: LinkPropsOptional[] = Object.keys(\n optionalPropsGuard\n ) as LinkPropsOptional[]\n optionalProps.forEach((key: LinkPropsOptional) => {\n const valType = typeof props[key]\n\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: valType,\n })\n }\n } else if (key === 'locale') {\n if (props[key] && valType !== 'string') {\n throw createPropError({\n key,\n expected: '`string`',\n actual: valType,\n })\n }\n } else if (\n key === 'replace' ||\n key === 'scroll' ||\n key === 'shallow' ||\n key === 'passHref' ||\n key === 'prefetch'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _: never = key\n }\n })\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const hasWarned = React.useRef(false)\n if (props.prefetch && !hasWarned.current) {\n hasWarned.current = true\n console.warn(\n 'Next.js auto-prefetches automatically based on viewport. The prefetch attribute is no longer needed. More: https://err.sh/vercel/next.js/prefetch-true-deprecated'\n )\n }\n }\n const p = props.prefetch !== false\n\n const router = useRouter()\n const pathname = (router && router.pathname) || '/'\n\n const { href, as } = React.useMemo(() => {\n const [resolvedHref, resolvedAs] = resolveHref(pathname, props.href, true)\n return {\n href: resolvedHref,\n as: props.as\n ? resolveHref(pathname, props.as)\n : resolvedAs || resolvedHref,\n }\n }, [pathname, props.href, props.as])\n\n let { children, replace, shallow, scroll, locale } = props\n\n // Deprecated. Warning shown by propType check. If the children provided is a string (<Link>example</Link>) we wrap it in an <a> tag\n if (typeof children === 'string') {\n children = <a>{children}</a>\n }\n\n // This will return the first child, if multiple are provided it will throw an error\n const child: any = Children.only(children)\n const childRef: any = child && typeof child === 'object' && child.ref\n\n const [setIntersectionRef, isVisible] = useIntersection({\n rootMargin: '200px',\n })\n const setRef = React.useCallback(\n (el: Element) => {\n setIntersectionRef(el)\n if (childRef) {\n if (typeof childRef === 'function') childRef(el)\n else if (typeof childRef === 'object') {\n childRef.current = el\n }\n }\n },\n [childRef, setIntersectionRef]\n )\n useEffect(() => {\n const shouldPrefetch = isVisible && p && isLocalURL(href)\n const curLocale =\n typeof locale !== 'undefined' ? locale : router && router.locale\n const isPrefetched =\n prefetched[href + '%' + as + (curLocale ? '%' + curLocale : '')]\n if (shouldPrefetch && !isPrefetched) {\n prefetch(router, href, as, {\n locale: curLocale,\n })\n }\n }, [as, href, isVisible, locale, p, router])\n\n const childProps: {\n onMouseEnter?: React.MouseEventHandler\n onClick: React.MouseEventHandler\n href?: string\n ref?: any\n } = {\n ref: setRef,\n onClick: (e: React.MouseEvent) => {\n if (child.props && typeof child.props.onClick === 'function') {\n child.props.onClick(e)\n }\n if (!e.defaultPrevented) {\n linkClicked(e, router, href, as, replace, shallow, scroll, locale)\n }\n },\n }\n\n childProps.onMouseEnter = (e: React.MouseEvent) => {\n if (!isLocalURL(href)) return\n if (child.props && typeof child.props.onMouseEnter === 'function') {\n child.props.onMouseEnter(e)\n }\n prefetch(router, href, as, { priority: true })\n }\n\n // If child is an <a> tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user\n if (props.passHref || (child.type === 'a' && !('href' in child.props))) {\n const curLocale =\n typeof locale !== 'undefined' ? locale : router && router.locale\n\n const localeDomain = getDomainLocale(\n as,\n curLocale,\n router && router.locales,\n router && router.domainLocales\n )\n\n childProps.href =\n localeDomain ||\n addBasePath(addLocale(as, curLocale, router && router.defaultLocale))\n }\n\n return React.cloneElement(child, childProps)\n}\n\nexport default Link\n","var props = [\"bottom\", \"height\", \"left\", \"right\", \"top\", \"width\"];\n\nvar rectChanged = function rectChanged(a, b) {\n if (a === void 0) {\n a = {};\n }\n\n if (b === void 0) {\n b = {};\n }\n\n return props.some(function (prop) {\n return a[prop] !== b[prop];\n });\n};\n\nvar observedNodes = /*#__PURE__*/new Map();\nvar rafId;\n\nvar run = function run() {\n var changedStates = [];\n observedNodes.forEach(function (state, node) {\n var newRect = node.getBoundingClientRect();\n\n if (rectChanged(newRect, state.rect)) {\n state.rect = newRect;\n changedStates.push(state);\n }\n });\n changedStates.forEach(function (state) {\n state.callbacks.forEach(function (cb) {\n return cb(state.rect);\n });\n });\n rafId = window.requestAnimationFrame(run);\n};\n\nfunction observeRect(node, cb) {\n return {\n observe: function observe() {\n var wasEmpty = observedNodes.size === 0;\n\n if (observedNodes.has(node)) {\n observedNodes.get(node).callbacks.push(cb);\n } else {\n observedNodes.set(node, {\n rect: undefined,\n hasRectChanged: false,\n callbacks: [cb]\n });\n }\n\n if (wasEmpty) run();\n },\n unobserve: function unobserve() {\n var state = observedNodes.get(node);\n\n if (state) {\n // Remove the callback\n var index = state.callbacks.indexOf(cb);\n if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n if (!observedNodes.size) cancelAnimationFrame(rafId);\n }\n }\n };\n}\n\nexport default observeRect;\n//# sourceMappingURL=observe-rect.esm.js.map\n","import { useRef, useEffect, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport observeRect from '@reach/observe-rect';\nimport { isBoolean, isFunction, warning, useIsomorphicLayoutEffect } from '@reach/utils';\n\n/**\r\n * Welcome to @reach/rect!\r\n *\r\n * Measures DOM elements (aka. bounding client rect).\r\n *\r\n * @see getBoundingClientRect https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\r\n * @see Docs https://reach.tech/rect\r\n * @see Source https://github.com/reach/reach-ui/tree/main/packages/rect\r\n */\n\n/**\r\n * Rect\r\n *\r\n * @param props\r\n */\n\nvar Rect = function Rect(_ref) {\n var onChange = _ref.onChange,\n _ref$observe = _ref.observe,\n observe = _ref$observe === void 0 ? true : _ref$observe,\n children = _ref.children;\n var ref = useRef(null);\n var rect = useRect(ref, {\n observe: observe,\n onChange: onChange\n });\n return children({\n ref: ref,\n rect: rect\n });\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n Rect.displayName = \"Rect\";\n Rect.propTypes = {\n children: PropTypes.func.isRequired,\n observe: PropTypes.bool,\n onChange: PropTypes.func\n };\n}\n/**\r\n * useRect\r\n *\r\n * @param nodeRef\r\n * @param observe\r\n * @param onChange\r\n */\n\n\nfunction useRect(nodeRef, observeOrOptions, deprecated_onChange) {\n var observe;\n var onChange;\n\n if (isBoolean(observeOrOptions)) {\n observe = observeOrOptions;\n } else {\n var _observeOrOptions$obs;\n\n observe = (_observeOrOptions$obs = observeOrOptions === null || observeOrOptions === void 0 ? void 0 : observeOrOptions.observe) !== null && _observeOrOptions$obs !== void 0 ? _observeOrOptions$obs : true;\n onChange = observeOrOptions === null || observeOrOptions === void 0 ? void 0 : observeOrOptions.onChange;\n }\n\n if (isFunction(deprecated_onChange)) {\n onChange = deprecated_onChange;\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(function () {\n process.env.NODE_ENV !== \"production\" ? warning(!isBoolean(observeOrOptions), \"Passing `observe` as the second argument to `useRect` is deprecated and will be removed in a future version of Reach UI. Instead, you can pass an object of options with an `observe` property as the second argument (`useRect(ref, { observe })`).\\n\" + \"See https://reach.tech/rect#userect-observe\") : void 0;\n }, [observeOrOptions]); // eslint-disable-next-line react-hooks/rules-of-hooks\n\n useEffect(function () {\n process.env.NODE_ENV !== \"production\" ? warning(!isFunction(deprecated_onChange), \"Passing `onChange` as the third argument to `useRect` is deprecated and will be removed in a future version of Reach UI. Instead, you can pass an object of options with an `onChange` property as the second argument (`useRect(ref, { onChange })`).\\n\" + \"See https://reach.tech/rect#userect-onchange\") : void 0;\n }, [deprecated_onChange]);\n }\n\n var _React$useState = useState(nodeRef.current),\n element = _React$useState[0],\n setElement = _React$useState[1];\n\n var initialRectIsSet = useRef(false);\n var initialRefIsSet = useRef(false);\n\n var _React$useState2 = useState(null),\n rect = _React$useState2[0],\n setRect = _React$useState2[1];\n\n var onChangeRef = useRef(onChange);\n var stableOnChange = useCallback(function (rect) {\n onChangeRef.current && onChangeRef.current(rect);\n }, []); // eslint-disable-next-line react-hooks/exhaustive-deps\n\n useIsomorphicLayoutEffect(function () {\n onChangeRef.current = onChange;\n\n if (nodeRef.current !== element) {\n setElement(nodeRef.current);\n }\n });\n useIsomorphicLayoutEffect(function () {\n if (element && !initialRectIsSet.current) {\n initialRectIsSet.current = true;\n setRect(element.getBoundingClientRect());\n }\n }, [element]);\n useIsomorphicLayoutEffect(function () {\n var observer;\n var elem = element; // State initializes before refs are placed, meaning the element state will\n // be undefined on the first render. We still want the rect on the first\n // render, so initially we'll use the nodeRef that was passed instead of\n // state for our measurements.\n\n if (!initialRefIsSet.current) {\n initialRefIsSet.current = true;\n elem = nodeRef.current;\n }\n\n if (!elem) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"You need to place the ref\");\n }\n\n return cleanup;\n }\n\n observer = observeRect(elem, function (rect) {\n stableOnChange(rect);\n setRect(rect);\n });\n observe && observer.observe();\n return cleanup;\n\n function cleanup() {\n observer && observer.unobserve();\n }\n }, [observe, element, nodeRef, stableOnChange]);\n return rect;\n} ////////////////////////////////////////////////////////////////////////////////\n\nexport default Rect;\nexport { Rect, useRect };\n//# sourceMappingURL=rect.esm.js.map\n","import { createElement, useRef, useEffect } from 'react';\nimport { Portal } from '@reach/portal';\nimport { useRect } from '@reach/rect';\nimport { forwardRefWithAs, useForkedRef, getOwnerDocument } from '@reach/utils';\nimport tabbable from 'tabbable';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\n/**\r\n * Popover\r\n */\n\nvar Popover = /*#__PURE__*/forwardRefWithAs(function Popover(props, ref) {\n return createElement(Portal, null, createElement(PopoverImpl, Object.assign({\n ref: ref\n }, props)));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n Popover.displayName = \"Popover\";\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * PopoverImpl\r\n *\r\n * Popover is conditionally rendered so we can't start measuring until it shows\r\n * up, so useRect needs to live down here not up in Popover\r\n */\n\n\nvar PopoverImpl = /*#__PURE__*/forwardRefWithAs(function PopoverImpl(_ref, forwardedRef) {\n var _ref$as = _ref.as,\n Comp = _ref$as === void 0 ? \"div\" : _ref$as,\n targetRef = _ref.targetRef,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? positionDefault : _ref$position,\n _ref$unstable_observa = _ref.unstable_observableRefs,\n unstable_observableRefs = _ref$unstable_observa === void 0 ? [] : _ref$unstable_observa,\n props = _objectWithoutPropertiesLoose(_ref, [\"as\", \"targetRef\", \"position\", \"unstable_observableRefs\"]);\n\n var popoverRef = useRef(null);\n var popoverRect = useRect(popoverRef, {\n observe: !props.hidden\n });\n var targetRect = useRect(targetRef, {\n observe: !props.hidden\n });\n var ref = useForkedRef(popoverRef, forwardedRef);\n useSimulateTabNavigationForReactTree(targetRef, popoverRef);\n return createElement(Comp, Object.assign({\n \"data-reach-popover\": \"\",\n ref: ref\n }, props, {\n style: _extends({\n position: \"absolute\"\n }, getStyles.apply(void 0, [position, targetRect, popoverRect].concat(unstable_observableRefs)), props.style)\n }));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n PopoverImpl.displayName = \"PopoverImpl\";\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nfunction getStyles(position, targetRect, popoverRect) {\n for (var _len = arguments.length, unstable_observableRefs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n unstable_observableRefs[_key - 3] = arguments[_key];\n }\n\n return popoverRect ? position.apply(void 0, [targetRect, popoverRect].concat(unstable_observableRefs.map(function (ref) {\n return ref.current;\n }))) : {\n visibility: \"hidden\"\n };\n}\n\nfunction getTopPosition(targetRect, popoverRect) {\n var _getCollisions = getCollisions(targetRect, popoverRect),\n directionUp = _getCollisions.directionUp;\n\n return {\n top: directionUp ? targetRect.top - popoverRect.height + window.pageYOffset + \"px\" : targetRect.top + targetRect.height + window.pageYOffset + \"px\"\n };\n}\n\nvar positionDefault = function positionDefault(targetRect, popoverRect) {\n if (!targetRect || !popoverRect) {\n return {};\n }\n\n var _getCollisions2 = getCollisions(targetRect, popoverRect),\n directionRight = _getCollisions2.directionRight;\n\n return _extends({\n left: directionRight ? targetRect.right - popoverRect.width + window.pageXOffset + \"px\" : targetRect.left + window.pageXOffset + \"px\"\n }, getTopPosition(targetRect, popoverRect));\n};\n\nvar positionRight = function positionRight(targetRect, popoverRect) {\n if (!targetRect || !popoverRect) {\n return {};\n }\n\n var _getCollisions3 = getCollisions(targetRect, popoverRect),\n directionLeft = _getCollisions3.directionLeft;\n\n return _extends({\n left: directionLeft ? targetRect.left + window.pageXOffset + \"px\" : targetRect.right - popoverRect.width + window.pageXOffset + \"px\"\n }, getTopPosition(targetRect, popoverRect));\n};\n\nvar positionMatchWidth = function positionMatchWidth(targetRect, popoverRect) {\n if (!targetRect || !popoverRect) {\n return {};\n }\n\n return _extends({\n width: targetRect.width,\n left: targetRect.left\n }, getTopPosition(targetRect, popoverRect));\n};\n\nfunction getCollisions(targetRect, popoverRect, offsetLeft, offsetBottom) {\n if (offsetLeft === void 0) {\n offsetLeft = 0;\n }\n\n if (offsetBottom === void 0) {\n offsetBottom = 0;\n }\n\n var collisions = {\n top: targetRect.top - popoverRect.height < 0,\n right: window.innerWidth < targetRect.left + popoverRect.width - offsetLeft,\n bottom: window.innerHeight < targetRect.bottom + popoverRect.height - offsetBottom,\n left: targetRect.left + targetRect.width - popoverRect.width < 0\n };\n var directionRight = collisions.right && !collisions.left;\n var directionLeft = collisions.left && !collisions.right;\n var directionUp = collisions.bottom && !collisions.top;\n var directionDown = collisions.top && !collisions.bottom;\n return {\n directionRight: directionRight,\n directionLeft: directionLeft,\n directionUp: directionUp,\n directionDown: directionDown\n };\n} // Heads up, my jQuery past haunts this function. This hook scopes the tab\n// order to the React element tree, instead of the DOM tree. This way, when the\n// user navigates with tab from the targetRef, the tab order moves into the\n// popup, and then out of the popup back to the rest of the document.\n// (We call targetRef, triggerRef inside this function to avoid confusion with\n// event.target)\n\n\nfunction useSimulateTabNavigationForReactTree(triggerRef, popoverRef) {\n var ownerDocument = getOwnerDocument(triggerRef.current);\n\n function handleKeyDown(event) {\n if (event.key === \"Tab\" && popoverRef.current && tabbable(popoverRef.current).length === 0) {\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n if (shiftTabbedFromElementAfterTrigger(event)) {\n focusLastTabbableInPopover(event);\n } else if (shiftTabbedOutOfPopover(event)) {\n focusTriggerRef(event);\n } else if (shiftTabbedToBrowserChrome(event)) {\n disableTabbablesInPopover();\n }\n } else if (event.key === \"Tab\") {\n if (tabbedFromTriggerToPopover()) {\n focusFirstPopoverTabbable(event);\n } else if (tabbedOutOfPopover()) {\n focusTabbableAfterTrigger(event);\n } else if (tabbedToBrowserChrome(event)) {\n disableTabbablesInPopover();\n }\n }\n }\n\n useEffect(function () {\n ownerDocument.addEventListener(\"keydown\", handleKeyDown);\n return function () {\n ownerDocument.removeEventListener(\"keydown\", handleKeyDown);\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function getElementAfterTrigger() {\n var elements = tabbable(ownerDocument);\n var targetIndex = elements && triggerRef.current ? elements.indexOf(triggerRef.current) : -1;\n var elementAfterTrigger = elements && elements[targetIndex + 1];\n return popoverRef.current && popoverRef.current.contains(elementAfterTrigger || null) ? false : elementAfterTrigger;\n }\n\n function tabbedFromTriggerToPopover() {\n return triggerRef.current ? triggerRef.current === ownerDocument.activeElement : false;\n }\n\n function focusFirstPopoverTabbable(event) {\n var elements = popoverRef.current && tabbable(popoverRef.current);\n\n if (elements && elements[0]) {\n event.preventDefault();\n elements[0].focus();\n }\n }\n\n function tabbedOutOfPopover() {\n var inPopover = popoverRef.current ? popoverRef.current.contains(ownerDocument.activeElement || null) : false;\n\n if (inPopover) {\n var elements = popoverRef.current && tabbable(popoverRef.current);\n return Boolean(elements && elements[elements.length - 1] === ownerDocument.activeElement);\n }\n\n return false;\n }\n\n function focusTabbableAfterTrigger(event) {\n var elementAfterTrigger = getElementAfterTrigger();\n\n if (elementAfterTrigger) {\n event.preventDefault();\n elementAfterTrigger.focus();\n }\n }\n\n function shiftTabbedFromElementAfterTrigger(event) {\n if (!event.shiftKey) return;\n var elementAfterTrigger = getElementAfterTrigger();\n return event.target === elementAfterTrigger;\n }\n\n function focusLastTabbableInPopover(event) {\n var elements = popoverRef.current && tabbable(popoverRef.current);\n var last = elements && elements[elements.length - 1];\n\n if (last) {\n event.preventDefault();\n last.focus();\n }\n }\n\n function shiftTabbedOutOfPopover(event) {\n var elements = popoverRef.current && tabbable(popoverRef.current);\n\n if (elements) {\n return elements.length === 0 ? false : event.target === elements[0];\n }\n\n return false;\n }\n\n function focusTriggerRef(event) {\n var _triggerRef$current;\n\n event.preventDefault();\n (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.focus();\n }\n\n function tabbedToBrowserChrome(event) {\n var elements = popoverRef.current ? tabbable(ownerDocument).filter(function (element) {\n return !popoverRef.current.contains(element);\n }) : null;\n return elements ? event.target === elements[elements.length - 1] : false;\n }\n\n function shiftTabbedToBrowserChrome(event) {\n // we're assuming the popover will never contain the first tabbable\n // element, and it better not, because the trigger needs to be tabbable!\n return event.target === tabbable(ownerDocument)[0];\n }\n\n var restoreTabIndexTuplés = [];\n\n function disableTabbablesInPopover() {\n var elements = popoverRef.current && tabbable(popoverRef.current);\n\n if (elements) {\n elements.forEach(function (element) {\n restoreTabIndexTuplés.push([element, element.tabIndex]);\n element.tabIndex = -1;\n });\n ownerDocument.addEventListener(\"focusin\", enableTabbablesInPopover);\n }\n }\n\n function enableTabbablesInPopover() {\n ownerDocument.removeEventListener(\"focusin\", enableTabbablesInPopover);\n restoreTabIndexTuplés.forEach(function (_ref2) {\n var element = _ref2[0],\n tabIndex = _ref2[1];\n element.tabIndex = tabIndex;\n });\n }\n} ////////////////////////////////////////////////////////////////////////////////\n\nexport default Popover;\nexport { Popover, getCollisions, positionDefault, positionMatchWidth, positionRight };\n//# sourceMappingURL=popover.esm.js.map\n","import * as React from 'react';\nimport { useLayoutEffect, useEffect, isValidElement, cloneElement, createContext, forwardRef, memo, useRef, useState, useCallback, useMemo } from 'react';\nimport fbWarning from 'warning';\n\n/* eslint-disable no-restricted-globals, eqeqeq */\n/**\r\n * React currently throws a warning when using useLayoutEffect on the server.\r\n * To get around it, we can conditionally useEffect on the server (no-op) and\r\n * useLayoutEffect in the browser. We occasionally need useLayoutEffect to\r\n * ensure we don't get a render flash for certain operations, but we may also\r\n * need affected components to render on the server. One example is when setting\r\n * a component's descendants to retrieve their index values.\r\n *\r\n * Important to note that using this hook as an escape hatch will break the\r\n * eslint dependency warnings unless you rename the import to `useLayoutEffect`.\r\n * Use sparingly only when the effect won't effect the rendered HTML to avoid\r\n * any server/client mismatch.\r\n *\r\n * If a useLayoutEffect is needed and the result would create a mismatch, it's\r\n * likely that the component in question shouldn't be rendered on the server at\r\n * all, so a better approach would be to lazily render those in a parent\r\n * component after client-side hydration.\r\n *\r\n * TODO: We are calling useLayoutEffect in a couple of places that will likely\r\n * cause some issues for SSR users, whether the warning shows or not. Audit and\r\n * fix these.\r\n *\r\n * https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\r\n * https://github.com/reduxjs/react-redux/blob/master/src/utils/useIsomorphicLayoutEffect.js\r\n *\r\n * @param effect\r\n * @param deps\r\n */\n\nvar useIsomorphicLayoutEffect = /*#__PURE__*/canUseDOM() ? useLayoutEffect : useEffect;\nvar checkedPkgs = {};\n/**\r\n * Copy of Facebook's warning package.\r\n *\r\n * Similar to invariant but only logs a warning if the condition is not met.\r\n * This can be used to log issues in development environments in critical paths.\r\n * Removing the logging code for production environments will keep the same\r\n * logic and follow the same code paths.\r\n *\r\n * @see https://github.com/BerkeleyTrue/warning/blob/master/warning.js\r\n */\n\nvar warning = fbWarning;\n/**\r\n * When in dev mode, checks that styles for a given @reach package are loaded.\r\n *\r\n * @param packageName Name of the package to check.\r\n * @example checkStyles(\"dialog\") will check for styles for @reach/dialog\r\n */\n\nvar checkStyles = noop;\n\nif (process.env.NODE_ENV !== \"production\") {\n // In CJS files, process.env.NODE_ENV is stripped from our build, but we need\n // it to prevent style checks from clogging up user logs while testing.\n // This is a workaround until we can tweak the build a bit to accommodate.\n var _ref = typeof process !== \"undefined\" ? process : {\n env: {\n NODE_ENV: \"development\"\n }\n },\n env = _ref.env;\n\n checkStyles = function checkStyles(packageName) {\n // only check once per package\n if (checkedPkgs[packageName]) return;\n checkedPkgs[packageName] = true;\n\n if (env.NODE_ENV !== \"test\" && parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--reach-\" + packageName), 10) !== 1) {\n console.warn(\"@reach/\" + packageName + \" styles not found. If you are using a bundler like webpack or parcel include this in the entry file of your app before any of your own styles:\\n\\n import \\\"@reach/\" + packageName + \"/styles.css\\\";\\n\\n Otherwise you'll need to include them some other way:\\n\\n <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"node_modules/@reach/\" + packageName + \"/styles.css\\\" />\\n\\n For more information visit https://ui.reach.tech/styling.\\n \");\n }\n };\n}\n/**\r\n * Ponyfill for the global object in some environments.\r\n *\r\n * @link https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\r\n */\n\nvar ponyfillGlobal = typeof window != \"undefined\" && window.Math == Math ? window : typeof self != \"undefined\" && self.Math == Math ? self :\n/*#__PURE__*/\n// eslint-disable-next-line no-new-func\nFunction(\"return this\")();\n/**\r\n * Passes or assigns an arbitrary value to a ref function or object.\r\n *\r\n * @param ref\r\n * @param value\r\n */\n\nfunction assignRef(ref, value) {\n if (ref == null) return;\n\n if (isFunction(ref)) {\n ref(value);\n } else {\n try {\n ref.current = value;\n } catch (error) {\n throw new Error(\"Cannot assign value \\\"\" + value + \"\\\" to ref \\\"\" + ref + \"\\\"\");\n }\n }\n}\n/**\r\n * Checks true|\"true\" vs false|\"false\"\r\n *\r\n * @param value\r\n */\n\nfunction boolOrBoolString(value) {\n return value === \"true\" ? true : isBoolean(value) ? value : false;\n}\nfunction canUseDOM() {\n return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n}\n/**\r\n * Type-safe clone element\r\n *\r\n * @param element\r\n * @param props\r\n * @param children\r\n */\n\nfunction cloneValidElement(element, props) {\n for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n children[_key - 2] = arguments[_key];\n }\n\n return isValidElement(element) ? cloneElement.apply(React, [element, props].concat(children)) : element;\n}\nfunction createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}\n/**\r\n * This is a hack for sure. The thing is, getting a component to intelligently\r\n * infer props based on a component or JSX string passed into an `as` prop is\r\n * kind of a huge pain. Getting it to work and satisfy the constraints of\r\n * `forwardRef` seems dang near impossible. To avoid needing to do this awkward\r\n * type song-and-dance every time we want to forward a ref into a component\r\n * that accepts an `as` prop, we abstract all of that mess to this function for\r\n * the time time being.\r\n */\n\nfunction forwardRefWithAs(render) {\n return forwardRef(render);\n}\nfunction memoWithAs(Component, propsAreEqual) {\n return memo(Component, propsAreEqual);\n}\n/**\r\n * Get the size of the working document minus the scrollbar offset.\r\n *\r\n * @param element\r\n */\n\nfunction getDocumentDimensions(element) {\n var _ownerDocument$docume, _ownerDocument$docume2;\n\n var ownerDocument = getOwnerDocument(element);\n var ownerWindow = ownerDocument.defaultView || window;\n\n if (!ownerDocument) {\n return {\n width: 0,\n height: 0\n };\n }\n\n return {\n width: (_ownerDocument$docume = ownerDocument.documentElement.clientWidth) !== null && _ownerDocument$docume !== void 0 ? _ownerDocument$docume : ownerWindow.innerWidth,\n height: (_ownerDocument$docume2 = ownerDocument.documentElement.clientHeight) !== null && _ownerDocument$docume2 !== void 0 ? _ownerDocument$docume2 : ownerWindow.innerHeight\n };\n}\n/**\r\n * Get the scoll position of the global window object relative to a given node.\r\n *\r\n * @param element\r\n */\n\nfunction getScrollPosition(element) {\n var ownerDocument = getOwnerDocument(element);\n var ownerWindow = ownerDocument.defaultView || window;\n\n if (!ownerDocument) {\n return {\n scrollX: 0,\n scrollY: 0\n };\n }\n\n return {\n scrollX: ownerWindow.scrollX,\n scrollY: ownerWindow.scrollY\n };\n}\n/**\r\n * Get a computed style value by property.\r\n *\r\n * @param element\r\n * @param styleProp\r\n */\n\nfunction getElementComputedStyle(element, styleProp) {\n var ownerDocument = getOwnerDocument(element);\n var ownerWindow = (ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.defaultView) || window;\n\n if (ownerWindow) {\n return ownerWindow.getComputedStyle(element, null).getPropertyValue(styleProp);\n }\n\n return null;\n}\n/**\r\n * Get an element's owner document. Useful when components are used in iframes\r\n * or other environments like dev tools.\r\n *\r\n * @param element\r\n */\n\nfunction getOwnerDocument(element) {\n return canUseDOM() ? element ? element.ownerDocument : document : null;\n}\n/**\r\n * TODO: Remove in 1.0\r\n */\n\nfunction getOwnerWindow(element) {\n var ownerDocument = getOwnerDocument(element);\n return ownerDocument ? ownerDocument.defaultView || window : null;\n}\n/**\r\n * Get the scrollbar offset distance.\r\n *\r\n * TODO: Remove in 1.0 (we used this in public examples)\r\n */\n\nfunction getScrollbarOffset() {\n try {\n if (window.innerWidth > document.documentElement.clientWidth) {\n return window.innerWidth - document.documentElement.clientWidth;\n }\n } catch (err) {}\n\n return 0;\n}\n/**\r\n * Checks whether or not a value is a boolean.\r\n *\r\n * @param value\r\n */\n\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\n/**\r\n * Checks whether or not a value is a function.\r\n *\r\n * @param value\r\n */\n\nfunction isFunction(value) {\n return !!(value && {}.toString.call(value) == \"[object Function]\");\n}\n/**\r\n * Checks whether or not a value is a number.\r\n *\r\n * @param value\r\n */\n\nfunction isNumber(value) {\n return typeof value === \"number\" && !isNaN(value);\n}\n/**\r\n * Detects right clicks\r\n *\r\n * @param nativeEvent\r\n */\n\nfunction isRightClick(nativeEvent) {\n return \"which\" in nativeEvent ? nativeEvent.which === 3 : \"button\" in nativeEvent ? nativeEvent.button === 2 : false;\n}\n/**\r\n * Checks whether or not a value is a string.\r\n *\r\n * @param value\r\n */\n\nfunction isString(value) {\n return typeof value === \"string\";\n}\n/**\r\n * Joins strings to format IDs for compound components.\r\n *\r\n * @param args\r\n */\n\nfunction makeId() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return args.filter(function (val) {\n return val != null;\n }).join(\"--\");\n}\n/**\r\n * No-op function.\r\n */\n\nfunction noop() {}\n/**\r\n * Convert our state strings for HTML data attributes.\r\n * No need for a fancy kebab-caser here, we know what our state strings are!\r\n *\r\n * @param state\r\n */\n\nfunction stateToAttributeString(state) {\n return String(state).replace(/([\\s_]+)/g, \"-\").toLowerCase();\n}\n/**\r\n * Check if a component is controlled or uncontrolled and return the correct\r\n * state value and setter accordingly. If the component state is controlled by\r\n * the app, the setter is a noop.\r\n *\r\n * @param controlledValue\r\n * @param defaultValue\r\n */\n\nfunction useControlledState(controlledValue, defaultValue) {\n var controlledRef = useRef(controlledValue != null);\n\n var _React$useState = useState(defaultValue),\n valueState = _React$useState[0],\n setValue = _React$useState[1];\n\n var set = useCallback(function (n) {\n if (!controlledRef.current) {\n setValue(n);\n }\n }, []);\n return [controlledRef.current ? controlledValue : valueState, set];\n}\n/**\r\n * Logs a warning in dev mode when a component switches from controlled to\r\n * uncontrolled, or vice versa\r\n *\r\n * A single prop should typically be used to determine whether or not a\r\n * component is controlled or not.\r\n *\r\n * @param controlledValue\r\n * @param controlledPropName\r\n * @param componentName\r\n */\n\nvar useControlledSwitchWarning = noop;\n\nif (process.env.NODE_ENV !== \"production\") {\n useControlledSwitchWarning = function useControlledSwitchWarning(controlledValue, controlledPropName, componentName) {\n var controlledRef = useRef(controlledValue != null);\n var nameCache = useRef({\n componentName: componentName,\n controlledPropName: controlledPropName\n });\n useEffect(function () {\n nameCache.current = {\n componentName: componentName,\n controlledPropName: controlledPropName\n };\n }, [componentName, controlledPropName]);\n useEffect(function () {\n var wasControlled = controlledRef.current;\n var _nameCache$current = nameCache.current,\n componentName = _nameCache$current.componentName,\n controlledPropName = _nameCache$current.controlledPropName;\n var isControlled = controlledValue != null;\n\n if (wasControlled !== isControlled) {\n console.error(\"A component is changing an \" + (wasControlled ? \"\" : \"un\") + \"controlled `\" + controlledPropName + \"` state of \" + componentName + \" to be \" + (wasControlled ? \"un\" : \"\") + \"controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled \" + componentName + \" element for the lifetime of the component.\\nMore info: https://fb.me/react-controlled-components\");\n }\n }, [controlledValue]);\n };\n}\nvar useCheckStyles = noop;\n\nif (process.env.NODE_ENV !== \"production\") {\n useCheckStyles = function useCheckStyles(pkg) {\n var name = useRef(pkg);\n useEffect(function () {\n return void (name.current = pkg);\n }, [pkg]);\n useEffect(function () {\n return checkStyles(name.current);\n }, []);\n };\n}\n/**\r\n * React hook for creating a value exactly once.\r\n * @see https://github.com/Andarist/use-constant\r\n */\n\nfunction useConstant(fn) {\n var ref = useRef();\n\n if (!ref.current) {\n ref.current = {\n v: fn()\n };\n }\n\n return ref.current.v;\n}\n/**\r\n * @param callback\r\n */\n\nfunction useEventCallback(callback) {\n var ref = useRef(callback);\n useIsomorphicLayoutEffect(function () {\n ref.current = callback;\n });\n return useCallback(function (event) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return ref.current.apply(ref, [event].concat(args));\n }, []);\n}\nfunction useLazyRef(fn) {\n var ref = useRef({\n __internalSet: true\n });\n\n if (ref.current && ref.current.__internalSet === true) {\n ref.current = fn();\n }\n\n return ref;\n}\n/**\r\n * TODO: Remove in 1.0\r\n * @alias useStableCallback\r\n * @param callback\r\n */\n\nvar useCallbackProp = useStableCallback;\n/**\r\n * Adds a DOM event listener\r\n *\r\n * @param eventName\r\n * @param listener\r\n * @param element\r\n */\n\nfunction useEventListener(eventName, listener, element) {\n if (element === void 0) {\n element = window;\n }\n\n var savedHandler = useRef(listener);\n useEffect(function () {\n savedHandler.current = listener;\n }, [listener]);\n useEffect(function () {\n var isSupported = element && element.addEventListener;\n\n if (!isSupported) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"Event listener not supported on the element provided\");\n }\n\n return;\n }\n\n function eventListener(event) {\n savedHandler.current(event);\n }\n\n element.addEventListener(eventName, eventListener);\n return function () {\n element.removeEventListener(eventName, eventListener);\n };\n }, [eventName, element]);\n}\n/**\r\n * Detect when focus changes in our document.\r\n *\r\n * @param handleChange\r\n * @param when\r\n * @param ownerDocument\r\n */\n\nfunction useFocusChange(handleChange, when, ownerDocument) {\n if (handleChange === void 0) {\n handleChange = console.log;\n }\n\n if (when === void 0) {\n when = \"focus\";\n }\n\n if (ownerDocument === void 0) {\n ownerDocument = document;\n }\n\n var lastActiveElement = useRef(ownerDocument.activeElement);\n useEffect(function () {\n lastActiveElement.current = ownerDocument.activeElement;\n\n function onChange(event) {\n if (lastActiveElement.current !== ownerDocument.activeElement) {\n handleChange(ownerDocument.activeElement, lastActiveElement.current, event);\n lastActiveElement.current = ownerDocument.activeElement;\n }\n }\n\n ownerDocument.addEventListener(when, onChange, true);\n return function () {\n ownerDocument.removeEventListener(when, onChange);\n };\n }, [when, handleChange, ownerDocument]);\n}\n/**\r\n * Forces a re-render, similar to `forceUpdate` in class components.\r\n */\n\nfunction useForceUpdate() {\n var _React$useState2 = useState(Object.create(null)),\n dispatch = _React$useState2[1];\n\n return useCallback(function () {\n dispatch(Object.create(null));\n }, []);\n}\n/**\r\n * Passes or assigns a value to multiple refs (typically a DOM node). Useful for\r\n * dealing with components that need an explicit ref for DOM calculations but\r\n * also forwards refs assigned by an app.\r\n *\r\n * @param refs Refs to fork\r\n */\n\nfunction useForkedRef() {\n for (var _len4 = arguments.length, refs = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n refs[_key4] = arguments[_key4];\n }\n\n return useMemo(function () {\n if (refs.every(function (ref) {\n return ref == null;\n })) {\n return null;\n }\n\n return function (node) {\n refs.forEach(function (ref) {\n assignRef(ref, node);\n });\n }; // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [].concat(refs));\n}\n/**\r\n * Returns the previous value of a reference after a component update.\r\n *\r\n * @param value\r\n */\n\nfunction usePrevious(value) {\n var ref = useRef(null);\n useEffect(function () {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n/**\r\n * Converts a callback to a ref to avoid triggering re-renders when passed as a\r\n * prop and exposed as a stable function to avoid executing effects when\r\n * passed as a dependency.\r\n */\n\nfunction useStableCallback(callback) {\n var callbackRef = useRef(callback);\n useEffect(function () {\n callbackRef.current = callback;\n }); // eslint-disable-next-line react-hooks/exhaustive-deps\n\n return useCallback(function () {\n callbackRef.current && callbackRef.current.apply(callbackRef, arguments);\n }, []);\n}\n/**\r\n * Call an effect after a component update, skipping the initial mount.\r\n *\r\n * @param effect Effect to call\r\n * @param deps Effect dependency list\r\n */\n\nfunction useUpdateEffect(effect, deps) {\n var mounted = useRef(false);\n useEffect(function () {\n if (mounted.current) {\n effect();\n } else {\n mounted.current = true;\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, deps);\n}\n/**\r\n * Just a lil state logger\r\n *\r\n * @param state\r\n * @param DEBUG\r\n */\n\nvar useStateLogger = noop;\n\nif (process.env.NODE_ENV !== \"production\") {\n useStateLogger = function useStateLogger(state, DEBUG) {\n if (DEBUG === void 0) {\n DEBUG = false;\n }\n\n var debugRef = useRef(DEBUG);\n useEffect(function () {\n debugRef.current = DEBUG;\n }, [DEBUG]);\n useEffect(function () {\n if (debugRef.current) {\n console.group(\"State Updated\");\n console.log(\"%c\" + state, \"font-weight: normal; font-size: 120%; font-style: italic;\");\n console.groupEnd();\n }\n }, [state]);\n };\n}\n/**\r\n * Wraps a lib-defined event handler and a user-defined event handler, returning\r\n * a single handler that allows a user to prevent lib-defined handlers from\r\n * firing.\r\n *\r\n * @param theirHandler User-supplied event handler\r\n * @param ourHandler Library-supplied event handler\r\n */\n\nfunction wrapEvent(theirHandler, ourHandler) {\n return function (event) {\n theirHandler && theirHandler(event);\n\n if (!event.defaultPrevented) {\n return ourHandler(event);\n }\n };\n}\n\nexport { assignRef, boolOrBoolString, canUseDOM, checkStyles, cloneValidElement, createNamedContext, forwardRefWithAs, getDocumentDimensions, getElementComputedStyle, getOwnerDocument, getOwnerWindow, getScrollPosition, getScrollbarOffset, isBoolean, isFunction, isNumber, isRightClick, isString, makeId, memoWithAs, noop, ponyfillGlobal, stateToAttributeString, useCallbackProp, useCheckStyles, useConstant, useControlledState, useControlledSwitchWarning, useEventCallback, useEventListener, useFocusChange, useForceUpdate, useForkedRef, useIsomorphicLayoutEffect, useLazyRef, usePrevious, useStableCallback, useStateLogger, useUpdateEffect, warning, wrapEvent };\n//# sourceMappingURL=utils.esm.js.map\n","module.exports = require('./dist/next-server/lib/head')\n","import { useState, useEffect } from 'react';\nimport { useIsomorphicLayoutEffect } from '@reach/utils';\n\n/*\r\n * Welcome to @reach/auto-id!\r\n\n * Let's see if we can make sense of why this hook exists and its\r\n * implementation.\r\n *\r\n * Some background:\r\n * 1. Accessibiliy APIs rely heavily on element IDs\r\n * 2. Requiring developers to put IDs on every element in Reach UI is both\r\n * cumbersome and error-prone\r\n * 3. With a component model, we can generate IDs for them!\r\n *\r\n * Solution 1: Generate random IDs.\r\n *\r\n * This works great as long as you don't server render your app. When React (in\r\n * the client) tries to reuse the markup from the server, the IDs won't match\r\n * and React will then recreate the entire DOM tree.\r\n *\r\n * Solution 2: Increment an integer\r\n *\r\n * This sounds great. Since we're rendering the exact same tree on the server\r\n * and client, we can increment a counter and get a deterministic result between\r\n * client and server. Also, JS integers can go up to nine-quadrillion. I'm\r\n * pretty sure the tab will be closed before an app never needs\r\n * 10 quadrillion IDs!\r\n *\r\n * Problem solved, right?\r\n *\r\n * Ah, but there's a catch! React's concurrent rendering makes this approach\r\n * non-deterministic. While the client and server will end up with the same\r\n * elements in the end, depending on suspense boundaries (and possibly some user\r\n * input during the initial render) the incrementing integers won't always match\r\n * up.\r\n *\r\n * Solution 3: Don't use IDs at all on the server; patch after first render.\r\n *\r\n * What we've done here is solution 2 with some tricks. With this approach, the\r\n * ID returned is an empty string on the first render. This way the server and\r\n * client have the same markup no matter how wild the concurrent rendering may\r\n * have gotten.\r\n *\r\n * After the render, we patch up the components with an incremented ID. This\r\n * causes a double render on any components with `useId`. Shouldn't be a problem\r\n * since the components using this hook should be small, and we're only updating\r\n * the ID attribute on the DOM, nothing big is happening.\r\n *\r\n * It doesn't have to be an incremented number, though--we could do generate\r\n * random strings instead, but incrementing a number is probably the cheapest\r\n * thing we can do.\r\n *\r\n * Additionally, we only do this patchup on the very first client render ever.\r\n * Any calls to `useId` that happen dynamically in the client will be\r\n * populated immediately with a value. So, we only get the double render after\r\n * server hydration and never again, SO BACK OFF ALRIGHT?\r\n */\nvar serverHandoffComplete = false;\nvar id = 0;\n\nvar genId = function genId() {\n return ++id;\n};\n/**\r\n * useId\r\n *\r\n * Autogenerate IDs to facilitate WAI-ARIA and server rendering.\r\n *\r\n * Note: The returned ID will initially be `null` and will update after a\r\n * component mounts. Users may need to supply their own ID if they need\r\n * consistent values for SSR.\r\n *\r\n * @see Docs https://reach.tech/auto-id\r\n */\n\n\nfunction useId(idFromProps) {\n /*\r\n * If this instance isn't part of the initial render, we don't have to do the\r\n * double render/patch-up dance. We can just generate the ID and return it.\r\n */\n var initialId = idFromProps || (serverHandoffComplete ? genId() : null);\n\n var _React$useState = useState(initialId),\n id = _React$useState[0],\n setId = _React$useState[1];\n\n useIsomorphicLayoutEffect(function () {\n if (id === null) {\n /*\r\n * Patch the ID after render. We do this in `useLayoutEffect` to avoid any\r\n * rendering flicker, though it'll make the first render slower (unlikely\r\n * to matter, but you're welcome to measure your app and let us know if\r\n * it's a problem).\r\n */\n setId(genId());\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, []);\n useEffect(function () {\n if (serverHandoffComplete === false) {\n /*\r\n * Flag all future uses of `useId` to skip the update dance. This is in\r\n * `useEffect` because it goes after `useLayoutEffect`, ensuring we don't\r\n * accidentally bail out of the patch-up dance prematurely.\r\n */\n serverHandoffComplete = true;\n }\n }, []);\n return id != null ? String(id) : undefined;\n}\n\nexport { useId };\n//# sourceMappingURL=auto-id.esm.js.map\n","import React from 'react'\n\nexport const AmpStateContext: React.Context<any> = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n AmpStateContext.displayName = 'AmpStateContext'\n}\n","import { rem, rgba, size } from 'polished';\nimport styled, { css, keyframes, Theme } from 'styled-components';\n\nexport interface SpinnerProps {\n size?: number;\n color?: keyof Theme['colors']['palette'];\n space?: number;\n centre?: boolean;\n}\n\nconst spin = keyframes`\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst Spinner = styled.div.attrs({\n 'data-testid': 'spinner',\n})<SpinnerProps>`\n ${({\n size: spinnerSize = 32,\n color = 'white',\n theme,\n space = 0,\n centre = true,\n }) => {\n const mainColor = theme['colors']['palette'][color];\n\n return css`\n ${size(rem(spinnerSize))}\n\n display: block;\n margin: ${rem(space)} ${centre ? 'auto' : 0};\n border: ${rem(spinnerSize / 8)} solid ${rgba(mainColor, 0.3)};\n border-top-color: ${mainColor};\n border-radius: 50%;\n animation: 1.5s ${spin} infinite linear;\n `;\n }}\n`;\n\nexport default Spinner;\n","import { rem } from 'polished';\nimport styled, { css } from 'styled-components';\n\nconst common = css`\n color: ${({ theme }) => theme.components.heading.text};\n font-weight: 700;\n text-shadow: 0 2px 6px rgba(255, 255, 255, 0.2);\n`;\n\nexport const H1 = styled.h1`\n ${common}\n\n margin: 0 0 1rem;\n font-size: ${rem(80)};\n line-height: 1.15;\n`;\n\nexport const H2 = styled.h2`\n ${common}\n\n margin: 0 0 1rem;\n font-size: ${rem(24)};\n line-height: 1.15;\n\n ${({ theme }) => theme.mediaQueries.small} {\n font-size: ${rem(36)};\n }\n\n ${({ theme }) => theme.mediaQueries.medium} {\n font-size: ${rem(48)};\n }\n`;\n\nexport const H3 = styled.h3`\n ${common}\n\n margin: 0 0 1rem;\n font-size: ${rem(36)};\n line-height: 1.15;\n`;\n\nexport const H4 = styled.h4`\n ${common}\n\n margin: 0 0 1rem;\n font-size: ${rem(24)};\n line-height: 1.15;\n`;\n\nexport const H5 = styled.h5`\n ${common}\n\n margin: 0 0 1rem;\n font-size: ${rem(18)};\n line-height: 1.15;\n`;\n\nconst Headings = {\n H1,\n H2,\n H3,\n H4,\n};\n\nexport default Headings;\n","import { useEffect, useState } from 'react';\nimport useAuth from './use-auth';\n\nexport function useIsLoggedIn() {\n const { isAuthenticated, isAnonymous, loading } = useAuth();\n\n const [isLoggedIn, setIsLoggedIn] = useState<boolean>(loading);\n\n useEffect(() => {\n setIsLoggedIn(!loading && isAuthenticated && !isAnonymous);\n }, [isAuthenticated, loading, isAnonymous]);\n\n return isLoggedIn;\n}\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","import Spinner from 'components/spinner';\nimport { rem, size } from 'polished';\nimport PropTypes from 'prop-types';\nimport { ButtonHTMLAttributes, DetailedHTMLProps, forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\n\ninterface Props\n extends DetailedHTMLProps<\n ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n block?: boolean;\n variant?: 'default' | 'dark' | 'secondary' | 'transparent';\n size?: 'large' | 'small';\n type?: 'submit' | 'reset' | 'button';\n as?: 'a';\n href?: string;\n loading?: boolean;\n}\n\nexport const StyledButton = styled.button.attrs((props: Props) => ({\n type: props.as === 'a' ? undefined : props.type ?? 'button',\n variant: props.variant ? props.variant : 'default',\n}))<Props>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ block }) => (block ? '100%' : undefined)};\n min-width: ${rem(120)};\n height: ${({ size }) => (size === 'large' ? '55px' : '48px')};\n color: ${({ theme, variant }) => theme.components.button.text[variant]};\n font-weight: bold;\n font-size: ${({ size }) => (size === 'large' ? '20px' : '16px')};\n line-height: 1.15;\n text-decoration: none;\n hyphens: manual;\n background-color: ${({ theme, variant }) =>\n theme.components.button.background[variant]};\n border: 1px solid\n ${({ variant, theme }) => theme.components.button.border[variant]};\n border-radius: ${({ theme }) => theme.borderRadius.large};\n cursor: pointer;\n transition:\n box-shadow 150ms ease-in-out,\n border-color 150ms ease-in-out,\n background-color 150ms ease-in-out,\n color 150ms ease-in-out;\n\n ${({ theme }) => theme.mediaQueries.small} {\n min-width: ${rem(160)};\n }\n\n ${({ variant }) => css`\n padding: ${variant === 'transparent' ? `0 ${rem(12)}` : `0 ${rem(45)}`};\n `};\n\n & > svg,\n ${Spinner} {\n ${size(rem(20))};\n\n position: absolute;\n left: ${rem(20)};\n display: block;\n margin: 0;\n }\n\n &.disabled,\n &:disabled {\n cursor: default;\n opacity: 0.3;\n }\n\n &.focus,\n &:focus {\n ${({ variant, theme }) => css`\n border-color: ${theme.colors.palette.white};\n outline: 0;\n box-shadow: ${variant === 'transparent'\n ? 'none'\n : `0 0 0 2px ${theme.colors.palette.redDark}, 0 0 9px ${theme.colors.palette.redDark}, 0 0 8px ${theme.colors.palette.redDark}`};\n `}\n }\n\n &.hover:not(:disabled),\n &:hover:not(:disabled) {\n ${({ variant, theme }) => css`\n color: ${variant === 'transparent'\n ? theme.colors.palette.lightBlue\n : theme.colors.palette.white};\n background-color: ${variant === 'transparent'\n ? 'transparent'\n : theme.colors.palette.black};\n border-color: ${variant === 'transparent'\n ? 'transparent'\n : theme.colors.palette.black};\n `}\n }\n`;\n\nconst Button = forwardRef<HTMLButtonElement, Props>(\n ({ children, disabled, loading, ...props }, ref) => {\n return (\n <StyledButton\n {...(props as any)}\n disabled={loading || disabled}\n ref={ref}\n >\n {loading && <Spinner size={20} />}\n {children}\n </StyledButton>\n );\n }\n);\n\nButton.defaultProps = {\n block: false,\n size: 'small',\n variant: 'default',\n};\n\nButton.propTypes = {\n block: PropTypes.bool,\n variant: PropTypes.oneOf(['default', 'dark', 'secondary', 'transparent']),\n size: PropTypes.oneOf(['large', 'small']),\n type: PropTypes.oneOf(['submit', 'reset', 'button']),\n as: PropTypes.oneOf(['a']),\n};\n\nexport default Button;\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport requestIdleCallback from './request-idle-callback'\n\ntype UseIntersectionObserverInit = Pick<IntersectionObserverInit, 'rootMargin'>\ntype UseIntersection = { disabled?: boolean } & UseIntersectionObserverInit\ntype ObserveCallback = (isVisible: boolean) => void\ntype Observer = {\n id: string\n observer: IntersectionObserver\n elements: Map<Element, ObserveCallback>\n}\n\nconst hasIntersectionObserver = typeof IntersectionObserver !== 'undefined'\n\nexport function useIntersection<T extends Element>({\n rootMargin,\n disabled,\n}: UseIntersection): [(element: T | null) => void, boolean] {\n const isDisabled: boolean = disabled || !hasIntersectionObserver\n\n const unobserve = useRef<Function>()\n const [visible, setVisible] = useState(false)\n\n const setRef = useCallback(\n (el: T | null) => {\n if (unobserve.current) {\n unobserve.current()\n unobserve.current = undefined\n }\n\n if (isDisabled || visible) return\n\n if (el && el.tagName) {\n unobserve.current = observe(\n el,\n (isVisible) => isVisible && setVisible(isVisible),\n { rootMargin }\n )\n }\n },\n [isDisabled, rootMargin, visible]\n )\n\n useEffect(() => {\n if (!hasIntersectionObserver) {\n if (!visible) requestIdleCallback(() => setVisible(true))\n }\n }, [visible])\n\n return [setRef, visible]\n}\n\nfunction observe(\n element: Element,\n callback: ObserveCallback,\n options: UseIntersectionObserverInit\n): () => void {\n const { id, observer, elements } = createObserver(options)\n elements.set(element, callback)\n\n observer.observe(element)\n return function unobserve(): void {\n elements.delete(element)\n observer.unobserve(element)\n\n // Destroy observer when there's nothing left to watch:\n if (elements.size === 0) {\n observer.disconnect()\n observers.delete(id)\n }\n }\n}\n\nconst observers = new Map<string, Observer>()\nfunction createObserver(options: UseIntersectionObserverInit): Observer {\n const id = options.rootMargin || ''\n let instance = observers.get(id)\n if (instance) {\n return instance\n }\n\n const elements = new Map<Element, ObserveCallback>()\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const callback = elements.get(entry.target)\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0\n if (callback && isVisible) {\n callback(isVisible)\n }\n })\n }, options)\n\n observers.set(\n id,\n (instance = {\n id,\n observer,\n elements,\n })\n )\n return instance\n}\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","export var FOCUS_GROUP = 'data-focus-lock';\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\nexport var FOCUS_AUTO = 'data-autofocus-inside';\n","import { useCallbackRef } from './useRef';\nimport { assignRef } from './assignRef';\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n return useCallbackRef(defaultValue, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n }\n }\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nexport var hiddenGuard = {\n width: '1px',\n height: '0px',\n padding: 0,\n overflow: 'hidden',\n position: 'fixed',\n top: '1px',\n left: '1px'\n};\n\nvar InFocusGuard = function InFocusGuard(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n key: \"guard-first\",\n \"data-focus-guard\": true,\n \"data-focus-auto-guard\": true,\n style: hiddenGuard\n }), children, children && /*#__PURE__*/React.createElement(\"div\", {\n key: \"guard-last\",\n \"data-focus-guard\": true,\n \"data-focus-auto-guard\": true,\n style: hiddenGuard\n }));\n};\n\nInFocusGuard.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: PropTypes.node\n} : {};\nInFocusGuard.defaultProps = {\n children: null\n};\nexport default InFocusGuard;","import * as tslib_1 from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = tslib_1.__assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { createMedium, createSidecarMedium } from 'use-sidecar';\nexport var mediumFocus = createMedium({}, function (_ref) {\n var target = _ref.target,\n currentTarget = _ref.currentTarget;\n return {\n target: target,\n currentTarget: currentTarget\n };\n});\nexport var mediumBlur = createMedium();\nexport var mediumEffect = createMedium();\nexport var mediumSidecar = createSidecarMedium({\n async: true\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { node, bool, string, any, arrayOf, oneOfType, object, func } from 'prop-types';\nimport * as constants from 'focus-lock/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { hiddenGuard } from './FocusGuard';\nimport { mediumFocus, mediumBlur, mediumSidecar } from './medium';\nvar emptyArray = [];\nvar FocusLock = /*#__PURE__*/React.forwardRef(function FocusLockUI(props, parentRef) {\n var _extends2;\n\n var _React$useState = React.useState(),\n realObserved = _React$useState[0],\n setObserved = _React$useState[1];\n\n var observed = React.useRef();\n var isActive = React.useRef(false);\n var originalFocusedElement = React.useRef(null);\n var children = props.children,\n disabled = props.disabled,\n noFocusGuards = props.noFocusGuards,\n persistentFocus = props.persistentFocus,\n crossFrame = props.crossFrame,\n autoFocus = props.autoFocus,\n allowTextSelection = props.allowTextSelection,\n group = props.group,\n className = props.className,\n whiteList = props.whiteList,\n _props$shards = props.shards,\n shards = _props$shards === void 0 ? emptyArray : _props$shards,\n _props$as = props.as,\n Container = _props$as === void 0 ? 'div' : _props$as,\n _props$lockProps = props.lockProps,\n containerProps = _props$lockProps === void 0 ? {} : _props$lockProps,\n SideCar = props.sideCar,\n shouldReturnFocus = props.returnFocus,\n onActivationCallback = props.onActivation,\n onDeactivationCallback = props.onDeactivation;\n\n var _React$useState2 = React.useState({}),\n id = _React$useState2[0]; // SIDE EFFECT CALLBACKS\n\n\n var onActivation = React.useCallback(function () {\n originalFocusedElement.current = originalFocusedElement.current || document && document.activeElement;\n\n if (observed.current && onActivationCallback) {\n onActivationCallback(observed.current);\n }\n\n isActive.current = true;\n }, [onActivationCallback]);\n var onDeactivation = React.useCallback(function () {\n isActive.current = false;\n\n if (onDeactivationCallback) {\n onDeactivationCallback(observed.current);\n }\n }, [onDeactivationCallback]);\n var returnFocus = React.useCallback(function (allowDefer) {\n var current = originalFocusedElement.current;\n\n if (Boolean(shouldReturnFocus) && current && current.focus) {\n var focusOptions = typeof shouldReturnFocus === 'object' ? shouldReturnFocus : undefined;\n originalFocusedElement.current = null;\n\n if (allowDefer) {\n // React might return focus after update\n // it's safer to defer the action\n Promise.resolve().then(function () {\n return current.focus(focusOptions);\n });\n } else {\n current.focus(focusOptions);\n }\n }\n }, [shouldReturnFocus]); // MEDIUM CALLBACKS\n\n var onFocus = React.useCallback(function (event) {\n if (isActive.current) {\n mediumFocus.useMedium(event);\n }\n }, []);\n var onBlur = mediumBlur.useMedium; // REF PROPAGATION\n // not using real refs due to race conditions\n\n var setObserveNode = React.useCallback(function (newObserved) {\n if (observed.current !== newObserved) {\n observed.current = newObserved;\n setObserved(newObserved);\n }\n }, []);\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof allowTextSelection !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('React-Focus-Lock: allowTextSelection is deprecated and enabled by default');\n }\n\n React.useEffect(function () {\n if (!observed.current) {\n // eslint-disable-next-line no-console\n console.error('FocusLock: could not obtain ref to internal node');\n }\n }, []);\n }\n\n var lockProps = _extends((_extends2 = {}, _extends2[constants.FOCUS_DISABLED] = disabled && 'disabled', _extends2[constants.FOCUS_GROUP] = group, _extends2), containerProps);\n\n var hasLeadingGuards = noFocusGuards !== true;\n var hasTailingGuards = hasLeadingGuards && noFocusGuards !== 'tail';\n var mergedRef = useMergeRefs([parentRef, setObserveNode]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, hasLeadingGuards && [/*#__PURE__*/React.createElement(\"div\", {\n key: \"guard-first\",\n \"data-focus-guard\": true,\n tabIndex: disabled ? -1 : 0,\n style: hiddenGuard\n }),\n /*#__PURE__*/\n // nearest focus guard\n React.createElement(\"div\", {\n key: \"guard-nearest\",\n \"data-focus-guard\": true,\n tabIndex: disabled ? -1 : 1,\n style: hiddenGuard\n }) // first tabbed element guard\n ], !disabled && /*#__PURE__*/React.createElement(SideCar, {\n id: id,\n sideCar: mediumSidecar,\n observed: realObserved,\n disabled: disabled,\n persistentFocus: persistentFocus,\n crossFrame: crossFrame,\n autoFocus: autoFocus,\n whiteList: whiteList,\n shards: shards,\n onActivation: onActivation,\n onDeactivation: onDeactivation,\n returnFocus: returnFocus\n }), /*#__PURE__*/React.createElement(Container, _extends({\n ref: mergedRef\n }, lockProps, {\n className: className,\n onBlur: onBlur,\n onFocus: onFocus\n }), children), hasTailingGuards && /*#__PURE__*/React.createElement(\"div\", {\n \"data-focus-guard\": true,\n tabIndex: disabled ? -1 : 0,\n style: hiddenGuard\n }));\n});\nFocusLock.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: node,\n disabled: bool,\n returnFocus: oneOfType([bool, object]),\n noFocusGuards: bool,\n allowTextSelection: bool,\n autoFocus: bool,\n persistentFocus: bool,\n crossFrame: bool,\n group: string,\n className: string,\n whiteList: func,\n shards: arrayOf(any),\n as: oneOfType([string, func, object]),\n lockProps: object,\n onActivation: func,\n onDeactivation: func,\n sideCar: any.isRequired\n} : {};\nFocusLock.defaultProps = {\n children: undefined,\n disabled: false,\n returnFocus: false,\n noFocusGuards: false,\n autoFocus: true,\n persistentFocus: false,\n crossFrame: true,\n allowTextSelection: undefined,\n group: undefined,\n className: undefined,\n whiteList: undefined,\n shards: undefined,\n as: 'div',\n lockProps: {},\n onActivation: undefined,\n onDeactivation: undefined\n};\nexport default FocusLock;","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { PureComponent } from 'react';\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n handleStateChangeOnClient(state);\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n SideEffect.peek = function peek() {\n return state;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n return SideEffect;\n };\n}\n\nexport default withSideEffect;\n","export var toArray = function (a) {\n var ret = Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = a[i];\n }\n return ret;\n};\nexport var asArray = function (a) { return (Array.isArray(a) ? a : [a]); };\n","import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\nvar filterNested = function (nodes) {\n var contained = new Set();\n var l = nodes.length;\n for (var i = 0; i < l; i += 1) {\n for (var j = i + 1; j < l; j += 1) {\n var position = nodes[i].compareDocumentPosition(nodes[j]);\n if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {\n contained.add(j);\n }\n if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {\n contained.add(i);\n }\n }\n }\n return nodes.filter(function (_, index) { return !contained.has(index); });\n};\nvar getTopParent = function (node) {\n return node.parentNode ? getTopParent(node.parentNode) : node;\n};\nexport var getAllAffectedNodes = function (node) {\n var nodes = asArray(node);\n return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n var group = currentNode.getAttribute(FOCUS_GROUP);\n acc.push.apply(acc, (group\n ? filterNested(toArray(getTopParent(currentNode).querySelectorAll(\"[\" + FOCUS_GROUP + \"=\\\"\" + group + \"\\\"]:not([\" + FOCUS_DISABLED + \"=\\\"disabled\\\"])\")))\n : [currentNode]));\n return acc;\n }, []);\n};\n","import { getAllAffectedNodes } from './utils/all-affected';\nimport { toArray } from './utils/array';\nvar focusInFrame = function (frame) { return frame === document.activeElement; };\nvar focusInsideIframe = function (topNode) {\n return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node); }));\n};\nexport var focusInside = function (topNode) {\n var activeElement = document && document.activeElement;\n if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {\n return false;\n }\n return getAllAffectedNodes(topNode).reduce(function (result, node) { return result || node.contains(activeElement) || focusInsideIframe(node); }, false);\n};\n","var isRadio = function (node) { return node.tagName === 'INPUT' && node.type === 'radio'; };\nvar findSelectedRadio = function (node, nodes) {\n return nodes\n .filter(isRadio)\n .filter(function (el) { return el.name === node.name; })\n .filter(function (el) { return el.checked; })[0] || node;\n};\nexport var correctNode = function (node, nodes) {\n if (isRadio(node) && node.name) {\n return findSelectedRadio(node, nodes);\n }\n return node;\n};\nexport var correctNodes = function (nodes) {\n var resultSet = new Set();\n nodes.forEach(function (node) { return resultSet.add(correctNode(node, nodes)); });\n return nodes.filter(function (node) { return resultSet.has(node); });\n};\n","import { correctNode } from './correctFocus';\nexport var pickFirstFocus = function (nodes) {\n if (nodes[0] && nodes.length > 1) {\n return correctNode(nodes[0], nodes);\n }\n return nodes[0];\n};\nexport var pickFocusable = function (nodes, index) {\n if (nodes.length > 1) {\n return nodes.indexOf(correctNode(nodes[index], nodes));\n }\n return index;\n};\n","var isElementHidden = function (computedStyle) {\n if (!computedStyle || !computedStyle.getPropertyValue) {\n return false;\n }\n return (computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden');\n};\nexport var isVisible = function (node) {\n return !node ||\n node === document ||\n (node && node.nodeType === Node.DOCUMENT_NODE) ||\n (!isElementHidden(window.getComputedStyle(node, null)) &&\n isVisible(node.parentNode && node.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? node.parentNode.host\n : node.parentNode));\n};\nexport var notHiddenInput = function (node) {\n return !((node.tagName === 'INPUT' || node.tagName === 'BUTTON') && (node.type === 'hidden' || node.disabled));\n};\nexport var isGuard = function (node) { return Boolean(node && node.dataset && node.dataset.focusGuard); };\nexport var isNotAGuard = function (node) { return !isGuard(node); };\nexport var isDefined = function (x) { return Boolean(x); };\n","import { correctNodes } from './utils/correctFocus';\nimport { pickFocusable } from './utils/firstFocus';\nimport { isGuard } from './utils/is';\nexport var NEW_FOCUS = 'NEW_FOCUS';\nexport var newFocus = function (innerNodes, outerNodes, activeElement, lastNode) {\n var cnt = innerNodes.length;\n var firstFocus = innerNodes[0];\n var lastFocus = innerNodes[cnt - 1];\n var isOnGuard = isGuard(activeElement);\n if (innerNodes.indexOf(activeElement) >= 0) {\n return undefined;\n }\n var activeIndex = outerNodes.indexOf(activeElement);\n var lastIndex = lastNode ? outerNodes.indexOf(lastNode) : activeIndex;\n var lastNodeInside = lastNode ? innerNodes.indexOf(lastNode) : -1;\n var indexDiff = activeIndex - lastIndex;\n var firstNodeIndex = outerNodes.indexOf(firstFocus);\n var lastNodeIndex = outerNodes.indexOf(lastFocus);\n var correctedNodes = correctNodes(outerNodes);\n var correctedIndexDiff = correctedNodes.indexOf(activeElement) - (lastNode ? correctedNodes.indexOf(lastNode) : activeIndex);\n var returnFirstNode = pickFocusable(innerNodes, 0);\n var returnLastNode = pickFocusable(innerNodes, cnt - 1);\n if (activeIndex === -1 || lastNodeInside === -1) {\n return NEW_FOCUS;\n }\n if (!indexDiff && lastNodeInside >= 0) {\n return lastNodeInside;\n }\n if (activeIndex <= firstNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnLastNode;\n }\n if (activeIndex >= lastNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnFirstNode;\n }\n if (indexDiff && Math.abs(correctedIndexDiff) > 1) {\n return lastNodeInside;\n }\n if (activeIndex <= firstNodeIndex) {\n return returnLastNode;\n }\n if (activeIndex > lastNodeIndex) {\n return returnFirstNode;\n }\n if (indexDiff) {\n if (Math.abs(indexDiff) > 1) {\n return lastNodeInside;\n }\n return (cnt + lastNodeInside + indexDiff) % cnt;\n }\n return undefined;\n};\n","import { toArray } from './array';\nexport var tabSort = function (a, b) {\n var tabDiff = a.tabIndex - b.tabIndex;\n var indexDiff = a.index - b.index;\n if (tabDiff) {\n if (!a.tabIndex) {\n return 1;\n }\n if (!b.tabIndex) {\n return -1;\n }\n }\n return tabDiff || indexDiff;\n};\nexport var orderByTabIndex = function (nodes, filterNegative, keepGuards) {\n return toArray(nodes)\n .map(function (node, index) { return ({\n node: node,\n index: index,\n tabIndex: keepGuards && node.tabIndex === -1 ? ((node.dataset || {}).focusGuard ? 0 : -1) : node.tabIndex,\n }); })\n .filter(function (data) { return !filterNegative || data.tabIndex >= 0; })\n .sort(tabSort);\n};\n","import { FOCUS_AUTO } from '../constants';\nimport { toArray } from './array';\nimport { tabbables } from './tabbables';\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = queryTabbables + \", [data-focus-guard]\";\nexport var getFocusables = function (parents, withGuards) {\n return parents.reduce(function (acc, parent) {\n return acc.concat(toArray(parent.querySelectorAll(withGuards ? queryGuardTabbables : queryTabbables)), parent.parentNode\n ? toArray(parent.parentNode.querySelectorAll(queryTabbables)).filter(function (node) { return node === parent; })\n : []);\n }, []);\n};\nexport var getParentAutofocusables = function (parent) {\n var parentFocus = parent.querySelectorAll(\"[\" + FOCUS_AUTO + \"]\");\n return toArray(parentFocus)\n .map(function (node) { return getFocusables([node]); })\n .reduce(function (acc, nodes) { return acc.concat(nodes); }, []);\n};\n","export var tabbables = [\n 'button:enabled',\n 'select:enabled',\n 'textarea:enabled',\n 'input:enabled',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[tabindex]',\n '[contenteditable]',\n '[autofocus]',\n];\n","import { toArray } from './array';\nimport { isVisible, notHiddenInput } from './is';\nimport { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\nexport var filterFocusable = function (nodes) {\n return toArray(nodes)\n .filter(function (node) { return isVisible(node); })\n .filter(function (node) { return notHiddenInput(node); });\n};\nexport var getTabbableNodes = function (topNodes, withGuards) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards)), true, withGuards);\n};\nexport var getAllTabbableNodes = function (topNodes) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes)), false);\n};\nexport var parentAutofocusables = function (topNode) {\n return filterFocusable(getParentAutofocusables(topNode));\n};\n","import { asArray } from './array';\nimport { parentAutofocusables } from './DOMutils';\nvar getParents = function (node, parents) {\n if (parents === void 0) { parents = []; }\n parents.push(node);\n if (node.parentNode) {\n getParents(node.parentNode, parents);\n }\n return parents;\n};\nexport var getCommonParent = function (nodeA, nodeB) {\n var parentsA = getParents(nodeA);\n var parentsB = getParents(nodeB);\n for (var i = 0; i < parentsA.length; i += 1) {\n var currentParent = parentsA[i];\n if (parentsB.indexOf(currentParent) >= 0) {\n return currentParent;\n }\n }\n return false;\n};\nexport var getTopCommonParent = function (baseActiveElement, leftEntry, rightEntries) {\n var activeElements = asArray(baseActiveElement);\n var leftEntries = asArray(leftEntry);\n var activeElement = activeElements[0];\n var topCommon = false;\n leftEntries.filter(Boolean).forEach(function (entry) {\n topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n rightEntries.filter(Boolean).forEach(function (subEntry) {\n var common = getCommonParent(activeElement, subEntry);\n if (common) {\n if (!topCommon || common.contains(topCommon)) {\n topCommon = common;\n }\n else {\n topCommon = getCommonParent(common, topCommon);\n }\n }\n });\n });\n return topCommon;\n};\nexport var allParentAutofocusables = function (entries) {\n return entries.reduce(function (acc, node) { return acc.concat(parentAutofocusables(node)); }, []);\n};\n","import { NEW_FOCUS, newFocus } from './solver';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { getAllTabbableNodes, getTabbableNodes } from './utils/DOMutils';\nimport { pickFirstFocus } from './utils/firstFocus';\nimport { isDefined, isNotAGuard } from './utils/is';\nimport { allParentAutofocusables, getTopCommonParent } from './utils/parenting';\nvar findAutoFocused = function (autoFocusables) { return function (node) {\n return node.autofocus || (node.dataset && !!node.dataset.autofocus) || autoFocusables.indexOf(node) >= 0;\n}; };\nvar reorderNodes = function (srcNodes, dstNodes) {\n var remap = new Map();\n dstNodes.forEach(function (entity) { return remap.set(entity.node, entity); });\n return srcNodes.map(function (node) { return remap.get(node); }).filter(isDefined);\n};\nexport var getFocusMerge = function (topNode, lastNode) {\n var activeElement = (document && document.activeElement);\n var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n var anyFocusable = getAllTabbableNodes(entries);\n var innerElements = getTabbableNodes(entries).filter(function (_a) {\n var node = _a.node;\n return isNotAGuard(node);\n });\n if (!innerElements[0]) {\n innerElements = anyFocusable;\n if (!innerElements[0]) {\n return undefined;\n }\n }\n var outerNodes = getAllTabbableNodes([commonParent]).map(function (_a) {\n var node = _a.node;\n return node;\n });\n var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n var innerNodes = orderedInnerElements.map(function (_a) {\n var node = _a.node;\n return node;\n });\n var newId = newFocus(innerNodes, outerNodes, activeElement, lastNode);\n if (newId === NEW_FOCUS) {\n var autoFocusable = anyFocusable\n .map(function (_a) {\n var node = _a.node;\n return node;\n })\n .filter(findAutoFocused(allParentAutofocusables(entries)));\n return {\n node: autoFocusable && autoFocusable.length ? pickFirstFocus(autoFocusable) : pickFirstFocus(innerNodes),\n };\n }\n if (newId === undefined) {\n return newId;\n }\n return orderedInnerElements[newId];\n};\n","import { getFocusMerge } from './focusMerge';\nexport var focusOn = function (target) {\n target.focus();\n if ('contentWindow' in target && target.contentWindow) {\n target.contentWindow.focus();\n }\n};\nvar guardCount = 0;\nvar lockDisabled = false;\nexport var setFocus = function (topNode, lastNode) {\n var focusable = getFocusMerge(topNode, lastNode);\n if (lockDisabled) {\n return;\n }\n if (focusable) {\n if (guardCount > 2) {\n console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +\n 'See https://github.com/theKashey/focus-lock/#focus-fighting');\n lockDisabled = true;\n setTimeout(function () {\n lockDisabled = false;\n }, 1);\n return;\n }\n guardCount++;\n focusOn(focusable.node);\n guardCount--;\n }\n};\n","import * as constants from './constants';\nimport { getFocusabledIn } from './focusables';\nimport { focusInside } from './focusInside';\nimport { focusIsHidden } from './focusIsHidden';\nimport { getFocusMerge as focusMerge } from './focusMerge';\nimport { setFocus } from './setFocus';\nimport { focusNextElement, focusPrevElement } from './sibling';\nimport tabHook from './tabHook';\nimport { getAllAffectedNodes } from './utils/all-affected';\nexport { tabHook, focusInside, focusIsHidden, focusMerge, getFocusabledIn, constants, getAllAffectedNodes, focusNextElement, focusPrevElement, };\nexport default setFocus;\n","export function deferAction(action) {\n // Hidding setImmediate from Webpack to avoid inserting polyfill\n var _window = window,\n setImmediate = _window.setImmediate;\n\n if (typeof setImmediate !== 'undefined') {\n setImmediate(action);\n } else {\n setTimeout(action, 1);\n }\n}\nexport var inlineProp = function inlineProp(name, value) {\n var obj = {};\n obj[name] = value;\n return obj;\n};","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport withSideEffect from 'react-clientside-effect';\nimport moveFocusInside, { focusInside, focusIsHidden, getFocusabledIn } from 'focus-lock';\nimport { deferAction } from './util';\nimport { mediumFocus, mediumBlur, mediumEffect } from './medium';\n\nvar focusOnBody = function focusOnBody() {\n return document && document.activeElement === document.body;\n};\n\nvar isFreeFocus = function isFreeFocus() {\n return focusOnBody() || focusIsHidden();\n};\n\nvar lastActiveTrap = null;\nvar lastActiveFocus = null;\nvar lastPortaledElement = null;\nvar focusWasOutsideWindow = false;\n\nvar defaultWhitelist = function defaultWhitelist() {\n return true;\n};\n\nvar focusWhitelisted = function focusWhitelisted(activeElement) {\n return (lastActiveTrap.whiteList || defaultWhitelist)(activeElement);\n};\n\nvar recordPortal = function recordPortal(observerNode, portaledElement) {\n lastPortaledElement = {\n observerNode: observerNode,\n portaledElement: portaledElement\n };\n};\n\nvar focusIsPortaledPair = function focusIsPortaledPair(element) {\n return lastPortaledElement && lastPortaledElement.portaledElement === element;\n};\n\nfunction autoGuard(startIndex, end, step, allNodes) {\n var lastGuard = null;\n var i = startIndex;\n\n do {\n var item = allNodes[i];\n\n if (item.guard) {\n if (item.node.dataset.focusAutoGuard) {\n lastGuard = item;\n }\n } else if (item.lockItem) {\n if (i !== startIndex) {\n // we will tab to the next element\n return;\n }\n\n lastGuard = null;\n } else {\n break;\n }\n } while ((i += step) !== end);\n\n if (lastGuard) {\n lastGuard.node.tabIndex = 0;\n }\n}\n\nvar extractRef = function extractRef(ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\n\nvar focusWasOutside = function focusWasOutside(crossFrameOption) {\n if (crossFrameOption) {\n // with cross frame return true for any value\n return Boolean(focusWasOutsideWindow);\n } // in other case return only of focus went a while aho\n\n\n return focusWasOutsideWindow === 'meanwhile';\n};\n\nvar activateTrap = function activateTrap() {\n var result = false;\n\n if (lastActiveTrap) {\n var _lastActiveTrap = lastActiveTrap,\n observed = _lastActiveTrap.observed,\n persistentFocus = _lastActiveTrap.persistentFocus,\n autoFocus = _lastActiveTrap.autoFocus,\n shards = _lastActiveTrap.shards,\n crossFrame = _lastActiveTrap.crossFrame;\n var workingNode = observed || lastPortaledElement && lastPortaledElement.portaledElement;\n var activeElement = document && document.activeElement;\n\n if (workingNode) {\n var workingArea = [workingNode].concat(shards.map(extractRef).filter(Boolean));\n\n if (!activeElement || focusWhitelisted(activeElement)) {\n if (persistentFocus || focusWasOutside(crossFrame) || !isFreeFocus() || !lastActiveFocus && autoFocus) {\n if (workingNode && !(focusInside(workingArea) || focusIsPortaledPair(activeElement, workingNode))) {\n if (document && !lastActiveFocus && activeElement && !autoFocus) {\n // Check if blur() exists, which is missing on certain elements on IE\n if (activeElement.blur) {\n activeElement.blur();\n }\n\n document.body.focus();\n } else {\n result = moveFocusInside(workingArea, lastActiveFocus);\n lastPortaledElement = {};\n }\n }\n\n focusWasOutsideWindow = false;\n lastActiveFocus = document && document.activeElement;\n }\n }\n\n if (document) {\n var newActiveElement = document && document.activeElement;\n var allNodes = getFocusabledIn(workingArea);\n var focusedIndex = allNodes.map(function (_ref) {\n var node = _ref.node;\n return node;\n }).indexOf(newActiveElement);\n\n if (focusedIndex > -1) {\n // remove old focus\n allNodes.filter(function (_ref2) {\n var guard = _ref2.guard,\n node = _ref2.node;\n return guard && node.dataset.focusAutoGuard;\n }).forEach(function (_ref3) {\n var node = _ref3.node;\n return node.removeAttribute('tabIndex');\n });\n autoGuard(focusedIndex, allNodes.length, +1, allNodes);\n autoGuard(focusedIndex, -1, -1, allNodes);\n }\n }\n }\n }\n\n return result;\n};\n\nvar onTrap = function onTrap(event) {\n if (activateTrap() && event) {\n // prevent scroll jump\n event.stopPropagation();\n event.preventDefault();\n }\n};\n\nvar onBlur = function onBlur() {\n return deferAction(activateTrap);\n};\n\nvar onFocus = function onFocus(event) {\n // detect portal\n var source = event.target;\n var currentNode = event.currentTarget;\n\n if (!currentNode.contains(source)) {\n recordPortal(currentNode, source);\n }\n};\n\nvar FocusWatcher = function FocusWatcher() {\n return null;\n};\n\nvar FocusTrap = function FocusTrap(_ref4) {\n var children = _ref4.children;\n return /*#__PURE__*/React.createElement(\"div\", {\n onBlur: onBlur,\n onFocus: onFocus\n }, children);\n};\n\nFocusTrap.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: PropTypes.node.isRequired\n} : {};\n\nvar onWindowBlur = function onWindowBlur() {\n focusWasOutsideWindow = 'just'; // using setTimeout to set this variable after React/sidecar reaction\n\n setTimeout(function () {\n focusWasOutsideWindow = 'meanwhile';\n }, 0);\n};\n\nvar attachHandler = function attachHandler() {\n document.addEventListener('focusin', onTrap, true);\n document.addEventListener('focusout', onBlur);\n window.addEventListener('blur', onWindowBlur);\n};\n\nvar detachHandler = function detachHandler() {\n document.removeEventListener('focusin', onTrap, true);\n document.removeEventListener('focusout', onBlur);\n window.removeEventListener('blur', onWindowBlur);\n};\n\nfunction reducePropsToState(propsList) {\n return propsList.filter(function (_ref5) {\n var disabled = _ref5.disabled;\n return !disabled;\n });\n}\n\nfunction handleStateChangeOnClient(traps) {\n var trap = traps.slice(-1)[0];\n\n if (trap && !lastActiveTrap) {\n attachHandler();\n }\n\n var lastTrap = lastActiveTrap;\n var sameTrap = lastTrap && trap && trap.id === lastTrap.id;\n lastActiveTrap = trap;\n\n if (lastTrap && !sameTrap) {\n lastTrap.onDeactivation(); // return focus only of last trap was removed\n\n if (!traps.filter(function (_ref6) {\n var id = _ref6.id;\n return id === lastTrap.id;\n }).length) {\n // allow defer is no other trap is awaiting restore\n lastTrap.returnFocus(!trap);\n }\n }\n\n if (trap) {\n lastActiveFocus = null;\n\n if (!sameTrap || lastTrap.observed !== trap.observed) {\n trap.onActivation();\n }\n\n activateTrap(true);\n deferAction(activateTrap);\n } else {\n detachHandler();\n lastActiveFocus = null;\n }\n} // bind medium\n\n\nmediumFocus.assignSyncMedium(onFocus);\nmediumBlur.assignMedium(onBlur);\nmediumEffect.assignMedium(function (cb) {\n return cb({\n moveFocusInside: moveFocusInside,\n focusInside: focusInside\n });\n});\nexport default withSideEffect(reducePropsToState, handleStateChangeOnClient)(FocusWatcher);","import { FOCUS_ALLOW } from './constants';\nimport { toArray } from './utils/array';\nexport var focusIsHidden = function () {\n return document &&\n toArray(document.querySelectorAll(\"[\" + FOCUS_ALLOW + \"]\")).some(function (node) { return node.contains(document.activeElement); });\n};\n","import { getAllAffectedNodes } from './utils/all-affected';\nimport { getTabbableNodes } from './utils/DOMutils';\nimport { isGuard, isNotAGuard } from './utils/is';\nimport { getTopCommonParent } from './utils/parenting';\nexport var getFocusabledIn = function (topNode) {\n var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n var commonParent = getTopCommonParent(topNode, topNode, entries);\n var outerNodes = getTabbableNodes([commonParent], true);\n var innerElements = getTabbableNodes(entries)\n .filter(function (_a) {\n var node = _a.node;\n return isNotAGuard(node);\n })\n .map(function (_a) {\n var node = _a.node;\n return node;\n });\n return outerNodes.map(function (_a) {\n var node = _a.node, index = _a.index;\n return ({\n node: node,\n index: index,\n lockItem: innerElements.indexOf(node) >= 0,\n guard: isGuard(node),\n });\n });\n};\n","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport FocusLockUI from './Lock';\nimport FocusTrap from './Trap';\n/* that would be a BREAKING CHANGE!\n// delaying sidecar execution till the first usage\nconst RequireSideCar = (props) => {\n // eslint-disable-next-line global-require\n const SideCar = require('./Trap').default;\n return <SideCar {...props} />;\n};\n*/\n\nvar FocusLockCombination = /*#__PURE__*/React.forwardRef(function FocusLockUICombination(props, ref) {\n return /*#__PURE__*/React.createElement(FocusLockUI, _extends({\n sideCar: FocusTrap,\n ref: ref\n }, props));\n});\n\nvar _ref = FocusLockUI.propTypes || {},\n sideCar = _ref.sideCar,\n propTypes = _objectWithoutPropertiesLoose(_ref, [\"sideCar\"]);\n\nFocusLockCombination.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nexport default FocusLockCombination;","import FocusLock from './Combination';\nexport * from './UI';\nexport default FocusLock;","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { effectCar } from './medium';\nimport { useMergeRefs } from 'use-callback-ref';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, rest = tslib_1.__rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([\n ref,\n parentRef\n ]);\n var containerProps = tslib_1.__assign({}, rest, callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref })),\n forwardProps ? (React.cloneElement(React.Children.only(children), tslib_1.__assign({}, containerProps, { ref: containerRef }))) : (React.createElement(Container, tslib_1.__assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName\n};\nexport { RemoveScroll };\n","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = tslib_1.__rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, tslib_1.__assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from \"get-nonce\";\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n if (tag.styleSheet) {\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if (stylesheet = makeStyleTag()) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n }\n };\n};\n","import { styleHookSingleton } from \"./hook\";\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles;\n useStyle(styles);\n return null;\n };\n return Sheet;\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from \"./singleton\";\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, []);\n };\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [\n parse(left),\n parse(top),\n parse(right),\n ];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { getGapWidth } from './utils';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName } from \"./constants\";\nvar Style = styleSingleton();\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\" + noScrollbarsClassName + \" {\\n overflow: hidden \" + important + \";\\n padding-right: \" + gap + \"px \" + important + \";\\n }\\n body {\\n overflow: hidden \" + important + \";\\n \" + [\n allowRelative && \"position: relative \" + important + \";\",\n gapMode === 'margin' && \"\\n padding-left: \" + left + \"px;\\n padding-top: \" + top + \"px;\\n padding-right: \" + right + \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \" + gap + \"px \" + important + \";\\n \",\n gapMode === 'padding' && \"padding-right: \" + gap + \"px \" + important + \";\",\n ].filter(Boolean).join('') + \"\\n }\\n \\n .\" + zeroRightClassName + \" {\\n right: \" + gap + \"px \" + important + \";\\n }\\n \\n .\" + fullWidthClassName + \" {\\n margin-right: \" + gap + \"px \" + important + \";\\n }\\n \\n .\" + zeroRightClassName + \" .\" + zeroRightClassName + \" {\\n right: 0 \" + important + \";\\n }\\n \\n .\" + fullWidthClassName + \" .\" + fullWidthClassName + \" {\\n margin-right: 0 \" + important + \";\\n }\\n\";\n};\nexport var RemoveScrollBar = function (props) {\n var _a = React.useState(getGapWidth(props.gapMode)), gap = _a[0], setGap = _a[1];\n React.useEffect(function () {\n setGap(getGapWidth(props.gapMode));\n }, [props.gapMode]);\n var noRelative = props.noRelative, noImportant = props.noImportant, _b = props.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? \"!important\" : '') });\n};\n","var elementCouldBeVScrolled = function (node) {\n var styles = window.getComputedStyle(node);\n return (styles.overflowY !== 'hidden' && // not-not-scrollable\n !(styles.overflowY === styles.overflowX && styles.overflowY === 'visible') // scrollable\n );\n};\nvar elementCouldBeHScrolled = function (node) {\n var styles = window.getComputedStyle(node);\n return (styles.overflowX !== 'hidden' && // not-not-scrollable\n !(styles.overflowY === styles.overflowX && styles.overflowX === 'visible') // scrollable\n );\n};\nexport var locationCouldBeScrolled = function (axis, node) {\n var current = node;\n do {\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2];\n if (s > d) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== document.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [scrollTop, scrollHeight, clientHeight];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [scrollLeft, scrollWidth, clientWidth];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var delta = sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n target = target.parentNode;\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n if (isDeltaPositive &&\n ((noOverscroll && availableScroll === 0) ||\n (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && availableScrollTop === 0) ||\n (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n }\n });\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","import * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nimport { nonPassive } from './aggresiveCapture';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event\n ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY]\n : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) {\n return x[0] === y[0] && x[1] === y[1];\n};\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\" + id + \" {pointer-events: none;}\\n .allow-interactivity-\" + id + \" {pointer-events: all;}\\n\"; };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(function () { return styleSingleton(); })[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\" + id);\n var allow_1 = [\n props.lockRef.current\n ].concat((props.shards || []).map(extractRef)).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\" + id); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\" + id);\n allow_1.forEach(function (el) {\n return el.classList.remove(\"allow-interactivity-\" + id);\n });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if ('touches' in event && event.touches.length === 2) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current &&\n 'changedTouches' in event &&\n (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) {\n return e.name === event.type &&\n e.target === event.target &&\n deltaCompare(e.delta, delta);\n })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n event.preventDefault();\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0\n ? shouldCancelEvent(event, shardNodes[0])\n : !lastProps.current.noIsolation;\n if (shouldStop) {\n event.preventDefault();\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: \"margin\" }) : null));\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, tslib_1.__assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","import { useEffect, createElement, useRef, useCallback } from 'react';\nimport { Portal } from '@reach/portal';\nimport { forwardRefWithAs, useCheckStyles, useForkedRef, wrapEvent, getOwnerDocument, noop, isString } from '@reach/utils';\nimport FocusLock from 'react-focus-lock';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport PropTypes from 'prop-types';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nvar overlayPropTypes = {\n allowPinchZoom: PropTypes.bool,\n dangerouslyBypassFocusLock: PropTypes.bool,\n dangerouslyBypassScrollLock: PropTypes.bool,\n // TODO:\n initialFocusRef: function initialFocusRef() {\n return null;\n },\n onDismiss: PropTypes.func\n}; ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * DialogOverlay\r\n *\r\n * Low-level component if you need more control over the styles or rendering of\r\n * the dialog overlay.\r\n *\r\n * Note: You must render a `DialogContent` inside.\r\n *\r\n * @see Docs https://reach.tech/dialog#dialogoverlay\r\n */\n\nvar DialogOverlay = /*#__PURE__*/forwardRefWithAs(function DialogOverlay(_ref, forwardedRef) {\n var _ref$as = _ref.as,\n Comp = _ref$as === void 0 ? \"div\" : _ref$as,\n _ref$isOpen = _ref.isOpen,\n isOpen = _ref$isOpen === void 0 ? true : _ref$isOpen,\n props = _objectWithoutPropertiesLoose(_ref, [\"as\", \"isOpen\"]);\n\n useCheckStyles(\"dialog\"); // We want to ignore the immediate focus of a tooltip so it doesn't pop\n // up again when the menu closes, only pops up when focus returns again\n // to the tooltip (like native OS tooltips).\n\n useEffect(function () {\n if (isOpen) {\n // @ts-ignore\n window.__REACH_DISABLE_TOOLTIPS = true;\n } else {\n window.requestAnimationFrame(function () {\n // Wait a frame so that this doesn't fire before tooltip does\n // @ts-ignore\n window.__REACH_DISABLE_TOOLTIPS = false;\n });\n }\n }, [isOpen]);\n return isOpen ? createElement(Portal, {\n \"data-reach-dialog-wrapper\": \"\"\n }, createElement(DialogInner, Object.assign({\n ref: forwardedRef,\n as: Comp\n }, props))) : null;\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n DialogOverlay.displayName = \"DialogOverlay\";\n DialogOverlay.propTypes = /*#__PURE__*/_extends({}, overlayPropTypes, {\n isOpen: PropTypes.bool\n });\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * DialogInner\r\n */\n\n\nvar DialogInner = /*#__PURE__*/forwardRefWithAs(function DialogInner(_ref2, forwardedRef) {\n var allowPinchZoom = _ref2.allowPinchZoom,\n _ref2$as = _ref2.as,\n Comp = _ref2$as === void 0 ? \"div\" : _ref2$as,\n _ref2$dangerouslyBypa = _ref2.dangerouslyBypassFocusLock,\n dangerouslyBypassFocusLock = _ref2$dangerouslyBypa === void 0 ? false : _ref2$dangerouslyBypa,\n _ref2$dangerouslyBypa2 = _ref2.dangerouslyBypassScrollLock,\n dangerouslyBypassScrollLock = _ref2$dangerouslyBypa2 === void 0 ? false : _ref2$dangerouslyBypa2,\n initialFocusRef = _ref2.initialFocusRef,\n onClick = _ref2.onClick,\n _ref2$onDismiss = _ref2.onDismiss,\n onDismiss = _ref2$onDismiss === void 0 ? noop : _ref2$onDismiss,\n onKeyDown = _ref2.onKeyDown,\n onMouseDown = _ref2.onMouseDown,\n _ref2$unstable_lockFo = _ref2.unstable_lockFocusAcrossFrames,\n unstable_lockFocusAcrossFrames = _ref2$unstable_lockFo === void 0 ? true : _ref2$unstable_lockFo,\n props = _objectWithoutPropertiesLoose(_ref2, [\"allowPinchZoom\", \"as\", \"dangerouslyBypassFocusLock\", \"dangerouslyBypassScrollLock\", \"initialFocusRef\", \"onClick\", \"onDismiss\", \"onKeyDown\", \"onMouseDown\", \"unstable_lockFocusAcrossFrames\"]);\n\n var mouseDownTarget = useRef(null);\n var overlayNode = useRef(null);\n var ref = useForkedRef(overlayNode, forwardedRef);\n var activateFocusLock = useCallback(function () {\n if (initialFocusRef && initialFocusRef.current) {\n initialFocusRef.current.focus();\n }\n }, [initialFocusRef]);\n\n function handleClick(event) {\n if (mouseDownTarget.current === event.target) {\n event.stopPropagation();\n onDismiss(event);\n }\n }\n\n function handleKeyDown(event) {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n onDismiss(event);\n }\n }\n\n function handleMouseDown(event) {\n mouseDownTarget.current = event.target;\n }\n\n useEffect(function () {\n return overlayNode.current ? createAriaHider(overlayNode.current) : void null;\n }, []);\n return createElement(FocusLock, {\n autoFocus: true,\n returnFocus: true,\n onActivation: activateFocusLock,\n disabled: dangerouslyBypassFocusLock,\n crossFrame: unstable_lockFocusAcrossFrames\n }, createElement(RemoveScroll, {\n allowPinchZoom: allowPinchZoom,\n enabled: !dangerouslyBypassScrollLock\n }, createElement(Comp, Object.assign({}, props, {\n ref: ref,\n \"data-reach-dialog-overlay\": \"\",\n\n /*\r\n * We can ignore the `no-static-element-interactions` warning here\r\n * because our overlay is only designed to capture any outside\r\n * clicks, not to serve as a clickable element itself.\r\n */\n onClick: wrapEvent(onClick, handleClick),\n onKeyDown: wrapEvent(onKeyDown, handleKeyDown),\n onMouseDown: wrapEvent(onMouseDown, handleMouseDown)\n }))));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n DialogOverlay.displayName = \"DialogOverlay\";\n DialogOverlay.propTypes = /*#__PURE__*/_extends({}, overlayPropTypes);\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * DialogContent\r\n *\r\n * Low-level component if you need more control over the styles or rendering of\r\n * the dialog content.\r\n *\r\n * Note: Must be a child of `DialogOverlay`.\r\n *\r\n * Note: You only need to use this when you are also styling `DialogOverlay`,\r\n * otherwise you can use the high-level `Dialog` component and pass the props\r\n * to it. Any props passed to `Dialog` component (besides `isOpen` and\r\n * `onDismiss`) will be spread onto `DialogContent`.\r\n *\r\n * @see Docs https://reach.tech/dialog#dialogcontent\r\n */\n\n\nvar DialogContent = /*#__PURE__*/forwardRefWithAs(function DialogContent(_ref3, forwardedRef) {\n var _ref3$as = _ref3.as,\n Comp = _ref3$as === void 0 ? \"div\" : _ref3$as,\n onClick = _ref3.onClick,\n onKeyDown = _ref3.onKeyDown,\n props = _objectWithoutPropertiesLoose(_ref3, [\"as\", \"onClick\", \"onKeyDown\"]);\n\n return createElement(Comp, Object.assign({\n \"aria-modal\": \"true\",\n role: \"dialog\",\n tabIndex: -1\n }, props, {\n ref: forwardedRef,\n \"data-reach-dialog-content\": \"\",\n onClick: wrapEvent(onClick, function (event) {\n event.stopPropagation();\n })\n }));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n DialogContent.displayName = \"DialogContent\";\n DialogContent.propTypes = {\n \"aria-label\": ariaLabelType,\n \"aria-labelledby\": ariaLabelType\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n/**\r\n * Dialog\r\n *\r\n * High-level component to render a modal dialog window over the top of the page\r\n * (or another dialog).\r\n *\r\n * @see Docs https://reach.tech/dialog#dialog\r\n */\n\n\nvar Dialog = /*#__PURE__*/forwardRefWithAs(function Dialog(_ref4, forwardedRef) {\n var _ref4$allowPinchZoom = _ref4.allowPinchZoom,\n allowPinchZoom = _ref4$allowPinchZoom === void 0 ? false : _ref4$allowPinchZoom,\n initialFocusRef = _ref4.initialFocusRef,\n isOpen = _ref4.isOpen,\n _ref4$onDismiss = _ref4.onDismiss,\n onDismiss = _ref4$onDismiss === void 0 ? noop : _ref4$onDismiss,\n props = _objectWithoutPropertiesLoose(_ref4, [\"allowPinchZoom\", \"initialFocusRef\", \"isOpen\", \"onDismiss\"]);\n\n return createElement(DialogOverlay, {\n allowPinchZoom: allowPinchZoom,\n initialFocusRef: initialFocusRef,\n isOpen: isOpen,\n onDismiss: onDismiss\n }, createElement(DialogContent, Object.assign({\n ref: forwardedRef\n }, props)));\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n Dialog.displayName = \"Dialog\";\n Dialog.propTypes = {\n isOpen: PropTypes.bool,\n onDismiss: PropTypes.func,\n \"aria-label\": ariaLabelType,\n \"aria-labelledby\": ariaLabelType\n };\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nfunction createAriaHider(dialogNode) {\n var originalValues = [];\n var rootNodes = [];\n var ownerDocument = getOwnerDocument(dialogNode);\n\n if (!dialogNode) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"A ref has not yet been attached to a dialog node when attempting to call `createAriaHider`.\");\n }\n\n return noop;\n }\n\n Array.prototype.forEach.call(ownerDocument.querySelectorAll(\"body > *\"), function (node) {\n var _dialogNode$parentNod, _dialogNode$parentNod2;\n\n var portalNode = (_dialogNode$parentNod = dialogNode.parentNode) === null || _dialogNode$parentNod === void 0 ? void 0 : (_dialogNode$parentNod2 = _dialogNode$parentNod.parentNode) === null || _dialogNode$parentNod2 === void 0 ? void 0 : _dialogNode$parentNod2.parentNode;\n\n if (node === portalNode) {\n return;\n }\n\n var attr = node.getAttribute(\"aria-hidden\");\n var alreadyHidden = attr !== null && attr !== \"false\";\n\n if (alreadyHidden) {\n return;\n }\n\n originalValues.push(attr);\n rootNodes.push(node);\n node.setAttribute(\"aria-hidden\", \"true\");\n });\n return function () {\n rootNodes.forEach(function (node, index) {\n var originalValue = originalValues[index];\n\n if (originalValue === null) {\n node.removeAttribute(\"aria-hidden\");\n } else {\n node.setAttribute(\"aria-hidden\", originalValue);\n }\n });\n };\n}\n\nfunction ariaLabelType(props, propName, compName, location, propFullName) {\n var details = \"\\nSee https://www.w3.org/TR/wai-aria/#aria-label for details.\";\n\n if (!props[\"aria-label\"] && !props[\"aria-labelledby\"]) {\n return new Error(\"A <\" + compName + \"> must have either an `aria-label` or `aria-labelledby` prop.\\n \" + details);\n }\n\n if (props[\"aria-label\"] && props[\"aria-labelledby\"]) {\n return new Error(\"You provided both `aria-label` and `aria-labelledby` props to a <\" + compName + \">. If the a label for this component is visible on the screen, that label's component should be given a unique ID prop, and that ID should be passed as the `aria-labelledby` prop into <\" + compName + \">. If the label cannot be determined programmatically from the content of the element, an alternative label should be provided as the `aria-label` prop, which will be used as an `aria-label` on the HTML tag.\" + details);\n } else if (props[propName] != null && !isString(props[propName])) {\n return new Error(\"Invalid prop `\" + propName + \"` supplied to `\" + compName + \"`. Expected `string`, received `\" + (Array.isArray(propFullName) ? \"array\" : typeof propFullName) + \"`.\");\n }\n\n return null;\n}\n\nexport default Dialog;\nexport { Dialog, DialogContent, DialogOverlay };\n//# sourceMappingURL=dialog.esm.js.map\n"],"sourceRoot":""}