{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/utils.js","webpack:///./node_modules/@stimulus/core/dist/src/event_listener.js","webpack:///./node_modules/@stimulus/core/dist/src/dispatcher.js","webpack:///./node_modules/@stimulus/core/dist/src/action_descriptor.js","webpack:///./node_modules/@stimulus/core/dist/src/action.js","webpack:///./node_modules/@stimulus/core/dist/src/binding.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/element_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/attribute_observer.js","webpack:///./node_modules/@stimulus/multimap/dist/src/set_operations.js","webpack:///./node_modules/@stimulus/multimap/dist/src/multimap.js","webpack:///./node_modules/@stimulus/multimap/dist/src/indexed_multimap.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/token_list_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/value_list_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/binding_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/context.js","webpack:///./node_modules/@stimulus/core/dist/src/definition.js","webpack:///./node_modules/@stimulus/core/dist/src/module.js","webpack:///./node_modules/@stimulus/core/dist/src/data_map.js","webpack:///./node_modules/@stimulus/core/dist/src/selectors.js","webpack:///./node_modules/@stimulus/core/dist/src/target_set.js","webpack:///./node_modules/@stimulus/core/dist/src/scope.js","webpack:///./node_modules/@stimulus/core/dist/src/scope_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/router.js","webpack:///./node_modules/@stimulus/core/dist/src/schema.js","webpack:///./node_modules/@stimulus/core/dist/src/application.js","webpack:///./node_modules/@stimulus/core/dist/src/target_properties.js","webpack:///./node_modules/@stimulus/core/dist/src/controller.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/tippy.js/esm/index.all.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/micromodal/dist/micromodal.es.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./app/javascript/packs/vendor/debounce.js","webpack:///./app/javascript/packs/timeAgo.js","webpack:///./app/javascript/packs/bookmark_form.js","webpack:///./app/javascript/packs/endless.js","webpack:///./app/javascript/packs/timeline.js","webpack:///./app/javascript/packs/onboarding.js","webpack:///./app/javascript/controllers/quick_bookmark_controller.js","webpack:///./app/javascript/packs/subscriptions.js","webpack:///./app/javascript/packs/trial_notice.js","webpack:///./app/javascript/packs/core_behavior.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@rails/actioncable/app/assets/javascripts/action_cable.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./app/javascript/controllers sync .js$","webpack:///./app/javascript/controllers/admin_panel_controller.js","webpack:///./app/javascript/controllers/bookmark_controller.js","webpack:///./app/javascript/controllers/bookmark_filters_controller.js","webpack:///./app/javascript/controllers/bookmark_form_controller.js","webpack:///./app/javascript/controllers/card_controller.js","webpack:///./app/javascript/controllers/endless_pagination_controller.js","webpack:///./app/javascript/controllers/faq_controller.js","webpack:///./app/javascript/controllers/feed_pagination_controller.js","webpack:///./app/javascript/controllers/filter_controller.js","webpack:///./app/javascript/controllers/golink_controller.js","webpack:///./app/javascript/controllers/golink_form_controller.js","webpack:///./app/javascript/controllers/help_controller.js","webpack:///./app/javascript/controllers/invitations_controller.js","webpack:///./app/javascript/controllers/list_controller.js","webpack:///./app/javascript/controllers/list_form_controller.js","webpack:///./app/javascript/controllers/list_toggler_controller.js","webpack:///./app/javascript/controllers/listing_controller.js","webpack:///./app/javascript/controllers/modal_controller.js","webpack:///./app/javascript/controllers/new_feed_controller.js","webpack:///./app/javascript/controllers/onboarding_controller.js","webpack:///./app/javascript/controllers/password_visibility_controller.js","webpack:///./app/javascript/controllers/pricing_plans_controller.js","webpack:///./app/javascript/controllers/privacy_checker_controller.js","webpack:///./app/javascript/controllers/sidebar_controller.js","webpack:///./app/javascript/controllers/subscriptions_controller.js","webpack:///./app/javascript/controllers/tooltip_controller.js","webpack:///./app/javascript/controllers/trial_notice_controller.js","webpack:///./app/javascript/controllers/user_background_controller.js","webpack:///./app/javascript/controllers/user_card_controller.js","webpack:///./app/javascript/controllers/user_controller.js","webpack:///./app/javascript/controllers/view_controls_controller.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/@stimulus/webpack-helpers/dist/index.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","1","3","4","7","16","20","23","25","26","27","28","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","s","closeModal","modalId","MicroModal","close","showModal","bodyClass","srcElement","getAttribute","show","debugMode","disableScroll","onShow","modal","querySelector","classList","add","id","onClose","remove","closeTrigger","awaitCloseAnimation","stopPropagaton","hideAllBookmarksTippy","Array","from","querySelectorAll","forEach","el","_tippy","hide","destroyAllBookmarksTippy","destroy","words","array","minWordsLength","uniq","map","sentence","tokenize","flat","filter","word","string","split","v","a","indexOf","uniqBy","field","hash","element","values","prepareModal","controller","action","modalName","orgId","path","$document","$","Turbo","clearCache","ajax","url","done","result","append","deleteBookmarkCard","$el","count","$element","parseInt","text","replace","method","params","doneFn","thenFn","beforeSend","xhr","setRequestHeader","attr","then","ajaxPost","fn","ajaxDelete","ajaxGet","ajaxPut","defaultTippyOptions","interactive","trigger","theme","arrow","allowHTML","checkAuthentication","Tefter","user_signed_in","stopPropagation","preventDefault","location","signInPath","tippyWithDynamicContent","tippyOptions","options","hideAllTippys","ignoreEventType","tippyVisible","state","isVisible","tippyComponent","hasTippy","tippy","response","setContent","webShare","shareData","title","dataset","navigator","share","EventListener","eventTarget","eventName","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","bindingDisconnected","delete","handleEvent","extendedEvent","stopImmediatePropagation_1","stopImmediatePropagation","assign","immediatePropagationStopped","extendEvent","_i","_a","bindings","sort","left","right","leftIndex","index","rightIndex","configurable","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","eventListener","stop","reduce","listeners","concat","fetchEventListenerForBinding","handleError","detail","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","createEventListener","set","descriptorPattern","parseEventTarget","eventTargetName","Action","descriptor","tagName","toLowerCase","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","forToken","token","descriptorString","content","matches","trim","match","toString","eventNameSuffix","Binding","context","willBeInvokedByEvent","invokeWithEvent","Element","contains","scope","containsElement","ElementObserver","delegate","_this","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","attributes","childList","subtree","refresh","takeRecords","matchElementsInTree","has","removeElement","_b","_c","addElement","mutations_1","mutation","processMutation","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","size","prune","extendStatics","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","__extends","setPrototypeOf","__proto__","b","__","constructor","_super","IndexedMultimap","keysByValue","keys","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","Math","max","_","findIndex","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","Context","controllerConstructor","bindingObserver","dispatcher","initialize","parentElement","blessControllerConstructor","extend","bless","extendWithReflect","Controller","_newTarget","Reflect","construct","arguments","apply","Module","definition","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","DataMap","getFormattedKey","removeAttribute","char","attributeValueContainsToken","TargetSet","targetName","find","targetNames","getSelectorForTargetNames","findElement","findAll","findAllElements","getSelectorForTargetName","join","targetDescriptor","targetAttribute","Scope","targets","tail","filterElements","closest","controllerSelector","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","rejected","__generator","body","f","y","g","label","sent","trys","ops","verb","iterator","op","TypeError","pop","Application","documentElement","router","readyState","register","load","rest","definitions","isArray","unload","identifiers","getControllerForElementAndIdentifier","defineTargetProperties","ancestors","getPrototypeOf","getAncestorsForConstructor","getOwnTargetNamesForConstructor","getTargetNamesForConstructor","properties","charAt","toUpperCase","capitalize","_extends","source","isBrowser","ua","userAgent","isIE","test","isUCBrowser","isIOS","platform","MSStream","defaultProps","a11y","animateFill","animation","appendTo","aria","arrowType","boundary","delay","distance","duration","flip","flipBehavior","flipOnUpdate","followCursor","hideOnClick","ignoreAttributes","inertia","interactiveBorder","interactiveDebounce","lazy","maxWidth","multiple","offset","onHidden","onHide","onMount","onShown","onTrigger","placement","popperOptions","role","showOnInit","sticky","touch","touchHold","triggerTarget","updateDuration","wait","zIndex","POPPER_INSTANCE_DEPENDENCIES","elementProto","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","arrayFrom","closestCallback","callback","PASSIVE","passive","PLACEMENT_ATTRIBUTE","OUT_OF_BOUNDARIES_ATTRIBUTE","IOS_CLASS","ACTIVE_CLASS","POPPER_CLASS","TOOLTIP_CLASS","CONTENT_CLASS","BACKDROP_CLASS","ARROW_CLASS","ROUND_ARROW_CLASS","POPPER_SELECTOR","TOOLTIP_SELECTOR","CONTENT_SELECTOR","BACKDROP_SELECTOR","ARROW_SELECTOR","ROUND_ARROW_SELECTOR","isUsingTouch","onDocumentTouch","performance","onDocumentMouseMove","lastMouseMoveTime","now","onWindowBlur","activeElement","blur","isReferenceElement","obj","getValue","defaultValue","debounce","ms","arg","getModifier","modifiers","includes","isRealElement","isSingular","invokeWithArgsOrReturn","args","setFlipModifierEnabled","enabled","div","setTransitionDuration","els","style","transitionDuration","setVisibilityState","evaluateProps","reference","props","out","acc","valueAsString","JSON","parse","getDataAttributeOptions","validateOptions","option","setInnerHTML","html","contentEl","getChildren","popper","tooltip","backdrop","addInertia","createArrowElement","className","createBackdropElement","addInteractive","updateTransitionEndListener","listener","webkitTransition","getBasicPlacement","fullPlacement","updateTheme","themeName","createPopperElement","position","top","updatePopperElement","prevProps","nextProps","_getChildren","removeChild","replaceChild","removeInteractive","removeInertia","idCounter","mouseMoveListeners","createTippy","collectionProps","lastTriggerEventType","lastMouseMoveEvent","showTimeoutId","hideTimeoutId","scheduleHideAnimationFrameId","previousPlacement","currentMountCallback","currentTransitionEndListener","currentComputedPadding","isScheduledToShow","isBeingDestroyed","wasVisibleDuringPreviousUpdate","hasMountCallbackRun","debouncedOnMouseMove","onMouseMove","popperChildren","instance","popperInstance","isEnabled","isDestroyed","isMounted","isShown","clearDelayTimeouts","enable","disable","destroyTargetInstances","removeTriggersFromReference","child","addTriggersToReference","createPopperInstance","scheduleShow","getEventListenersTarget","removeFollowCursorListener","positionVirtualReferenceNearCursor","cleanupInteractiveMouseListeners","scheduleHide","addDocumentClickListener","onDocumentClick","removeDocumentClickListener","getTransitionableElements","getIsInLooseFollowCursorMode","makeSticky","prevRefRect","getBoundingClientRect","updatePosition","currentRefRect","bottom","scheduleUpdate","requestAnimationFrame","onTransitionedOut","onTransitionEnd","parentNode","onTransitionedIn","on","eventType","handler","onMouseLeave","onDelegateShow","onDelegateHide","onBlur","_ref","_lastMouseMoveEvent","x","clientX","clientY","isCursorOverReference","rect","isHorizontal","isVertical","isVerticalPlacement","isVariation","offsetWidth","offsetHeight","halfSize","verticalIncrease","horizontalIncrease","referenceNode","clientWidth","clientHeight","width","height","update","isEventListenerStopped","MouseEvent","isCursorOverPopper","popperPlacement","popperRect","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","isCursorOutsideInteractiveBorder","relatedTarget","supportsTouch","isTouchEvent","runMountCallback","reflow","_instance$popperChild","preventOverflowModifier","applyMutations","flipped","transition","basicPlacement","styles","padding","isPaddingNumber","computedPadding","config","eventsEnabled","preventOverflow","boundariesElement","behavior","onCreate","onUpdate","mount","isInLooseFollowCursorMode","enableEventListeners","shouldAvoidCallingOnTrigger","targetEl","createDelegateChildTippy","cancelAnimationFrame","prop","visibility","transitionableElements","transitionDelay","round","disableEventListeners","globalEventListenersBound","virtualReference","polyfills","isVirtual","classNames","polyfillElementPrototypeProperties","instances","NodeList","getArrayOfElements","version","defaults","setDefaults","partialDefaults","hideAll","excludedReferenceOrInstance","exclude","isExcluded","group","_ref$delay","_ref$duration","isAnyTippyOpen","setIsAnyTippyOpen","updateInstances","_originalProps","css","textContent","firstStyleOrLinkTag","insertBefore","injectCSS","_typeof","Function","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","len","arr2","_defineProperties","writable","FOCUSABLE_ELEMENTS","Modal","activeModal","validateModalPresence","validateArgs","targetModal","_ref$triggers","triggers","_ref$onShow","_ref$onClose","_ref$openTrigger","openTrigger","_ref$closeTrigger","_ref$disableScroll","_ref$disableFocus","disableFocus","_ref$awaitCloseAnimat","_ref$awaitOpenAnimati","awaitOpenAnimation","_ref$debugMode","Constructor","_classCallCheck","getElementById","registerTriggers","onClick","onKeydown","protoProps","staticProps","_len","_key","Boolean","_this2","scrollBehaviour","addEventListeners","setFocusToFirstNode","removeEventListeners","focus","toggle","overflow","keyCode","maintainFocus","focusableNodes","getFocusableNodes","focusedItemIndex","shiftKey","warn","triggerMap","validateTriggerPresence","init","triggerAttr","generateTriggerMap","closeModalById","timeoutDuration","longerTimeoutBrowsers","called","scheduled","isFunction","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","host","getScrollParent","_getStyleComputedProp","overflowX","overflowY","getReferenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","end","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","subtract","scrollTop","scrollLeft","modifier","getBordersSize","axis","sideA","sideB","parseFloat","getSize","computedStyle","getWindowSizes","classCallCheck","createClass","defineProperties","getClientRect","offsets","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","getBoundaries","boundaries","boundariesNode","_getWindowSizes","getArea","computeAutoPlacement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginBottom","marginRight","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","ends","cur","arrowStyles","positionFixed","originalPlacement","isCreated","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","prefix","toCheck","willChange","removeOnDestroy","getWindow","attachToScrollParents","scrollParents","isBody","setupEventListeners","updateBound","scrollElement","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","mergeWithPrevious","str","toValue","index2","Defaults","shiftvariation","_data$offsets","shiftOffsets","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","jquery","Utils","global","PopperUtils","func","maxTimeoutId","stamp","timeoutId","trailingCall","lastCalled","maxWait","trailing","nativeMax","Date","leading","objectTypes","delayed","remaining","isCalled","maxDelayed","leadingCall","MONTH_NAMES","getFormattedDate","date","prefomattedDate","hideYear","day","getDate","month","getMonth","year","getFullYear","hours","getHours","minutes","getMinutes","timeAgo","dateParam","today","yesterday","seconds","minuteName","hourName","days","isThisYear","toDateString","BookmarkForm","$uri","$list_ids","$showHideNotes","oldUri","val","URI_REGEX","bindHandlers","inferTitleAndTags","hasClass","checkHaveIt","onChange","handleListUpdate","toggleClass","click","$bookmarkVisibility","$visibilitySelect","$bookmarkLabelVisibility","$showHideVisibility","$bookmarkTags","$bookmarkLabelTags","$showHideTags","tags","ref","select","$bookmarkOrgs","$bookmarkLabelOrgs","$showHideOrgs","$bookmarkTitle","$bookmarkLabelTitle","$showHideTitle","checkForInput","each","change","visibilityChoice","removeClass","addClass","_event","lists","$visibility","hidden","currentTarget","oldUrl","$title","$titleLabel","$notes","$tagsLabel","forceUpdate","uriChanged","post","metadata","notes","addTag","$haveIt","listId","URLSearchParams","organization_id","organizationId","bookmark","visit","$link","Endless","THRESHOLD","debounce_time","paginationUrl","isPaginating","currentPage","older","$paginationElem","totalPages","off","handleScroll","pageNumber","historyEndpoint","$window","paginationEndpoint","makeArray","$users","Timeline","userName","timestamp","queryParams","urlParams","$resources","oldest","oldestTimestamp","history","pushState","turbo","Onboarding","inProgress","timer","setInterval","refreshInterval","getJSON","handleStatuses","clearInterval","progress","statuses","first_follow","complete","setOngoing","extension_installed","completed_import","has_avatar","first_bookmark","review_privacy","classname","$modal","orgName","status","responseText","errors","messageTarget","innerHTML","resource","existing","buttonTarget","organizationSlug","ctrl","fetchMetadata","inputTarget","refreshUrl","Subcscriptions","Stripe","stripe","tefter_stripe_public_key","redirectToCheckout","sessionId","checkout_session_id","TrialNotice","clickSubscription","resizeGridItem","item","rowHeight","rowGap","rowSpan","ceil","gridRowEnd","startCoreBehavior","initTefter","ajaxSetup","headers","$headerAvatar","headerAvatar","headerAvatarContent","loadAvatarContent","$sidebarAvatar","sidebarAvatar","loadSidebarContent","$helpMenu","$sidebarHelpMenu","helpMenu","sidebarHelpMenu","loadHelpMenuContent","grid","getElementsByClassName","getPropertyValue","allItems","animate","opacity","resizeAllGridItems","TefterBeforeInstallPromptEvent","webpackPolyfill","deprecate","paths","factory","_typeof2","adapters","logger","self","WebSocket","log","_adapters$logger","messages","getTime","secondsSince","time","ConnectionMonitor","connection","visibilityDidChange","reconnectAttempts","isRunning","startedAt","stoppedAt","startPolling","getPollInterval","stopPolling","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","pollTimeout","reconnectIfStale","_constructor$pollInte","pollInterval","interval","multiplier","number","clamp","connectionIsStale","staleThreshold","disconnectedRecently","reopen","visibilityState","isOpen","INTERNAL","message_types","welcome","ping","confirmation","rejection","disconnect_reasons","unauthorized","invalid_request","server_restart","default_mount_path","protocols","supportedProtocols","Connection","consumer","open","subscriptions","monitor","disconnected","send","webSocket","stringify","isActive","getState","uninstallEventHandlers","installEventHandlers","allowReconnect","reopenDelay","getProtocol","protocol","isState","isProtocolSupported","states","events","_JSON$parse","reason","reconnect","reload","notify","notifyAll","willAttemptReconnect","Subscription","mixin","perform","command","unsubscribe","Subscriptions","channelName","channel","subscription","ensureActiveConnection","sendCommand","forget","callbackName","_this3","_len2","_key2","Consumer","_url","createWebSocketURL","href","getConfig","createConsumer","Rails","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","cspNonce","oMatchesSelector","getData","setData","csrfParam","csrfToken","meta","CSRFProtection","refreshCSRFTokens","param","input","CustomEvent","fire","evt","createEvent","initCustomEvent","bubbles","cancelable","Event","defaultPrevented","dispatchEvent","stopEverything","AcceptHeaders","createXHR","prepareOptions","processResponse","xml","json","getResponseHeader","success","statusText","XMLHttpRequest","OPENED","dataType","accept","crossDomain","withCredentials","onreadystatechange","DONE","parser","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","toArray","serializeElement","additionalParam","inputs","disabled","selected","checked","encodeURIComponent","formElements","form","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","link","display","isRemote","handleRemote","button","enctype","FormData","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","ajaxPrefilter","originalOptions","_rails_loaded","webpackContext","req","webpackContextResolve","code","scanProcess","scanTarget","handleSuccess","hasDateTarget","bookmarkDate","dateTarget","hasShareTarget","shareTarget","hasLikeButtonTarget","cdn","likedBookmarkIds","likeButtonTarget","hasNotesTarget","notesTarget","resource_path","removeAttr","bookmarkId","list_id","like","linkId","likeUrl","likeCountElement","link_id","is","back","actionName","controllerName","listSlug","ellipsisButton","$parent","visitedUrl","tag","domain","hostname","endsWith","environment","isChecked","unshift","username","visibleTags","hasClearTarget","$clearFilters","clearTarget","attach","numberTarget","numbersLength","chars","newValue","cvcTarget","monthTarget","yearTarget","anchorValue","parents","$selectedTags","$bookmarkFilters","golinkId","golinkName","golinkUrl","golinkDescription","description","hasUrlTarget","urlTarget","localStorage","getItem","setItem","hasNameTarget","nameTarget","haveItElement","haveitTarget","currentName","golink","linkElement","guide","permissions","query","clipboard","writeText","caption","subscriptionsCountTarget","decrementCount","increamentCount","listNode","regex","RegExp","selectedLists","unselectedLists","list","localeCompare","previousName","list_name","_initial_state","_hidden","_id","_hiddenBookmarks","Number","_visibleBookmarks","_sharedBookmarks","_subscriptionsCount","publicBookmarks","privateBookmarks","passwordFieldTarget","_initialState","_privacy","_followers","menuItems","localName","imgEl","realImage","$card","classes","updateBackground","background","availableImages","images","removeBackgroundElement","renderImageThumbs","img","backgrounds","res","toggleButton","updateForm","linkTarget","subscribeLabel","subscribingLabel","$button","pred","separator","currentView","optionsTemplate","currentSize","currentOrder","renderViewMode","renderSizeMode","viewMode","orderMode","sizeMode","settingsContent","defaultContent","feedContent","exploreContent","goLinksContent","listsContent","$picker","loadContent","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","skipTempReset","prev","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","_templateObject","_templateObject2","_get","receiver","base","_getPrototypeOf","_superPropBase","desc","getOwnPropertyDescriptor","_defineProperty","_taggedTemplateLiteral","strings","raw","freeze","_createForOfIteratorHelper","allowArrayLike","it","F","_e2","normalCompletion","didErr","_e3","return","_slicedToArray","_arrayWithHoles","_s","_e","_arr","_n","_d","_iterableToArrayLimit","_nonIterableRest","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_createClass","_inherits","subClass","superClass","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","NewTarget","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","_wrapNativeSuper","Class","_cache","Wrapper","_construct","Parent","sham","Proxy","valueOf","customElements","polyfillWrapFlushCallback","BuiltInHTMLElement","HTMLElement","wrapperForTheName","FrameLoadingStyle","submittersByForm","clickCaptured","candidate","submitter","vendor","SubmitEvent","HTMLFormElement","FrameElement","_HTMLElement","loaded","delegateConstructor","loadingStyleChanged","sourceURLChanged","disabledChanged","eager","frameLoadingStyleFromString","isLoading","isPreview","expandURL","locatable","URL","baseURI","getAnchor","anchorMatch","getExtension","pathname","getPathComponents","getLastPathComponent","isPrefixedBy","baseURL","origin","getPrefix","startsWith","getRequestURL","anchor","toCacheKey","FetchMethod","FetchResponse","ok","succeeded","statusCode","redirected","contentType","header","clone","dispatch","nextAnimationFrame","parseHTMLDocument","unindent","lines","interpolate","indent","line","uuid","random","FetchRequest","abortController","AbortController","resolveRequestPromise","defaultHeaders","isIdempotent","mergeFormDataEntries","entries","_allowRequestToBeIntercepted","_receive","_perform","searchParams","abort","_callee","fetchOptions","_context","prepareHeadersForRequest","allowRequestToBeIntercepted","requestStarted","receive","t0","requestErrored","requestFinished","_callee2","fetchResponse","_context2","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","_x","credentials","redirect","signal","abortSignal","referrer","_callee3","requestInterception","_context3","resume","_x2","_step","currentSearchParams","_iterator","_ref3","File","FormSubmissionState","FormEnctype","AppearanceObserver","intersect","lastEntry","isIntersecting","elementAppearedInViewport","intersectionObserver","IntersectionObserver","unobserve","StreamMessage","templateElement","_step2","fragment","createDocumentFragment","_iterator2","foreignElements","importNode","templateChildren","streamElements","FormSubmission","formElement","mustRedirect","initialized","formData","buildFormData","fetchRequest","_start","put","patch","fetchMethodFromString","formElementAction","urlEncoded","stringFormData","encoding","multipart","plain","formEnctypeFromString","_ref5","_ref6","_callee4","_FormSubmissionState","_context4","_FormSubmissionState2","stopping","stopped","cancel","cookieName","cookie","decodeURIComponent","getCookieValue","getMetaContent","waiting","formSubmission","formSubmissionStarted","clientError","serverError","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","formSubmissionErrored","receiving","formSubmissionSucceededWithResponse","formSubmissionFinished","Snapshot","getElementForAnchor","snapshot","_step3","permanentElementMap","_iterator3","permanentElements","currentPermanentElement","newPermanentElement","getPermanentElementById","FormInterceptor","_this4","submitBubbled","shouldInterceptFormSubmission","formSubmissionIntercepted","View","resolveRenderPromise","resolveInterceptionPromise","_renderSnapshot","_render","scrollToElement","focusElement","scrollToPosition","scrollToAnchor","scrollIntoView","_ref7","scrollRoot","scrollTo","_callee5","renderer","shouldRender","renderInterception","_this5","_context5","newSnapshot","renderPromise","prepareToRenderSnapshot","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","finishRenderingSnapshot","invalidate","_x3","viewInvalidated","markAsPreview","prepareToRender","_callee6","_context6","render","_x4","finishRendering","FrameView","_View","_super2","LinkInterceptor","_this6","clickBubbled","respondsToEventTarget","clickEvent","linkClicked","shouldInterceptLinkClick","linkClickIntercepted","willVisit","Bardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","permanentElement","placeholder","createPlaceholderForPermanentElement","replaceWith","cloneNode","getPlaceholderById","placeholders","bardo","enter","leave","Renderer","currentSnapshot","_this7","resolvingFunctions","createdScriptElement","destinationElement","sourceElement","_i2","_arr2","_ref9","copyElementAttributes","preservingPermanentElements","connectedSnapshot","firstAutofocusableElement","elementIsFocusable","getPermanentElementMapForSnapshot","_Renderer","FrameRenderer","_render2","_super3","_callee7","_this8","_context7","loadFrameElement","scrollFrameIntoView","focusFirstAutofocusableElement","activateScriptElements","destinationRange","selectNodeContents","currentElement","deleteContents","frameElement","newElement","sourceRange","extractContents","autoscroll","block","_step4","_iterator4","newScriptElements","inertScriptElement","activatedScriptElement","createScriptElement","ProgressBar","_this9","hiding","visible","trickle","setValue","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","installProgressElement","startTrickling","_this10","fadeProgressElement","uninstallProgressElement","stopTrickling","firstChild","animationDuration","trickleInterval","_this11","defaultCSS","HeadSnapshot","_Snapshot","_super4","_this12","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","outerHTML","details","elementType","tracked","elementIsTracked","_this13","getElementsMatchingTypeNotInSnapshot","matchedType","_this14","_ref10","_ref11","_this15","_this15$detailsByOute","findMetaElementByName","_this16","elementIsMetaElementWithName","elementIsScript","elementIsStylesheet","TimingMetric","VisitState","PageSnapshot","_Snapshot2","_super5","headSnapshot","_this17","getSetting","cacheControlValue","getMetaValue","fromDocument","_ref12","SystemStatusCode","defaultOptions","historyChanged","Visit","restorationIdentifier","timingMetrics","followedRedirect","scrolled","snapshotCached","_Object$assign2","snapshotHTML","isSamePage","locationWithActionIsSamePage","_render3","_requestFailedWithResponse","_requestSucceededWithResponse","adapter","view","getRestorationDataForIdentifier","recordTimingMetric","visitStart","visitStarted","cancelRender","canceled","visitEnd","completed","visitCompleted","followRedirect","failed","visitFailed","actionForHistory","getHistoryMethodForAction","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","requestStart","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","requestEnd","visitRequestFinished","_this18","_this$response","responseHTML","_callee8","_context8","cacheSnapshot","renderPage","fromHTMLString","visitRendered","renderError","fail","getCachedSnapshotForLocation","getPreloadedSnapshot","hasAnchor","isPreviewable","getCachedSnapshot","_this19","_callee9","_context9","redirectedToLocation","visitProposedToLocation","_this20","_callee10","_context10","_callee11","_context11","contentTypeMismatch","_x5","_x6","_callee12","_context12","_x7","_x8","networkFailure","scrollToRestoredPosition","scrollToTop","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","restorationData","metric","replaceState","hasCachedSnapshot","_callee13","_this21","_context13","frame","performScroll","_x9","BrowserAdapter","session","_this22","progressBar","showProgressBar","startVisit","issueRequest","changeHistory","goToSamePageAnchor","loadCachedSnapshot","showVisitProgressBarAfterDelay","loadResponse","timeoutFailure","hideVisitProgressBar","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","removeStaleElements","_step5","_iterator5","FormSubmitObserver","_this23","submitCaptured","willSubmitForm","formSubmitted","FrameRedirector","linkInterceptor","formInterceptor","shouldRedirect","findFrameElement","History","_this24","pageLoaded","onPopState","shouldHandlePopState","historyPoppedToLocationWithRestorationIdentifier","onPageLoad","_ref17","_callee14","_context14","_x10","additionalData","previousScrollRestoration","scrollRestoration","pageIsLoaded","LinkClickObserver","_this25","clickEventIsSignificant","composedPath","findLinkFromClickTarget","_location","getLocationForLink","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","which","altKey","isAction","PageStage","Navigator","_formSubmissionFailedWithResponse","_formSubmissionSucceededWithResponse","allowsVisitingLocationWithAction","currentVisit","proposeVisit","getActionForFormSubmission","_callee15","visitOptions","_context15","clearSnapshotCache","_x11","_x12","_callee16","_context16","_x13","_x14","currentAnchor","isRestorationToTop","oldURL","newURL","PageObserver","_this26","stage","initial","interpretReadyState","pageIsInteractive","pageIsComplete","pageWillUnload","loading","pageBecameInteractive","ScrollObserver","_this27","onScroll","pageXOffset","pageYOffset","scrollPositionChanged","StreamObserver","_this28","sources","inspectFetchResponse","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageEvent","receiveMessageHTML","_receiveMessageResponse","streamSourceIsConnected","_callee17","_context17","_x15","receivedMessageFromStream","_Renderer2","ErrorRenderer","_render4","_super6","_callee18","_context18","replaceHeadAndBody","_document","newHead","_step6","_iterator6","scriptElements","replaceableElement","_Renderer3","PageRenderer","_render5","_super7","isVisitable","trackedElementsAreIdentical","mergeHead","_callee19","_context19","replaceBody","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","_this29","activateNewBody","assignNewBody","currentHeadSnapshot","trackedElementSignature","newHeadSnapshot","_step7","_iterator7","newHeadStylesheetElements","_step8","_iterator8","newHeadScriptElements","_step9","_iterator9","currentHeadProvisionalElements","_step10","_iterator10","newHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","_step11","_iterator11","newBodyScriptElements","HTMLBodyElement","getStylesheetElementsNotInSnapshot","getScriptElementsNotInSnapshot","provisionalElements","SnapshotCache","snapshots","read","write","splice","_step12","_iterator12","_View2","PageView","_cacheSnapshot","_super8","_this30","snapshotCache","_callee20","_location2","_context20","shouldCacheSnapshot","viewWillCacheSnapshot","fromElement","isCacheable","extendURLWithDeprecatedProperties","deprecatedLocationPropertyDescriptors","absoluteURL","Session","pageObserver","cacheObserver","linkClickObserver","formSubmitObserver","scrollObserver","streamObserver","frameRedirector","drive","connectStreamSource","disconnectStreamSource","pageInvalidated","updateRestorationData","elementDriveEnabled","locationIsVisitable","applicationAllowsFollowingLinkToLocation","getActionForLink","convertLinkWithMethodClickToFormSubmission","linkMethod","applicationAllowsVisitingLocation","silent","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","getTimingMetrics","notifyApplicationAfterVisitingSamePageLocation","submitForm","assumeControlOfScrollRestoration","relinquishControlOfScrollRestoration","renderStreamMessage","notifyApplicationBeforeCachingSnapshot","_ref18","notifyApplicationBeforeRender","notifyApplicationAfterRender","notifyApplicationAfterFrameLoad","notifyApplicationAfterFrameRender","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","container","rootLocation","navigator$1","registerAdapter","setProgressBarDelay","FrameController","resolveVisitPromise","connected","hasBeenLoaded","settingSourceURL","appearanceObserver","_extractForeignFrameElement","_visit","_requestSucceededWithResponse2","_loadResponse","_loadSourceURL","reloadable","loadingStyle","loadSourceURL","_callee21","previousURL","_context21","sourceURL","currentURL","frameLoaded","_callee22","_parseHTMLDocument","_context22","extractForeignFrameElement","t1","frameRendered","t2","_x16","shouldInterceptNavigation","navigateFrame","_callee23","_context23","_x17","_x18","_callee24","_this31","_context24","_x19","getFrameElementById","_callee25","_context25","CSS","escape","activateElement","_x20","connectedCallback","StreamActions","after","_this32","targetElements","templateContent","nextSibling","_this33","removeDuplicateTargetChildren","before","_this34","prepend","_this35","_this36","_this37","_HTMLElement2","StreamElement","_render6","_connectedCallback","_super9","_callee26","_context26","_callee28","_this38","_context28","_callee27","_context27","beforeRenderEvent","performAction","duplicateChildren","existingChildren","flatMap","newChildrenIds","actionFunction","raise","targetElementsById","targetElementsByQuery","HTMLTemplateElement","getConsumer","_getConsumer","setConsumer","newConsumer","_createConsumer","_yield$import","subscribeTo","_subscribeTo","_yield$getConsumer","currentScript","TurboCableStreamSourceElement","received","dispatchMessageEvent","MessageEvent","signed_stream_name","require","logicalName","identifierForContextKey","default","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext","ActionCable"],"mappings":"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","file":"js/application-d395bcf7b23772e5cf9f.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0,\n \t\t3: 0,\n \t\t4: 0,\n \t\t7: 0,\n \t\t16: 0,\n \t\t20: 0,\n \t\t23: 0,\n \t\t25: 0,\n \t\t26: 0,\n \t\t27: 0,\n \t\t28: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"0\":\"actioncable\"}[chunkId]||chunkId) + \"-\" + {\"0\":\"279b6ce942deb612ca59\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//d1eub78dsdxite.cloudfront.net/packs/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 166);\n","import MicroModal from 'micromodal';\nimport tippy from 'tippy.js';\n\nexport function closeModal(modalId) {\n MicroModal.close(modalId);\n}\n\nexport function showModal(modalId) {\n let bodyClass = '.dashboard';\n\n modalId = modalId || event.srcElement.getAttribute('data-modal-id');\n\n if (modalId == \"\") {\n event.stopPropagaton();\n\n return;\n }\n\n if (modalId == null) {\n return;\n }\n\n MicroModal.show(modalId, {\n debugMode: false,\n disableScroll: false,\n onShow: function (modal) { document.querySelector(bodyClass).classList.add(modal.id) },\n onClose: function (modal) { document.querySelector(bodyClass).classList.remove(modal.id) },\n closeTrigger: 'data-custom-close',\n awaitCloseAnimation: true\n })\n}\n\nexport function hideAllBookmarksTippy() {\n Array.from(document.querySelectorAll('.tippy-hide-component')).forEach(function(el) {\n if (el._tippy) {\n el._tippy.hide();\n }\n });\n}\n\nexport function destroyAllBookmarksTippy() {\n Array.from(document.querySelectorAll('.js-burger-button')).forEach(function(el) {\n if (el._tippy) {\n el._tippy.destroy();\n }\n });\n}\n\n/* Given an array of strings, it returns an array of uniq words.\n *\n * @param array [Array]\n * @param minWordsLength [Integer] ignore words smaller than this threshold\n * @return [Array] an array of words\n */\nexport function words(array, minWordsLength = 1) {\n return uniq(array.\n map(sentence => tokenize(sentence)).\n flat().\n filter(word => word.length > minWordsLength));\n}\n\n/* Tokenizes a valid string into words.\n *\n * @param string [String] the string\n * @return [Array] an array of words\n */\nexport function tokenize(string) {\n if (string === undefined || string == null || typeof(string) != 'string') {\n return [];\n }\n\n return string.split(/\\W+/)\n}\n\nexport function uniq(array) {\n return array.filter((v, i, a) => a.indexOf(v) === i);\n}\n\nexport function uniqBy(array, field) {\n let hash = {};\n\n array.forEach((element) => {\n const key = element[field];\n\n if (!hash[key]) {\n hash[key] = element;\n }\n });\n\n return Object.values(hash);\n}\n\nexport function prepareModal(event, controller = 'bookmarks', action, modalName) {\n const id = event.srcElement.getAttribute('data-id');\n const orgId = event.srcElement.getAttribute('data-organization-id');\n let path = `/${controller}/${id}/${action}`;\n\n if (orgId != '') {\n path = `/orgs/${orgId}` + path;\n }\n\n let $document = $('body');\n const modalId = `${modalName}-${id}`;\n\n // Hide all other tippy elements.\n hideAllBookmarksTippy();\n\n // Clear Turbolinks cache\n Turbo.clearCache();\n\n $.ajax({\n url: path\n }).done(function (result) {\n $document.append(result);\n\n showModal(modalId);\n });\n}\n\nfunction decrementCount($el) {\n const count = parseInt($el.text().replace('(', '').replace(')', ''), 10);\n\n $el.text(`(${count - 1})`);\n}\n\n// Removes bookmark card, tippy elements and decrements counter\nexport function deleteBookmarkCard(element) {\n let id = element.getAttribute('data-id');\n const $element = $(\"li[data-id='\" + id + \"']\")[0];\n\n destroyAllBookmarksTippy();\n\n if ($element) {\n $element.remove();\n }\n\n decrementCount($('.resources-count'));\n}\n\nfunction ajax(path, method, data, params, doneFn = function(result) {},\n thenFn = function(result) {}) {\n $.ajax({\n url: path,\n method: method,\n params: params,\n beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name=\"csrf-token\"]').attr('content'))},\n data: data }).\n done(doneFn).\n then(thenFn);\n}\n\nexport function ajaxPost(path, data, fn = function(result) {}) {\n ajax(path, 'POST', data, {}, fn);\n}\n\nexport function ajaxDelete(path, data, fn = function(result) {}) {\n ajax(path, 'DELETE', data, {}, fn);\n}\n\nexport function ajaxGet(path, params, fn) {\n $.ajax({\n url: path,\n params: params,\n type: 'get'\n }).\n then(fn);\n}\n\nexport function ajaxPut(path, data, fn = function(result) {}) {\n $.ajax({\n url: path,\n type: 'put',\n data: data }).\n then(fn);\n}\n\nexport function defaultTippyOptions() {\n return {\n interactive: true,\n trigger: 'click',\n theme: 'light',\n arrow: 'true',\n allowHTML: true\n }\n}\n\n// Stops event propagation and redirects to users login page if a non logged in\n// user tries to access this event.\nexport function checkAuthentication(event) {\n if (Tefter.user_signed_in === false) {\n event.stopPropagation();\n event.preventDefault();\n\n window.location = window.Tefter.signInPath;\n\n return;\n }\n}\n\nexport function tippyWithDynamicContent(event, path, params, tippyOptions,\noptions = { hideAllTippys: true, ignoreEventType: \"mouseenter\" }) {\n event.preventDefault();\n\n if (options.ignoreEventType == event.type) {\n return;\n }\n\n let tippyVisible = false;\n\n if (event.srcElement._tippy) {\n tippyVisible = event.srcElement._tippy.state.isVisible;\n }\n\n // Hide all other tippy elements.\n if (options.hideAllTippys == true) {\n hideAllBookmarksTippy();\n }\n\n // Do not try to re-render tippy.\n if (tippyVisible == true) {\n return;\n }\n\n const hasTippy = event.srcElement._tippy;\n let tippyComponent;\n\n tippyComponent = event.srcElement._tippy || tippy(event.srcElement, tippyOptions);\n\n // Load content only when _tippy is undefined\n if (hasTippy == undefined) {\n ajaxGet(path, params, function(response) {\n tippyComponent.setContent(response);\n })\n }\n\n tippyComponent.show();\n}\n\nexport function webShare(event) {\n const shareData = {\n title: event.target.dataset.title,\n text: event.target.dataset.text,\n url: event.target.dataset.url\n };\n\n navigator.share(shareData).then(() => {}).catch();\n}\n","var EventListener =\n/** @class */\nfunction () {\n function EventListener(eventTarget, eventName) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.unorderedBindings = new Set();\n }\n\n EventListener.prototype.connect = function () {\n this.eventTarget.addEventListener(this.eventName, this, false);\n };\n\n EventListener.prototype.disconnect = function () {\n this.eventTarget.removeEventListener(this.eventName, this, false);\n }; // Binding observer delegate\n\n /** @hidden */\n\n\n EventListener.prototype.bindingConnected = function (binding) {\n this.unorderedBindings.add(binding);\n };\n /** @hidden */\n\n\n EventListener.prototype.bindingDisconnected = function (binding) {\n this.unorderedBindings.delete(binding);\n };\n\n EventListener.prototype.handleEvent = function (event) {\n var extendedEvent = extendEvent(event);\n\n for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {\n var binding = _a[_i];\n\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n };\n\n Object.defineProperty(EventListener.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.unorderedBindings).sort(function (left, right) {\n var leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n },\n enumerable: true,\n configurable: true\n });\n return EventListener;\n}();\n\nexport { EventListener };\n\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n } else {\n var stopImmediatePropagation_1 = event.stopImmediatePropagation;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation_1.call(this);\n }\n });\n }\n}","import { EventListener } from \"./event_listener\";\n\nvar Dispatcher =\n/** @class */\nfunction () {\n function Dispatcher(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n\n Dispatcher.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.connect();\n });\n }\n };\n\n Dispatcher.prototype.stop = function () {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.disconnect();\n });\n }\n };\n\n Object.defineProperty(Dispatcher.prototype, \"eventListeners\", {\n get: function get() {\n return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n return listeners.concat(Array.from(map.values()));\n }, []);\n },\n enumerable: true,\n configurable: true\n }); // Binding observer delegate\n\n /** @hidden */\n\n Dispatcher.prototype.bindingConnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n };\n /** @hidden */\n\n\n Dispatcher.prototype.bindingDisconnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }; // Error handling\n\n\n Dispatcher.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n Dispatcher.prototype.fetchEventListenerForBinding = function (binding) {\n var eventTarget = binding.eventTarget,\n eventName = binding.eventName;\n return this.fetchEventListener(eventTarget, eventName);\n };\n\n Dispatcher.prototype.fetchEventListener = function (eventTarget, eventName) {\n var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n var eventListener = eventListenerMap.get(eventName);\n\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName);\n eventListenerMap.set(eventName, eventListener);\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.createEventListener = function (eventTarget, eventName) {\n var eventListener = new EventListener(eventTarget, eventName);\n\n if (this.started) {\n eventListener.connect();\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.fetchEventListenerMapForEventTarget = function (eventTarget) {\n var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n\n return eventListenerMap;\n };\n\n return Dispatcher;\n}();\n\nexport { Dispatcher };","// capture nos.: 12 23 4 43 1 5 56 7 76\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#(.+))?$/;\nexport function parseDescriptorString(descriptorString) {\n var source = descriptorString.trim();\n var matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n identifier: matches[5],\n methodName: matches[7]\n };\n}\n\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\n\nexport function stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n } else if (eventTarget == document) {\n return \"document\";\n }\n}","import { parseDescriptorString, stringifyEventTarget } from \"./action_descriptor\";\n\nvar Action =\n/** @class */\nfunction () {\n function Action(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n\n Action.forToken = function (token) {\n return new this(token.element, token.index, parseDescriptorString(token.content));\n };\n\n Action.prototype.toString = function () {\n var eventNameSuffix = this.eventTargetName ? \"@\" + this.eventTargetName : \"\";\n return \"\" + this.eventName + eventNameSuffix + \"->\" + this.identifier + \"#\" + this.methodName;\n };\n\n Object.defineProperty(Action.prototype, \"eventTargetName\", {\n get: function get() {\n return stringifyEventTarget(this.eventTarget);\n },\n enumerable: true,\n configurable: true\n });\n return Action;\n}();\n\nexport { Action };\nvar defaultEventNames = {\n \"a\": function a(e) {\n return \"click\";\n },\n \"button\": function button(e) {\n return \"click\";\n },\n \"form\": function form(e) {\n return \"submit\";\n },\n \"input\": function input(e) {\n return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"change\";\n },\n \"select\": function select(e) {\n return \"change\";\n },\n \"textarea\": function textarea(e) {\n return \"change\";\n }\n};\nexport function getDefaultEventNameForElement(element) {\n var tagName = element.tagName.toLowerCase();\n\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\n\nfunction error(message) {\n throw new Error(message);\n}","var Binding =\n/** @class */\nfunction () {\n function Binding(context, action) {\n this.context = context;\n this.action = action;\n }\n\n Object.defineProperty(Binding.prototype, \"index\", {\n get: function get() {\n return this.action.index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventTarget\", {\n get: function get() {\n return this.action.eventTarget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n\n Binding.prototype.handleEvent = function (event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n };\n\n Object.defineProperty(Binding.prototype, \"eventName\", {\n get: function get() {\n return this.action.eventName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"method\", {\n get: function get() {\n var method = this.controller[this.methodName];\n\n if (typeof method == \"function\") {\n return method;\n }\n\n throw new Error(\"Action \\\"\" + this.action + \"\\\" references undefined method \\\"\" + this.methodName + \"\\\"\");\n },\n enumerable: true,\n configurable: true\n });\n\n Binding.prototype.invokeWithEvent = function (event) {\n try {\n this.method.call(this.controller, event);\n } catch (error) {\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element,\n index = _a.index;\n\n var detail = {\n identifier: identifier,\n controller: controller,\n element: element,\n index: index,\n event: event\n };\n this.context.handleError(error, \"invoking action \\\"\" + this.action + \"\\\"\", detail);\n }\n };\n\n Binding.prototype.willBeInvokedByEvent = function (event) {\n var eventTarget = event.target;\n\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return true;\n }\n };\n\n Object.defineProperty(Binding.prototype, \"controller\", {\n get: function get() {\n return this.context.controller;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"methodName\", {\n get: function get() {\n return this.action.methodName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n return Binding;\n}();\n\nexport { Binding };","var ElementObserver =\n/** @class */\nfunction () {\n function ElementObserver(element, delegate) {\n var _this = this;\n\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n\n ElementObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true,\n childList: true,\n subtree: true\n });\n this.refresh();\n }\n };\n\n ElementObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n\n ElementObserver.prototype.refresh = function () {\n if (this.started) {\n var matches = new Set(this.matchElementsInTree());\n\n for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {\n var element = _a[_i];\n\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n\n for (var _b = 0, _c = Array.from(matches); _b < _c.length; _b++) {\n var element = _c[_b];\n this.addElement(element);\n }\n }\n }; // Mutation record processing\n\n\n ElementObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n\n ElementObserver.prototype.processMutation = function (mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n } else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n };\n\n ElementObserver.prototype.processAttributeChange = function (node, attributeName) {\n var element = node;\n\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.matchElement(element)) {\n this.addElement(element);\n }\n };\n\n ElementObserver.prototype.processRemovedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n };\n\n ElementObserver.prototype.processAddedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }; // Element matching\n\n\n ElementObserver.prototype.matchElement = function (element) {\n return this.delegate.matchElement(element);\n };\n\n ElementObserver.prototype.matchElementsInTree = function (tree) {\n if (tree === void 0) {\n tree = this.element;\n }\n\n return this.delegate.matchElementsInTree(tree);\n };\n\n ElementObserver.prototype.processTree = function (tree, processor) {\n for (var _i = 0, _a = this.matchElementsInTree(tree); _i < _a.length; _i++) {\n var element = _a[_i];\n processor.call(this, element);\n }\n };\n\n ElementObserver.prototype.elementFromNode = function (node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n };\n\n ElementObserver.prototype.elementIsActive = function (element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n } else {\n return this.element.contains(element);\n }\n }; // Element tracking\n\n\n ElementObserver.prototype.addElement = function (element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n };\n\n ElementObserver.prototype.removeElement = function (element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n };\n\n return ElementObserver;\n}();\n\nexport { ElementObserver };","import { ElementObserver } from \"./element_observer\";\n\nvar AttributeObserver =\n/** @class */\nfunction () {\n function AttributeObserver(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n\n Object.defineProperty(AttributeObserver.prototype, \"element\", {\n get: function get() {\n return this.elementObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AttributeObserver.prototype, \"selector\", {\n get: function get() {\n return \"[\" + this.attributeName + \"]\";\n },\n enumerable: true,\n configurable: true\n });\n\n AttributeObserver.prototype.start = function () {\n this.elementObserver.start();\n };\n\n AttributeObserver.prototype.stop = function () {\n this.elementObserver.stop();\n };\n\n AttributeObserver.prototype.refresh = function () {\n this.elementObserver.refresh();\n };\n\n Object.defineProperty(AttributeObserver.prototype, \"started\", {\n get: function get() {\n return this.elementObserver.started;\n },\n enumerable: true,\n configurable: true\n }); // Element observer delegate\n\n AttributeObserver.prototype.matchElement = function (element) {\n return element.hasAttribute(this.attributeName);\n };\n\n AttributeObserver.prototype.matchElementsInTree = function (tree) {\n var match = this.matchElement(tree) ? [tree] : [];\n var matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n };\n\n AttributeObserver.prototype.elementMatched = function (element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementUnmatched = function (element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementAttributeChanged = function (element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n };\n\n return AttributeObserver;\n}();\n\nexport { AttributeObserver };","export function add(map, key, value) {\n fetch(map, key).add(value);\n}\nexport function del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nexport function fetch(map, key) {\n var values = map.get(key);\n\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n\n return values;\n}\nexport function prune(map, key) {\n var values = map.get(key);\n\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}","import { add, del } from \"./set_operations\";\n\nvar Multimap =\n/** @class */\nfunction () {\n function Multimap() {\n this.valuesByKey = new Map();\n }\n\n Object.defineProperty(Multimap.prototype, \"values\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (values, set) {\n return values.concat(Array.from(set));\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Multimap.prototype, \"size\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (size, set) {\n return size + set.size;\n }, 0);\n },\n enumerable: true,\n configurable: true\n });\n\n Multimap.prototype.add = function (key, value) {\n add(this.valuesByKey, key, value);\n };\n\n Multimap.prototype.delete = function (key, value) {\n del(this.valuesByKey, key, value);\n };\n\n Multimap.prototype.has = function (key, value) {\n var values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n };\n\n Multimap.prototype.hasKey = function (key) {\n return this.valuesByKey.has(key);\n };\n\n Multimap.prototype.hasValue = function (value) {\n var sets = Array.from(this.valuesByKey.values());\n return sets.some(function (set) {\n return set.has(value);\n });\n };\n\n Multimap.prototype.getValuesForKey = function (key) {\n var values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n };\n\n Multimap.prototype.getKeysForValue = function (value) {\n return Array.from(this.valuesByKey).filter(function (_a) {\n var key = _a[0],\n values = _a[1];\n return values.has(value);\n }).map(function (_a) {\n var key = _a[0],\n values = _a[1];\n return key;\n });\n };\n\n return Multimap;\n}();\n\nexport { Multimap };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return function (d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nimport { Multimap } from \"./multimap\";\nimport { add, del } from \"./set_operations\";\n\nvar IndexedMultimap =\n/** @class */\nfunction (_super) {\n __extends(IndexedMultimap, _super);\n\n function IndexedMultimap() {\n var _this = _super.call(this) || this;\n\n _this.keysByValue = new Map();\n return _this;\n }\n\n Object.defineProperty(IndexedMultimap.prototype, \"values\", {\n get: function get() {\n return Array.from(this.keysByValue.keys());\n },\n enumerable: true,\n configurable: true\n });\n\n IndexedMultimap.prototype.add = function (key, value) {\n _super.prototype.add.call(this, key, value);\n\n add(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype.delete = function (key, value) {\n _super.prototype.delete.call(this, key, value);\n\n del(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype.hasValue = function (value) {\n return this.keysByValue.has(value);\n };\n\n IndexedMultimap.prototype.getKeysForValue = function (value) {\n var set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n };\n\n return IndexedMultimap;\n}(Multimap);\n\nexport { IndexedMultimap };","import { AttributeObserver } from \"./attribute_observer\";\nimport { Multimap } from \"@stimulus/multimap\";\n\nvar TokenListObserver =\n/** @class */\nfunction () {\n function TokenListObserver(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n\n Object.defineProperty(TokenListObserver.prototype, \"started\", {\n get: function get() {\n return this.attributeObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n\n TokenListObserver.prototype.start = function () {\n this.attributeObserver.start();\n };\n\n TokenListObserver.prototype.stop = function () {\n this.attributeObserver.stop();\n };\n\n TokenListObserver.prototype.refresh = function () {\n this.attributeObserver.refresh();\n };\n\n Object.defineProperty(TokenListObserver.prototype, \"element\", {\n get: function get() {\n return this.attributeObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TokenListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.attributeObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n }); // Attribute observer delegate\n\n TokenListObserver.prototype.elementMatchedAttribute = function (element) {\n this.tokensMatched(this.readTokensForElement(element));\n };\n\n TokenListObserver.prototype.elementAttributeValueChanged = function (element) {\n var _a = this.refreshTokensForElement(element),\n unmatchedTokens = _a[0],\n matchedTokens = _a[1];\n\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n };\n\n TokenListObserver.prototype.elementUnmatchedAttribute = function (element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n };\n\n TokenListObserver.prototype.tokensMatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenMatched(token);\n });\n };\n\n TokenListObserver.prototype.tokensUnmatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenUnmatched(token);\n });\n };\n\n TokenListObserver.prototype.tokenMatched = function (token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n };\n\n TokenListObserver.prototype.tokenUnmatched = function (token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n };\n\n TokenListObserver.prototype.refreshTokensForElement = function (element) {\n var previousTokens = this.tokensByElement.getValuesForKey(element);\n var currentTokens = this.readTokensForElement(element);\n var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function (_a) {\n var previousToken = _a[0],\n currentToken = _a[1];\n return !tokensAreEqual(previousToken, currentToken);\n });\n\n if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n };\n\n TokenListObserver.prototype.readTokensForElement = function (element) {\n var attributeName = this.attributeName;\n var tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n };\n\n return TokenListObserver;\n}();\n\nexport { TokenListObserver };\n\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(function (content) {\n return content.length;\n }).map(function (content, index) {\n return {\n element: element,\n attributeName: attributeName,\n content: content,\n index: index\n };\n });\n}\n\nfunction zip(left, right) {\n var length = Math.max(left.length, right.length);\n return Array.from({\n length: length\n }, function (_, index) {\n return [left[index], right[index]];\n });\n}\n\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}","import { TokenListObserver } from \"./token_list_observer\";\n\nvar ValueListObserver =\n/** @class */\nfunction () {\n function ValueListObserver(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n\n Object.defineProperty(ValueListObserver.prototype, \"started\", {\n get: function get() {\n return this.tokenListObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n\n ValueListObserver.prototype.start = function () {\n this.tokenListObserver.start();\n };\n\n ValueListObserver.prototype.stop = function () {\n this.tokenListObserver.stop();\n };\n\n ValueListObserver.prototype.refresh = function () {\n this.tokenListObserver.refresh();\n };\n\n Object.defineProperty(ValueListObserver.prototype, \"element\", {\n get: function get() {\n return this.tokenListObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.tokenListObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n });\n\n ValueListObserver.prototype.tokenMatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.tokenUnmatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.fetchParseResultForToken = function (token) {\n var parseResult = this.parseResultsByToken.get(token);\n\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n\n return parseResult;\n };\n\n ValueListObserver.prototype.fetchValuesByTokenForElement = function (element) {\n var valuesByToken = this.valuesByTokenByElement.get(element);\n\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n\n return valuesByToken;\n };\n\n ValueListObserver.prototype.parseToken = function (token) {\n try {\n var value = this.delegate.parseValueForToken(token);\n return {\n value: value\n };\n } catch (error) {\n return {\n error: error\n };\n }\n };\n\n return ValueListObserver;\n}();\n\nexport { ValueListObserver };","import { Action } from \"./action\";\nimport { Binding } from \"./binding\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar BindingObserver =\n/** @class */\nfunction () {\n function BindingObserver(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n\n BindingObserver.prototype.start = function () {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n };\n\n BindingObserver.prototype.stop = function () {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n };\n\n Object.defineProperty(BindingObserver.prototype, \"element\", {\n get: function get() {\n return this.context.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"actionAttribute\", {\n get: function get() {\n return this.schema.actionAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"schema\", {\n get: function get() {\n return this.context.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.bindingsByAction.values());\n },\n enumerable: true,\n configurable: true\n });\n\n BindingObserver.prototype.connectAction = function (action) {\n var binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n };\n\n BindingObserver.prototype.disconnectAction = function (action) {\n var binding = this.bindingsByAction.get(action);\n\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n };\n\n BindingObserver.prototype.disconnectAllActions = function () {\n var _this = this;\n\n this.bindings.forEach(function (binding) {\n return _this.delegate.bindingDisconnected(binding);\n });\n this.bindingsByAction.clear();\n }; // Value observer delegate\n\n\n BindingObserver.prototype.parseValueForToken = function (token) {\n var action = Action.forToken(token);\n\n if (action.identifier == this.identifier) {\n return action;\n }\n };\n\n BindingObserver.prototype.elementMatchedValue = function (element, action) {\n this.connectAction(action);\n };\n\n BindingObserver.prototype.elementUnmatchedValue = function (element, action) {\n this.disconnectAction(action);\n };\n\n return BindingObserver;\n}();\n\nexport { BindingObserver };","import { BindingObserver } from \"./binding_observer\";\n\nvar Context =\n/** @class */\nfunction () {\n function Context(module, scope) {\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n\n try {\n this.controller.initialize();\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n\n Context.prototype.connect = function () {\n this.bindingObserver.start();\n\n try {\n this.controller.connect();\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n };\n\n Context.prototype.disconnect = function () {\n try {\n this.controller.disconnect();\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n\n this.bindingObserver.stop();\n };\n\n Object.defineProperty(Context.prototype, \"application\", {\n get: function get() {\n return this.module.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"identifier\", {\n get: function get() {\n return this.module.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"dispatcher\", {\n get: function get() {\n return this.application.dispatcher;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"parentElement\", {\n get: function get() {\n return this.element.parentElement;\n },\n enumerable: true,\n configurable: true\n }); // Error handling\n\n Context.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element;\n\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, detail);\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n return Context;\n}();\n\nexport { Context };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return function (d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n/** @hidden */\n\n\nexport function blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: blessControllerConstructor(definition.controllerConstructor)\n };\n}\n\nfunction blessControllerConstructor(controllerConstructor) {\n var constructor = extend(controllerConstructor);\n constructor.bless();\n return constructor;\n}\n\nvar extend = function () {\n function extendWithReflect(constructor) {\n function Controller() {\n var _newTarget = this && this instanceof Controller ? this.constructor : void 0;\n\n return Reflect.construct(constructor, arguments, _newTarget);\n }\n\n Controller.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: Controller\n }\n });\n Reflect.setPrototypeOf(Controller, constructor);\n return Controller;\n }\n\n function testReflectExtension() {\n var a = function a() {\n this.a.call(this);\n };\n\n var b = extendWithReflect(a);\n\n b.prototype.a = function () {};\n\n return new b();\n }\n\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return function (constructor) {\n return (\n /** @class */\n function (_super) {\n __extends(Controller, _super);\n\n function Controller() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return Controller;\n }(constructor)\n );\n };\n }\n}();","import { Context } from \"./context\";\nimport { blessDefinition } from \"./definition\";\n\nvar Module =\n/** @class */\nfunction () {\n function Module(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n\n Object.defineProperty(Module.prototype, \"identifier\", {\n get: function get() {\n return this.definition.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"controllerConstructor\", {\n get: function get() {\n return this.definition.controllerConstructor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"contexts\", {\n get: function get() {\n return Array.from(this.connectedContexts);\n },\n enumerable: true,\n configurable: true\n });\n\n Module.prototype.connectContextForScope = function (scope) {\n var context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n };\n\n Module.prototype.disconnectContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n };\n\n Module.prototype.fetchContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n\n return context;\n };\n\n return Module;\n}();\n\nexport { Module };","var DataMap =\n/** @class */\nfunction () {\n function DataMap(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(DataMap.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataMap.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n\n DataMap.prototype.get = function (key) {\n key = this.getFormattedKey(key);\n return this.element.getAttribute(key);\n };\n\n DataMap.prototype.set = function (key, value) {\n key = this.getFormattedKey(key);\n this.element.setAttribute(key, value);\n return this.get(key);\n };\n\n DataMap.prototype.has = function (key) {\n key = this.getFormattedKey(key);\n return this.element.hasAttribute(key);\n };\n\n DataMap.prototype.delete = function (key) {\n if (this.has(key)) {\n key = this.getFormattedKey(key);\n this.element.removeAttribute(key);\n return true;\n } else {\n return false;\n }\n };\n\n DataMap.prototype.getFormattedKey = function (key) {\n return \"data-\" + this.identifier + \"-\" + dasherize(key);\n };\n\n return DataMap;\n}();\n\nexport { DataMap };\n\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, function (_, char) {\n return \"-\" + char.toLowerCase();\n });\n}","/** @hidden */\nexport function attributeValueContainsToken(attributeName, token) {\n return \"[\" + attributeName + \"~=\\\"\" + token + \"\\\"]\";\n}","import { attributeValueContainsToken } from \"./selectors\";\n\nvar TargetSet =\n/** @class */\nfunction () {\n function TargetSet(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(TargetSet.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"schema\", {\n get: function get() {\n return this.scope.schema;\n },\n enumerable: true,\n configurable: true\n });\n\n TargetSet.prototype.has = function (targetName) {\n return this.find(targetName) != null;\n };\n\n TargetSet.prototype.find = function () {\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findElement(selector);\n };\n\n TargetSet.prototype.findAll = function () {\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findAllElements(selector);\n };\n\n TargetSet.prototype.getSelectorForTargetNames = function (targetNames) {\n var _this = this;\n\n return targetNames.map(function (targetName) {\n return _this.getSelectorForTargetName(targetName);\n }).join(\", \");\n };\n\n TargetSet.prototype.getSelectorForTargetName = function (targetName) {\n var targetDescriptor = this.identifier + \".\" + targetName;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n };\n\n return TargetSet;\n}();\n\nexport { TargetSet };","import { DataMap } from \"./data_map\";\nimport { TargetSet } from \"./target_set\";\nimport { attributeValueContainsToken } from \"./selectors\";\n\nvar Scope =\n/** @class */\nfunction () {\n function Scope(schema, identifier, element) {\n this.schema = schema;\n this.identifier = identifier;\n this.element = element;\n this.targets = new TargetSet(this);\n this.data = new DataMap(this);\n }\n\n Scope.prototype.findElement = function (selector) {\n return this.findAllElements(selector)[0];\n };\n\n Scope.prototype.findAllElements = function (selector) {\n var head = this.element.matches(selector) ? [this.element] : [];\n var tail = this.filterElements(Array.from(this.element.querySelectorAll(selector)));\n return head.concat(tail);\n };\n\n Scope.prototype.filterElements = function (elements) {\n var _this = this;\n\n return elements.filter(function (element) {\n return _this.containsElement(element);\n });\n };\n\n Scope.prototype.containsElement = function (element) {\n return element.closest(this.controllerSelector) === this.element;\n };\n\n Object.defineProperty(Scope.prototype, \"controllerSelector\", {\n get: function get() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n },\n enumerable: true,\n configurable: true\n });\n return Scope;\n}();\n\nexport { Scope };","import { Scope } from \"./scope\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar ScopeObserver =\n/** @class */\nfunction () {\n function ScopeObserver(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n\n ScopeObserver.prototype.start = function () {\n this.valueListObserver.start();\n };\n\n ScopeObserver.prototype.stop = function () {\n this.valueListObserver.stop();\n };\n\n Object.defineProperty(ScopeObserver.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n }); // Value observer delegate\n\n /** @hidden */\n\n ScopeObserver.prototype.parseValueForToken = function (token) {\n var element = token.element,\n identifier = token.content;\n var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n var scope = scopesByIdentifier.get(identifier);\n\n if (!scope) {\n scope = new Scope(this.schema, identifier, element);\n scopesByIdentifier.set(identifier, scope);\n }\n\n return scope;\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementMatchedValue = function (element, value) {\n var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementUnmatchedValue = function (element, value) {\n var referenceCount = this.scopeReferenceCounts.get(value);\n\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n };\n\n ScopeObserver.prototype.fetchScopesByIdentifierForElement = function (element) {\n var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n\n return scopesByIdentifier;\n };\n\n return ScopeObserver;\n}();\n\nexport { ScopeObserver };","import { Module } from \"./module\";\nimport { Multimap } from \"@stimulus/multimap\";\nimport { ScopeObserver } from \"./scope_observer\";\n\nvar Router =\n/** @class */\nfunction () {\n function Router(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n\n Object.defineProperty(Router.prototype, \"element\", {\n get: function get() {\n return this.application.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"modules\", {\n get: function get() {\n return Array.from(this.modulesByIdentifier.values());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"contexts\", {\n get: function get() {\n return this.modules.reduce(function (contexts, module) {\n return contexts.concat(module.contexts);\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n\n Router.prototype.start = function () {\n this.scopeObserver.start();\n };\n\n Router.prototype.stop = function () {\n this.scopeObserver.stop();\n };\n\n Router.prototype.loadDefinition = function (definition) {\n this.unloadIdentifier(definition.identifier);\n var module = new Module(this.application, definition);\n this.connectModule(module);\n };\n\n Router.prototype.unloadIdentifier = function (identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n this.disconnectModule(module);\n }\n };\n\n Router.prototype.getContextForElementAndIdentifier = function (element, identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n return module.contexts.find(function (context) {\n return context.element == element;\n });\n }\n }; // Error handler delegate\n\n /** @hidden */\n\n\n Router.prototype.handleError = function (error, message, detail) {\n this.application.handleError(error, message, detail);\n }; // Scope observer delegate\n\n /** @hidden */\n\n\n Router.prototype.scopeConnected = function (scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.connectContextForScope(scope);\n }\n };\n /** @hidden */\n\n\n Router.prototype.scopeDisconnected = function (scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }; // Modules\n\n\n Router.prototype.connectModule = function (module) {\n this.modulesByIdentifier.set(module.identifier, module);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.connectContextForScope(scope);\n });\n };\n\n Router.prototype.disconnectModule = function (module) {\n this.modulesByIdentifier.delete(module.identifier);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.disconnectContextForScope(scope);\n });\n };\n\n return Router;\n}();\n\nexport { Router };","export var defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\"\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : new P(function (resolve) {\n resolve(result.value);\n }).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nimport { Dispatcher } from \"./dispatcher\";\nimport { Router } from \"./router\";\nimport { defaultSchema } from \"./schema\";\n\nvar Application =\n/** @class */\nfunction () {\n function Application(element, schema) {\n if (element === void 0) {\n element = document.documentElement;\n }\n\n if (schema === void 0) {\n schema = defaultSchema;\n }\n\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n\n Application.start = function (element, schema) {\n var application = new Application(element, schema);\n application.start();\n return application;\n };\n\n Application.prototype.start = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , domReady()];\n\n case 1:\n _a.sent();\n\n this.router.start();\n this.dispatcher.start();\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n Application.prototype.stop = function () {\n this.router.stop();\n this.dispatcher.stop();\n };\n\n Application.prototype.register = function (identifier, controllerConstructor) {\n this.load({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n };\n\n Application.prototype.load = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var definitions = Array.isArray(head) ? head : [head].concat(rest);\n definitions.forEach(function (definition) {\n return _this.router.loadDefinition(definition);\n });\n };\n\n Application.prototype.unload = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var identifiers = Array.isArray(head) ? head : [head].concat(rest);\n identifiers.forEach(function (identifier) {\n return _this.router.unloadIdentifier(identifier);\n });\n };\n\n Object.defineProperty(Application.prototype, \"controllers\", {\n // Controllers\n get: function get() {\n return this.router.contexts.map(function (context) {\n return context.controller;\n });\n },\n enumerable: true,\n configurable: true\n });\n\n Application.prototype.getControllerForElementAndIdentifier = function (element, identifier) {\n var context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }; // Error handling\n\n\n Application.prototype.handleError = function (error, message, detail) {\n console.error(\"%s\\n\\n%o\\n\\n%o\", message, error, detail);\n };\n\n return Application;\n}();\n\nexport { Application };\n\nfunction domReady() {\n return new Promise(function (resolve) {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n}","/** @hidden */\nexport function defineTargetProperties(constructor) {\n var prototype = constructor.prototype;\n var targetNames = getTargetNamesForConstructor(constructor);\n targetNames.forEach(function (name) {\n var _a;\n\n return defineLinkedProperties(prototype, (_a = {}, _a[name + \"Target\"] = {\n get: function get() {\n var target = this.targets.find(name);\n\n if (target) {\n return target;\n } else {\n throw new Error(\"Missing target element \\\"\" + this.identifier + \".\" + name + \"\\\"\");\n }\n }\n }, _a[name + \"Targets\"] = {\n get: function get() {\n return this.targets.findAll(name);\n }\n }, _a[\"has\" + capitalize(name) + \"Target\"] = {\n get: function get() {\n return this.targets.has(name);\n }\n }, _a));\n });\n}\n\nfunction getTargetNamesForConstructor(constructor) {\n var ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce(function (targetNames, constructor) {\n getOwnTargetNamesForConstructor(constructor).forEach(function (name) {\n return targetNames.add(name);\n });\n return targetNames;\n }, new Set()));\n}\n\nfunction getAncestorsForConstructor(constructor) {\n var ancestors = [];\n\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n\n return ancestors;\n}\n\nfunction getOwnTargetNamesForConstructor(constructor) {\n var definition = constructor[\"targets\"];\n return Array.isArray(definition) ? definition : [];\n}\n\nfunction defineLinkedProperties(object, properties) {\n Object.keys(properties).forEach(function (name) {\n if (!(name in object)) {\n var descriptor = properties[name];\n Object.defineProperty(object, name, descriptor);\n }\n });\n}\n\nfunction capitalize(name) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}","import { defineTargetProperties } from \"./target_properties\";\n\nvar Controller =\n/** @class */\nfunction () {\n function Controller(context) {\n this.context = context;\n }\n\n Controller.bless = function () {\n defineTargetProperties(this);\n };\n\n Object.defineProperty(Controller.prototype, \"application\", {\n get: function get() {\n return this.context.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"targets\", {\n get: function get() {\n return this.scope.targets;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"data\", {\n get: function get() {\n return this.scope.data;\n },\n enumerable: true,\n configurable: true\n });\n\n Controller.prototype.initialize = function () {// Override in your subclass to set up initial controller state\n };\n\n Controller.prototype.connect = function () {// Override in your subclass to respond when the controller is connected to the DOM\n };\n\n Controller.prototype.disconnect = function () {// Override in your subclass to respond when the controller is disconnected from the DOM\n };\n\n Controller.targets = [];\n return Controller;\n}();\n\nexport { Controller };","module.exports = require(\"regenerator-runtime\");\n","/**!\n* tippy.js v4.3.5\n* (c) 2017-2019 atomiks\n* MIT License\n*/\nimport Popper from 'popper.js';\nvar css = \".tippy-iOS{cursor:pointer!important;-webkit-tap-highlight-color:transparent}.tippy-popper{transition-timing-function:cubic-bezier(.165,.84,.44,1);max-width:calc(100% - 8px);pointer-events:none;outline:0}.tippy-popper[x-placement^=top] .tippy-backdrop{border-radius:40% 40% 0 0}.tippy-popper[x-placement^=top] .tippy-roundarrow{bottom:-7px;bottom:-6.5px;-webkit-transform-origin:50% 0;transform-origin:50% 0;margin:0 3px}.tippy-popper[x-placement^=top] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.tippy-popper[x-placement^=top] .tippy-arrow{border-top:8px solid #333;border-right:8px solid transparent;border-left:8px solid transparent;bottom:-7px;margin:0 3px;-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=top] .tippy-backdrop{-webkit-transform-origin:0 25%;transform-origin:0 25%}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-55%);transform:scale(1) translate(-50%,-55%)}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-50%,-45%);transform:scale(.2) translate(-50%,-45%);opacity:0}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}.tippy-popper[x-placement^=top] [data-animation=perspective]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateY(-10px);transform:perspective(700px) translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateX(60deg);transform:perspective(700px) rotateX(60deg)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=top] [data-animation=scale]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px) scale(.5);transform:translateY(-10px) scale(.5)}.tippy-popper[x-placement^=bottom] .tippy-backdrop{border-radius:0 0 30% 30%}.tippy-popper[x-placement^=bottom] .tippy-roundarrow{top:-7px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;margin:0 3px}.tippy-popper[x-placement^=bottom] .tippy-roundarrow svg{position:absolute;left:0}.tippy-popper[x-placement^=bottom] .tippy-arrow{border-bottom:8px solid #333;border-right:8px solid transparent;border-left:8px solid transparent;top:-7px;margin:0 3px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.tippy-popper[x-placement^=bottom] .tippy-backdrop{-webkit-transform-origin:0 -50%;transform-origin:0 -50%}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-45%);transform:scale(1) translate(-50%,-45%)}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-50%);transform:scale(.2) translate(-50%);opacity:0}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}.tippy-popper[x-placement^=bottom] [data-animation=perspective]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateY(10px);transform:perspective(700px) translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateX(-60deg);transform:perspective(700px) rotateX(-60deg)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=bottom] [data-animation=scale]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px) scale(.5);transform:translateY(10px) scale(.5)}.tippy-popper[x-placement^=left] .tippy-backdrop{border-radius:50% 0 0 50%}.tippy-popper[x-placement^=left] .tippy-roundarrow{right:-12px;-webkit-transform-origin:33.33333333% 50%;transform-origin:33.33333333% 50%;margin:3px 0}.tippy-popper[x-placement^=left] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.tippy-popper[x-placement^=left] .tippy-arrow{border-left:8px solid #333;border-top:8px solid transparent;border-bottom:8px solid transparent;right:-7px;margin:3px 0;-webkit-transform-origin:0 50%;transform-origin:0 50%}.tippy-popper[x-placement^=left] .tippy-backdrop{-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-75%,-50%);transform:scale(.2) translate(-75%,-50%);opacity:0}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}.tippy-popper[x-placement^=left] [data-animation=perspective]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateX(-10px);transform:perspective(700px) translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateY(-60deg);transform:perspective(700px) rotateY(-60deg)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=left] [data-animation=scale]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px) scale(.5);transform:translateX(-10px) scale(.5)}.tippy-popper[x-placement^=right] .tippy-backdrop{border-radius:0 50% 50% 0}.tippy-popper[x-placement^=right] .tippy-roundarrow{left:-12px;-webkit-transform-origin:66.66666666% 50%;transform-origin:66.66666666% 50%;margin:3px 0}.tippy-popper[x-placement^=right] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.tippy-popper[x-placement^=right] .tippy-arrow{border-right:8px solid #333;border-top:8px solid transparent;border-bottom:8px solid transparent;left:-7px;margin:3px 0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tippy-popper[x-placement^=right] .tippy-backdrop{-webkit-transform-origin:-50% 0;transform-origin:-50% 0}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-25%,-50%);transform:scale(.2) translate(-25%,-50%);opacity:0}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.tippy-popper[x-placement^=right] [data-animation=perspective]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateX(10px);transform:perspective(700px) translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateY(60deg);transform:perspective(700px) rotateY(60deg)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=right] [data-animation=scale]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px) scale(.5);transform:translateX(10px) scale(.5)}.tippy-tooltip{position:relative;color:#fff;border-radius:.25rem;font-size:.875rem;padding:.3125rem .5625rem;line-height:1.4;text-align:center;background-color:#333}.tippy-tooltip[data-size=small]{padding:.1875rem .375rem;font-size:.75rem}.tippy-tooltip[data-size=large]{padding:.375rem .75rem;font-size:1rem}.tippy-tooltip[data-animatefill]{overflow:hidden;background-color:initial}.tippy-tooltip[data-interactive],.tippy-tooltip[data-interactive] .tippy-roundarrow path{pointer-events:auto}.tippy-tooltip[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-tooltip[data-inertia][data-state=hidden]{transition-timing-function:ease}.tippy-arrow,.tippy-roundarrow{position:absolute;width:0;height:0}.tippy-roundarrow{width:18px;height:7px;fill:#333;pointer-events:none}.tippy-backdrop{position:absolute;background-color:#333;border-radius:50%;width:calc(110% + 2rem);left:50%;top:50%;z-index:-1;transition:all cubic-bezier(.46,.1,.52,.98);-webkit-backface-visibility:hidden;backface-visibility:hidden}.tippy-backdrop:after{content:\\\"\\\";float:left;padding-top:100%}.tippy-backdrop+.tippy-content{transition-property:opacity;will-change:opacity}.tippy-backdrop+.tippy-content[data-state=hidden]{opacity:0}\";\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\nvar version = \"4.3.5\";\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nvar ua = isBrowser ? navigator.userAgent : '';\nvar isIE = /MSIE |Trident\\//.test(ua);\nvar isUCBrowser = /UCBrowser\\//.test(ua);\nvar isIOS = isBrowser && /iPhone|iPad|iPod/.test(navigator.platform) && !window.MSStream;\nvar defaultProps = {\n a11y: true,\n allowHTML: true,\n animateFill: true,\n animation: 'shift-away',\n appendTo: function appendTo() {\n return document.body;\n },\n aria: 'describedby',\n arrow: false,\n arrowType: 'sharp',\n boundary: 'scrollParent',\n content: '',\n delay: 0,\n distance: 10,\n duration: [325, 275],\n flip: true,\n flipBehavior: 'flip',\n flipOnUpdate: false,\n followCursor: false,\n hideOnClick: true,\n ignoreAttributes: false,\n inertia: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n lazy: true,\n maxWidth: 350,\n multiple: false,\n offset: 0,\n onHidden: function onHidden() {},\n onHide: function onHide() {},\n onMount: function onMount() {},\n onShow: function onShow() {},\n onShown: function onShown() {},\n onTrigger: function onTrigger() {},\n placement: 'top',\n popperOptions: {},\n role: 'tooltip',\n showOnInit: false,\n size: 'regular',\n sticky: false,\n target: '',\n theme: 'dark',\n touch: true,\n touchHold: false,\n trigger: 'mouseenter focus',\n triggerTarget: null,\n updateDuration: 0,\n wait: null,\n zIndex: 9999\n /**\n * If the set() method encounters one of these, the popperInstance must be\n * recreated\n */\n\n};\nvar POPPER_INSTANCE_DEPENDENCIES = ['arrow', 'arrowType', 'boundary', 'distance', 'flip', 'flipBehavior', 'flipOnUpdate', 'offset', 'placement', 'popperOptions'];\nvar elementProto = isBrowser ? Element.prototype : {};\nvar matches = elementProto.matches || elementProto.matchesSelector || elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector;\n/**\n * Ponyfill for Array.from - converts iterable values to an array\n */\n\nfunction arrayFrom(value) {\n return [].slice.call(value);\n}\n/**\n * Ponyfill for Element.prototype.closest\n */\n\n\nfunction closest(element, selector) {\n return closestCallback(element, function (el) {\n return matches.call(el, selector);\n });\n}\n/**\n * Works like Element.prototype.closest, but uses a callback instead\n */\n\n\nfunction closestCallback(element, callback) {\n while (element) {\n if (callback(element)) {\n return element;\n }\n\n element = element.parentElement;\n }\n\n return null;\n} // Passive event listener config\n\n\nvar PASSIVE = {\n passive: true // Popper `preventOverflow` padding\n\n};\nvar PADDING = 4; // Popper attributes\n// In Popper v2 these will be `data-*` instead of `x-*` to adhere to HTML5 spec\n\nvar PLACEMENT_ATTRIBUTE = 'x-placement';\nvar OUT_OF_BOUNDARIES_ATTRIBUTE = 'x-out-of-boundaries'; // Classes\n\nvar IOS_CLASS = \"tippy-iOS\";\nvar ACTIVE_CLASS = \"tippy-active\";\nvar POPPER_CLASS = \"tippy-popper\";\nvar TOOLTIP_CLASS = \"tippy-tooltip\";\nvar CONTENT_CLASS = \"tippy-content\";\nvar BACKDROP_CLASS = \"tippy-backdrop\";\nvar ARROW_CLASS = \"tippy-arrow\";\nvar ROUND_ARROW_CLASS = \"tippy-roundarrow\"; // Selectors\n\nvar POPPER_SELECTOR = \".\".concat(POPPER_CLASS);\nvar TOOLTIP_SELECTOR = \".\".concat(TOOLTIP_CLASS);\nvar CONTENT_SELECTOR = \".\".concat(CONTENT_CLASS);\nvar BACKDROP_SELECTOR = \".\".concat(BACKDROP_CLASS);\nvar ARROW_SELECTOR = \".\".concat(ARROW_CLASS);\nvar ROUND_ARROW_SELECTOR = \".\".concat(ROUND_ARROW_CLASS);\nvar isUsingTouch = false;\n\nfunction onDocumentTouch() {\n if (isUsingTouch) {\n return;\n }\n\n isUsingTouch = true;\n\n if (isIOS) {\n document.body.classList.add(IOS_CLASS);\n }\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\n\nvar lastMouseMoveTime = 0;\n\nfunction onDocumentMouseMove() {\n var now = performance.now(); // Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference\n\n if (now - lastMouseMoveTime < 20) {\n isUsingTouch = false;\n document.removeEventListener('mousemove', onDocumentMouseMove);\n\n if (!isIOS) {\n document.body.classList.remove(IOS_CLASS);\n }\n }\n\n lastMouseMoveTime = now;\n}\n\nfunction onWindowBlur() {\n var _document = document,\n activeElement = _document.activeElement;\n\n if (activeElement && activeElement.blur && activeElement._tippy) {\n activeElement.blur();\n }\n}\n/**\n * Adds the needed global event listeners\n */\n\n\nfunction bindGlobalEventListeners() {\n document.addEventListener('touchstart', onDocumentTouch, PASSIVE);\n window.addEventListener('blur', onWindowBlur);\n}\n\nvar keys = Object.keys(defaultProps);\n/**\n * Returns an object of optional props from data-tippy-* attributes\n */\n\nfunction getDataAttributeOptions(reference) {\n return keys.reduce(function (acc, key) {\n var valueAsString = (reference.getAttribute(\"data-tippy-\".concat(key)) || '').trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n }, {});\n}\n/**\n * Polyfills the virtual reference (plain object) with Element.prototype props\n * Mutating because DOM elements are mutated, adds `_tippy` property\n */\n\n\nfunction polyfillElementPrototypeProperties(virtualReference) {\n var polyfills = {\n isVirtual: true,\n attributes: virtualReference.attributes || {},\n contains: function contains() {},\n setAttribute: function setAttribute(key, value) {\n virtualReference.attributes[key] = value;\n },\n getAttribute: function getAttribute(key) {\n return virtualReference.attributes[key];\n },\n removeAttribute: function removeAttribute(key) {\n delete virtualReference.attributes[key];\n },\n hasAttribute: function hasAttribute(key) {\n return key in virtualReference.attributes;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n classList: {\n classNames: {},\n add: function add(key) {\n virtualReference.classList.classNames[key] = true;\n },\n remove: function remove(key) {\n delete virtualReference.classList.classNames[key];\n },\n contains: function contains(key) {\n return key in virtualReference.classList.classNames;\n }\n }\n };\n\n for (var key in polyfills) {\n virtualReference[key] = polyfills[key];\n }\n}\n/**\n * Determines if a value is a \"bare\" virtual element (before mutations done\n * by `polyfillElementPrototypeProperties()`). JSDOM elements show up as\n * [object Object], we can check if the value is \"element-like\" if it has\n * `addEventListener`\n */\n\n\nfunction isBareVirtualElement(value) {\n return {}.toString.call(value) === '[object Object]' && !value.addEventListener;\n}\n/**\n * Determines if the value is a reference element\n */\n\n\nfunction isReferenceElement(value) {\n return !!value._tippy && !matches.call(value, POPPER_SELECTOR);\n}\n/**\n * Safe .hasOwnProperty check, for prototype-less objects\n */\n\n\nfunction hasOwnProperty(obj, key) {\n return {}.hasOwnProperty.call(obj, key);\n}\n/**\n * Returns an array of elements based on the value\n */\n\n\nfunction getArrayOfElements(value) {\n if (isSingular(value)) {\n // TODO: VirtualReference is not compatible to type Element\n return [value];\n }\n\n if (value instanceof NodeList) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n try {\n return arrayFrom(document.querySelectorAll(value));\n } catch (e) {\n return [];\n }\n}\n/**\n * Returns a value at a given index depending on if it's an array or number\n */\n\n\nfunction getValue(value, index, defaultValue) {\n if (Array.isArray(value)) {\n var v = value[index];\n return v == null ? defaultValue : v;\n }\n\n return value;\n}\n/**\n * Debounce utility. To avoid bloating bundle size, we're only passing 1\n * argument here, a more generic function would pass all arguments. Only\n * `onMouseMove` uses this which takes the event object for now.\n */\n\n\nfunction debounce(fn, ms) {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n var timeout;\n return function (arg) {\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n fn(arg);\n }, ms);\n };\n}\n/**\n * Prevents errors from being thrown while accessing nested modifier objects\n * in `popperOptions`\n */\n\n\nfunction getModifier(obj, key) {\n return obj && obj.modifiers && obj.modifiers[key];\n}\n/**\n * Determines if an array or string includes a value\n */\n\n\nfunction includes(a, b) {\n return a.indexOf(b) > -1;\n}\n/**\n * Determines if the value is a real element\n */\n\n\nfunction isRealElement(value) {\n return value instanceof Element;\n}\n/**\n * Determines if the value is singular-like\n */\n\n\nfunction isSingular(value) {\n return !!(value && hasOwnProperty(value, 'isVirtual')) || isRealElement(value);\n}\n/**\n * Firefox extensions don't allow setting .innerHTML directly, this will trick it\n */\n\n\nfunction innerHTML() {\n return 'innerHTML';\n}\n/**\n * Evaluates a function if one, or returns the value\n */\n\n\nfunction invokeWithArgsOrReturn(value, args) {\n return typeof value === 'function' ? value.apply(null, args) : value;\n}\n/**\n * Sets a popperInstance `flip` modifier's enabled state\n */\n\n\nfunction setFlipModifierEnabled(modifiers, value) {\n modifiers.filter(function (m) {\n return m.name === 'flip';\n })[0].enabled = value;\n}\n/**\n * Determines if an element can receive focus\n * Always returns true for virtual objects\n */\n\n\nfunction canReceiveFocus(element) {\n return isRealElement(element) ? matches.call(element, 'a[href],area[href],button,details,input,textarea,select,iframe,[tabindex]') && !element.hasAttribute('disabled') : true;\n}\n/**\n * Returns a new `div` element\n */\n\n\nfunction div() {\n return document.createElement('div');\n}\n/**\n * Applies a transition duration to a list of elements\n */\n\n\nfunction setTransitionDuration(els, value) {\n els.forEach(function (el) {\n if (el) {\n el.style.transitionDuration = \"\".concat(value, \"ms\");\n }\n });\n}\n/**\n * Sets the visibility state to elements so they can begin to transition\n */\n\n\nfunction setVisibilityState(els, state) {\n els.forEach(function (el) {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n/**\n * Evaluates the props object by merging data attributes and\n * disabling conflicting options where necessary\n */\n\n\nfunction evaluateProps(reference, props) {\n var out = _extends({}, props, {\n content: invokeWithArgsOrReturn(props.content, [reference])\n }, props.ignoreAttributes ? {} : getDataAttributeOptions(reference));\n\n if (out.arrow || isUCBrowser) {\n out.animateFill = false;\n }\n\n return out;\n}\n/**\n * Validates an object of options with the valid default props object\n */\n\n\nfunction validateOptions(options, defaultProps) {\n Object.keys(options).forEach(function (option) {\n if (!hasOwnProperty(defaultProps, option)) {\n throw new Error(\"[tippy]: `\".concat(option, \"` is not a valid option\"));\n }\n });\n}\n/**\n * Sets the innerHTML of an element\n */\n\n\nfunction setInnerHTML(element, html) {\n element[innerHTML()] = isRealElement(html) ? html[innerHTML()] : html;\n}\n/**\n * Sets the content of a tooltip\n */\n\n\nfunction setContent(contentEl, props) {\n if (isRealElement(props.content)) {\n setInnerHTML(contentEl, '');\n contentEl.appendChild(props.content);\n } else if (typeof props.content !== 'function') {\n var key = props.allowHTML ? 'innerHTML' : 'textContent';\n contentEl[key] = props.content;\n }\n}\n/**\n * Returns the child elements of a popper element\n */\n\n\nfunction getChildren(popper) {\n return {\n tooltip: popper.querySelector(TOOLTIP_SELECTOR),\n backdrop: popper.querySelector(BACKDROP_SELECTOR),\n content: popper.querySelector(CONTENT_SELECTOR),\n arrow: popper.querySelector(ARROW_SELECTOR) || popper.querySelector(ROUND_ARROW_SELECTOR)\n };\n}\n/**\n * Adds `data-inertia` attribute\n */\n\n\nfunction addInertia(tooltip) {\n tooltip.setAttribute('data-inertia', '');\n}\n/**\n * Removes `data-inertia` attribute\n */\n\n\nfunction removeInertia(tooltip) {\n tooltip.removeAttribute('data-inertia');\n}\n/**\n * Creates an arrow element and returns it\n */\n\n\nfunction createArrowElement(arrowType) {\n var arrow = div();\n\n if (arrowType === 'round') {\n arrow.className = ROUND_ARROW_CLASS;\n setInnerHTML(arrow, '');\n } else {\n arrow.className = ARROW_CLASS;\n }\n\n return arrow;\n}\n/**\n * Creates a backdrop element and returns it\n */\n\n\nfunction createBackdropElement() {\n var backdrop = div();\n backdrop.className = BACKDROP_CLASS;\n backdrop.setAttribute('data-state', 'hidden');\n return backdrop;\n}\n/**\n * Adds interactive-related attributes\n */\n\n\nfunction addInteractive(popper, tooltip) {\n popper.setAttribute('tabindex', '-1');\n tooltip.setAttribute('data-interactive', '');\n}\n/**\n * Removes interactive-related attributes\n */\n\n\nfunction removeInteractive(popper, tooltip) {\n popper.removeAttribute('tabindex');\n tooltip.removeAttribute('data-interactive');\n}\n/**\n * Add/remove transitionend listener from tooltip\n */\n\n\nfunction updateTransitionEndListener(tooltip, action, listener) {\n // UC Browser hasn't adopted the `transitionend` event despite supporting\n // unprefixed transitions...\n var eventName = isUCBrowser && document.body.style.webkitTransition !== undefined ? 'webkitTransitionEnd' : 'transitionend';\n tooltip[action + 'EventListener'](eventName, listener);\n}\n/**\n * Returns the popper's placement, ignoring shifting (top-start, etc)\n */\n\n\nfunction getBasicPlacement(popper) {\n var fullPlacement = popper.getAttribute(PLACEMENT_ATTRIBUTE);\n return fullPlacement ? fullPlacement.split('-')[0] : '';\n}\n/**\n * Triggers reflow\n */\n\n\nfunction reflow(popper) {\n void popper.offsetHeight;\n}\n/**\n * Adds/removes theme from tooltip's classList\n */\n\n\nfunction updateTheme(tooltip, action, theme) {\n theme.split(' ').forEach(function (themeName) {\n tooltip.classList[action](themeName + '-theme');\n });\n}\n/**\n * Constructs the popper element and returns it\n */\n\n\nfunction createPopperElement(id, props) {\n var popper = div();\n popper.className = POPPER_CLASS;\n popper.id = \"tippy-\".concat(id);\n popper.style.zIndex = '' + props.zIndex;\n popper.style.position = 'absolute';\n popper.style.top = '0';\n popper.style.left = '0';\n\n if (props.role) {\n popper.setAttribute('role', props.role);\n }\n\n var tooltip = div();\n tooltip.className = TOOLTIP_CLASS;\n tooltip.style.maxWidth = props.maxWidth + (typeof props.maxWidth === 'number' ? 'px' : '');\n tooltip.setAttribute('data-size', props.size);\n tooltip.setAttribute('data-animation', props.animation);\n tooltip.setAttribute('data-state', 'hidden');\n updateTheme(tooltip, 'add', props.theme);\n var content = div();\n content.className = CONTENT_CLASS;\n content.setAttribute('data-state', 'hidden');\n\n if (props.interactive) {\n addInteractive(popper, tooltip);\n }\n\n if (props.arrow) {\n tooltip.appendChild(createArrowElement(props.arrowType));\n }\n\n if (props.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n }\n\n if (props.inertia) {\n addInertia(tooltip);\n }\n\n setContent(content, props);\n tooltip.appendChild(content);\n popper.appendChild(tooltip);\n return popper;\n}\n/**\n * Updates the popper element based on the new props\n */\n\n\nfunction updatePopperElement(popper, prevProps, nextProps) {\n var _getChildren = getChildren(popper),\n tooltip = _getChildren.tooltip,\n content = _getChildren.content,\n backdrop = _getChildren.backdrop,\n arrow = _getChildren.arrow;\n\n popper.style.zIndex = '' + nextProps.zIndex;\n tooltip.setAttribute('data-size', nextProps.size);\n tooltip.setAttribute('data-animation', nextProps.animation);\n tooltip.style.maxWidth = nextProps.maxWidth + (typeof nextProps.maxWidth === 'number' ? 'px' : '');\n\n if (nextProps.role) {\n popper.setAttribute('role', nextProps.role);\n } else {\n popper.removeAttribute('role');\n }\n\n if (prevProps.content !== nextProps.content) {\n setContent(content, nextProps);\n } // animateFill\n\n\n if (!prevProps.animateFill && nextProps.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n } else if (prevProps.animateFill && !nextProps.animateFill) {\n tooltip.removeChild(backdrop);\n tooltip.removeAttribute('data-animatefill');\n } // arrow\n\n\n if (!prevProps.arrow && nextProps.arrow) {\n tooltip.appendChild(createArrowElement(nextProps.arrowType));\n } else if (prevProps.arrow && !nextProps.arrow) {\n tooltip.removeChild(arrow);\n } // arrowType\n\n\n if (prevProps.arrow && nextProps.arrow && prevProps.arrowType !== nextProps.arrowType) {\n tooltip.replaceChild(createArrowElement(nextProps.arrowType), arrow);\n } // interactive\n\n\n if (!prevProps.interactive && nextProps.interactive) {\n addInteractive(popper, tooltip);\n } else if (prevProps.interactive && !nextProps.interactive) {\n removeInteractive(popper, tooltip);\n } // inertia\n\n\n if (!prevProps.inertia && nextProps.inertia) {\n addInertia(tooltip);\n } else if (prevProps.inertia && !nextProps.inertia) {\n removeInertia(tooltip);\n } // theme\n\n\n if (prevProps.theme !== nextProps.theme) {\n updateTheme(tooltip, 'remove', prevProps.theme);\n updateTheme(tooltip, 'add', nextProps.theme);\n }\n}\n/**\n * Hides all visible poppers on the document\n */\n\n\nfunction hideAll() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n excludedReferenceOrInstance = _ref.exclude,\n duration = _ref.duration;\n\n arrayFrom(document.querySelectorAll(POPPER_SELECTOR)).forEach(function (popper) {\n var instance = popper._tippy;\n\n if (instance) {\n var isExcluded = false;\n\n if (excludedReferenceOrInstance) {\n isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : popper === excludedReferenceOrInstance.popper;\n }\n\n if (!isExcluded) {\n instance.hide(duration);\n }\n }\n });\n}\n/**\n * Determines if the mouse cursor is outside of the popper's interactive border\n * region\n */\n\n\nfunction isCursorOutsideInteractiveBorder(popperPlacement, popperRect, event, props) {\n if (!popperPlacement) {\n return true;\n }\n\n var x = event.clientX,\n y = event.clientY;\n var interactiveBorder = props.interactiveBorder,\n distance = props.distance;\n var exceedsTop = popperRect.top - y > (popperPlacement === 'top' ? interactiveBorder + distance : interactiveBorder);\n var exceedsBottom = y - popperRect.bottom > (popperPlacement === 'bottom' ? interactiveBorder + distance : interactiveBorder);\n var exceedsLeft = popperRect.left - x > (popperPlacement === 'left' ? interactiveBorder + distance : interactiveBorder);\n var exceedsRight = x - popperRect.right > (popperPlacement === 'right' ? interactiveBorder + distance : interactiveBorder);\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n}\n/**\n * Returns the distance offset, taking into account the default offset due to\n * the transform: translate() rule (10px) in CSS\n */\n\n\nfunction getOffsetDistanceInPx(distance) {\n return -(distance - 10) + 'px';\n}\n\nvar idCounter = 1; // Workaround for IE11's lack of new MouseEvent constructor\n\nvar mouseMoveListeners = [];\n/**\n * Creates and returns a Tippy object. We're using a closure pattern instead of\n * a class so that the exposed object API is clean without private members\n * prefixed with `_`.\n */\n\nfunction createTippy(reference, collectionProps) {\n var props = evaluateProps(reference, collectionProps); // If the reference shouldn't have multiple tippys, return null early\n\n if (!props.multiple && reference._tippy) {\n return null;\n }\n /* ======================= 🔒 Private members 🔒 ======================= */\n\n\n var lastTriggerEventType;\n var lastMouseMoveEvent;\n var showTimeoutId;\n var hideTimeoutId;\n var scheduleHideAnimationFrameId;\n var isScheduledToShow = false;\n var isBeingDestroyed = false;\n var previousPlacement;\n var wasVisibleDuringPreviousUpdate = false;\n var hasMountCallbackRun = false;\n var currentMountCallback;\n var currentTransitionEndListener;\n var listeners = [];\n var currentComputedPadding;\n var debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n /* ======================= 🔑 Public members 🔑 ======================= */\n\n var id = idCounter++;\n var popper = createPopperElement(id, props);\n var popperChildren = getChildren(popper);\n var popperInstance = null;\n var state = {\n // Is the instance currently enabled?\n isEnabled: true,\n // Is the tippy currently showing and not transitioning out?\n isVisible: false,\n // Has the instance been destroyed?\n isDestroyed: false,\n // Is the tippy currently mounted to the DOM?\n isMounted: false,\n // Has the tippy finished transitioning in?\n isShown: false\n };\n var instance = {\n // properties\n id: id,\n reference: reference,\n popper: popper,\n popperChildren: popperChildren,\n popperInstance: popperInstance,\n props: props,\n state: state,\n // methods\n clearDelayTimeouts: clearDelayTimeouts,\n set: set,\n setContent: setContent,\n show: show,\n hide: hide,\n enable: enable,\n disable: disable,\n destroy: destroy\n /* ==================== Initial instance mutations =================== */\n\n };\n reference._tippy = instance;\n popper._tippy = instance;\n addTriggersToReference();\n\n if (!props.lazy) {\n createPopperInstance();\n }\n\n if (props.showOnInit) {\n scheduleShow();\n } // Ensure the event listeners target can receive focus\n\n\n if (props.a11y && !props.target && !canReceiveFocus(getEventListenersTarget())) {\n getEventListenersTarget().setAttribute('tabindex', '0');\n } // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n\n\n popper.addEventListener('mouseenter', function (event) {\n if (instance.props.interactive && instance.state.isVisible && lastTriggerEventType === 'mouseenter') {\n // We don't want props.onTrigger() to be called here, since the `event`\n // object is not related to the reference element\n scheduleShow(event, true);\n }\n });\n popper.addEventListener('mouseleave', function () {\n if (instance.props.interactive && lastTriggerEventType === 'mouseenter') {\n document.addEventListener('mousemove', debouncedOnMouseMove);\n }\n });\n return instance;\n /* ======================= 🔒 Private methods 🔒 ======================= */\n\n /**\n * Removes the follow cursor listener\n */\n\n function removeFollowCursorListener() {\n document.removeEventListener('mousemove', positionVirtualReferenceNearCursor);\n }\n /**\n * Cleans up interactive mouse listeners\n */\n\n\n function cleanupInteractiveMouseListeners() {\n document.body.removeEventListener('mouseleave', scheduleHide);\n document.removeEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners = mouseMoveListeners.filter(function (listener) {\n return listener !== debouncedOnMouseMove;\n });\n }\n /**\n * Returns correct target used for event listeners\n */\n\n\n function getEventListenersTarget() {\n return instance.props.triggerTarget || reference;\n }\n /**\n * Adds the document click event listener for the instance\n */\n\n\n function addDocumentClickListener() {\n document.addEventListener('click', onDocumentClick, true);\n }\n /**\n * Removes the document click event listener for the instance\n */\n\n\n function removeDocumentClickListener() {\n document.removeEventListener('click', onDocumentClick, true);\n }\n /**\n * Returns transitionable inner elements used in show/hide methods\n */\n\n\n function getTransitionableElements() {\n return [instance.popperChildren.tooltip, instance.popperChildren.backdrop, instance.popperChildren.content];\n }\n /**\n * Determines if the instance is in `followCursor` mode.\n * NOTE: in v5, touch devices will use `initial` behavior no matter the value.\n */\n\n\n function getIsInLooseFollowCursorMode() {\n var followCursor = instance.props.followCursor;\n return followCursor && lastTriggerEventType !== 'focus' || isUsingTouch && followCursor === 'initial';\n }\n /**\n * Updates the tooltip's position on each animation frame\n */\n\n\n function makeSticky() {\n setTransitionDuration([popper], isIE ? 0 : instance.props.updateDuration);\n var prevRefRect = reference.getBoundingClientRect();\n\n function updatePosition() {\n var currentRefRect = reference.getBoundingClientRect(); // Only schedule an update if the reference rect has changed\n\n if (prevRefRect.top !== currentRefRect.top || prevRefRect.right !== currentRefRect.right || prevRefRect.bottom !== currentRefRect.bottom || prevRefRect.left !== currentRefRect.left) {\n instance.popperInstance.scheduleUpdate();\n }\n\n prevRefRect = currentRefRect;\n\n if (instance.state.isMounted) {\n requestAnimationFrame(updatePosition);\n }\n }\n\n updatePosition();\n }\n /**\n * Invokes a callback once the tooltip has fully transitioned out\n */\n\n\n function onTransitionedOut(duration, callback) {\n onTransitionEnd(duration, function () {\n if (!instance.state.isVisible && popper.parentNode && popper.parentNode.contains(popper)) {\n callback();\n }\n });\n }\n /**\n * Invokes a callback once the tooltip has fully transitioned in\n */\n\n\n function onTransitionedIn(duration, callback) {\n onTransitionEnd(duration, callback);\n }\n /**\n * Invokes a callback once the tooltip's CSS transition ends\n */\n\n\n function onTransitionEnd(duration, callback) {\n var tooltip = instance.popperChildren.tooltip;\n /**\n * Listener added as the `transitionend` handler\n */\n\n function listener(event) {\n if (event.target === tooltip) {\n updateTransitionEndListener(tooltip, 'remove', listener);\n callback();\n }\n } // Make callback synchronous if duration is 0\n // `transitionend` won't fire otherwise\n\n\n if (duration === 0) {\n return callback();\n }\n\n updateTransitionEndListener(tooltip, 'remove', currentTransitionEndListener);\n updateTransitionEndListener(tooltip, 'add', listener);\n currentTransitionEndListener = listener;\n }\n /**\n * Adds an event listener to the reference and stores it in `listeners`\n */\n\n\n function on(eventType, handler) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n getEventListenersTarget().addEventListener(eventType, handler, options);\n listeners.push({\n eventType: eventType,\n handler: handler,\n options: options\n });\n }\n /**\n * Adds event listeners to the reference based on the `trigger` prop\n */\n\n\n function addTriggersToReference() {\n if (instance.props.touchHold && !instance.props.target) {\n on('touchstart', onTrigger, PASSIVE);\n on('touchend', onMouseLeave, PASSIVE);\n }\n\n instance.props.trigger.trim().split(' ').forEach(function (eventType) {\n if (eventType === 'manual') {\n return;\n } // Non-delegates\n\n\n if (!instance.props.target) {\n on(eventType, onTrigger);\n\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave);\n break;\n\n case 'focus':\n on(isIE ? 'focusout' : 'blur', onBlur);\n break;\n }\n } else {\n // Delegates\n switch (eventType) {\n case 'mouseenter':\n on('mouseover', onDelegateShow);\n on('mouseout', onDelegateHide);\n break;\n\n case 'focus':\n on('focusin', onDelegateShow);\n on('focusout', onDelegateHide);\n break;\n\n case 'click':\n on(eventType, onDelegateShow);\n break;\n }\n }\n });\n }\n /**\n * Removes event listeners from the reference\n */\n\n\n function removeTriggersFromReference() {\n listeners.forEach(function (_ref) {\n var eventType = _ref.eventType,\n handler = _ref.handler,\n options = _ref.options;\n getEventListenersTarget().removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n /**\n * Positions the virtual reference near the cursor\n */\n\n\n function positionVirtualReferenceNearCursor(event) {\n var _lastMouseMoveEvent = lastMouseMoveEvent = event,\n x = _lastMouseMoveEvent.clientX,\n y = _lastMouseMoveEvent.clientY; // Gets set once popperInstance `onCreate` has been called\n\n\n if (!currentComputedPadding) {\n return;\n } // If the instance is interactive, avoid updating the position unless it's\n // over the reference element\n\n\n var isCursorOverReference = closestCallback(event.target, function (el) {\n return el === reference;\n });\n var rect = reference.getBoundingClientRect();\n var followCursor = instance.props.followCursor;\n var isHorizontal = followCursor === 'horizontal';\n var isVertical = followCursor === 'vertical'; // The virtual reference needs some size to prevent itself from overflowing\n\n var isVerticalPlacement = includes(['top', 'bottom'], getBasicPlacement(popper));\n var fullPlacement = popper.getAttribute(PLACEMENT_ATTRIBUTE);\n var isVariation = fullPlacement ? !!fullPlacement.split('-')[1] : false;\n var size = isVerticalPlacement ? popper.offsetWidth : popper.offsetHeight;\n var halfSize = size / 2;\n var verticalIncrease = isVerticalPlacement ? 0 : isVariation ? size : halfSize;\n var horizontalIncrease = isVerticalPlacement ? isVariation ? size : halfSize : 0;\n\n if (isCursorOverReference || !instance.props.interactive) {\n instance.popperInstance.reference = _extends({}, instance.popperInstance.reference, {\n // This will exist in next Popper.js feature release to fix #532\n // @ts-ignore\n referenceNode: reference,\n // These `client` values don't get used by Popper.js if they are 0\n clientWidth: 0,\n clientHeight: 0,\n getBoundingClientRect: function getBoundingClientRect() {\n return {\n width: isVerticalPlacement ? size : 0,\n height: isVerticalPlacement ? 0 : size,\n top: (isHorizontal ? rect.top : y) - verticalIncrease,\n bottom: (isHorizontal ? rect.bottom : y) + verticalIncrease,\n left: (isVertical ? rect.left : x) - horizontalIncrease,\n right: (isVertical ? rect.right : x) + horizontalIncrease\n };\n }\n });\n instance.popperInstance.update();\n }\n\n if (followCursor === 'initial' && instance.state.isVisible) {\n removeFollowCursorListener();\n }\n }\n /**\n * Creates the tippy instance for a delegate when it's been triggered\n */\n\n\n function createDelegateChildTippy(event) {\n if (event) {\n var targetEl = closest(event.target, instance.props.target);\n\n if (targetEl && !targetEl._tippy) {\n createTippy(targetEl, _extends({}, instance.props, {\n content: invokeWithArgsOrReturn(collectionProps.content, [targetEl]),\n appendTo: collectionProps.appendTo,\n target: '',\n showOnInit: true\n }));\n }\n }\n }\n /**\n * Event listener invoked upon trigger\n */\n\n\n function onTrigger(event) {\n if (!instance.state.isEnabled || isEventListenerStopped(event)) {\n return;\n }\n\n if (!instance.state.isVisible) {\n lastTriggerEventType = event.type;\n\n if (event instanceof MouseEvent) {\n lastMouseMoveEvent = event; // If scrolling, `mouseenter` events can be fired if the cursor lands\n // over a new target, but `mousemove` events don't get fired. This\n // causes interactive tooltips to get stuck open until the cursor is\n // moved\n\n mouseMoveListeners.forEach(function (listener) {\n return listener(event);\n });\n }\n } // Toggle show/hide when clicking click-triggered tooltips\n\n\n if (event.type === 'click' && instance.props.hideOnClick !== false && instance.state.isVisible) {\n scheduleHide();\n } else {\n scheduleShow(event);\n }\n }\n /**\n * Event listener used for interactive tooltips to detect when they should\n * hide\n */\n\n\n function onMouseMove(event) {\n var isCursorOverPopper = closest(event.target, POPPER_SELECTOR) === popper;\n var isCursorOverReference = closestCallback(event.target, function (el) {\n return el === reference;\n });\n\n if (isCursorOverPopper || isCursorOverReference) {\n return;\n }\n\n if (isCursorOutsideInteractiveBorder(getBasicPlacement(popper), popper.getBoundingClientRect(), event, instance.props)) {\n cleanupInteractiveMouseListeners();\n scheduleHide();\n }\n }\n /**\n * Event listener invoked upon mouseleave\n */\n\n\n function onMouseLeave(event) {\n if (isEventListenerStopped(event)) {\n return;\n }\n\n if (instance.props.interactive) {\n document.body.addEventListener('mouseleave', scheduleHide);\n document.addEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners.push(debouncedOnMouseMove);\n return;\n }\n\n scheduleHide();\n }\n /**\n * Event listener invoked upon blur\n */\n\n\n function onBlur(event) {\n if (event.target !== getEventListenersTarget()) {\n return;\n }\n\n if (instance.props.interactive && event.relatedTarget && popper.contains(event.relatedTarget)) {\n return;\n }\n\n scheduleHide();\n }\n /**\n * Event listener invoked when a child target is triggered\n */\n\n\n function onDelegateShow(event) {\n if (closest(event.target, instance.props.target)) {\n scheduleShow(event);\n }\n }\n /**\n * Event listener invoked when a child target should hide\n */\n\n\n function onDelegateHide(event) {\n if (closest(event.target, instance.props.target)) {\n scheduleHide();\n }\n }\n /**\n * Determines if an event listener should stop further execution due to the\n * `touchHold` option\n */\n\n\n function isEventListenerStopped(event) {\n var supportsTouch = ('ontouchstart' in window);\n var isTouchEvent = includes(event.type, 'touch');\n var touchHold = instance.props.touchHold;\n return supportsTouch && isUsingTouch && touchHold && !isTouchEvent || isUsingTouch && !touchHold && isTouchEvent;\n }\n /**\n * Runs the mount callback\n */\n\n\n function runMountCallback() {\n if (!hasMountCallbackRun && currentMountCallback) {\n hasMountCallbackRun = true;\n reflow(popper);\n currentMountCallback();\n }\n }\n /**\n * Creates the popper instance for the instance\n */\n\n\n function createPopperInstance() {\n var popperOptions = instance.props.popperOptions;\n var _instance$popperChild = instance.popperChildren,\n tooltip = _instance$popperChild.tooltip,\n arrow = _instance$popperChild.arrow;\n var preventOverflowModifier = getModifier(popperOptions, 'preventOverflow');\n\n function applyMutations(data) {\n if (instance.props.flip && !instance.props.flipOnUpdate) {\n if (data.flipped) {\n instance.popperInstance.options.placement = data.placement;\n }\n\n setFlipModifierEnabled(instance.popperInstance.modifiers, false);\n } // Apply all of the popper's attributes to the tootip node as well.\n // Allows users to avoid using the .tippy-popper selector for themes.\n\n\n tooltip.setAttribute(PLACEMENT_ATTRIBUTE, data.placement);\n\n if (data.attributes[OUT_OF_BOUNDARIES_ATTRIBUTE] !== false) {\n tooltip.setAttribute(OUT_OF_BOUNDARIES_ATTRIBUTE, '');\n } else {\n tooltip.removeAttribute(OUT_OF_BOUNDARIES_ATTRIBUTE);\n } // Prevents a transition when changing placements (while tippy is visible)\n // for scroll/resize updates\n\n\n if (previousPlacement && previousPlacement !== data.placement && wasVisibleDuringPreviousUpdate) {\n tooltip.style.transition = 'none';\n requestAnimationFrame(function () {\n tooltip.style.transition = '';\n });\n }\n\n previousPlacement = data.placement;\n wasVisibleDuringPreviousUpdate = instance.state.isVisible;\n var basicPlacement = getBasicPlacement(popper);\n var styles = tooltip.style; // Account for the `distance` offset\n\n styles.top = styles.bottom = styles.left = styles.right = '';\n styles[basicPlacement] = getOffsetDistanceInPx(instance.props.distance);\n var padding = preventOverflowModifier && preventOverflowModifier.padding !== undefined ? preventOverflowModifier.padding : PADDING;\n var isPaddingNumber = typeof padding === 'number';\n\n var computedPadding = _extends({\n top: isPaddingNumber ? padding : padding.top,\n bottom: isPaddingNumber ? padding : padding.bottom,\n left: isPaddingNumber ? padding : padding.left,\n right: isPaddingNumber ? padding : padding.right\n }, !isPaddingNumber && padding);\n\n computedPadding[basicPlacement] = isPaddingNumber ? padding + instance.props.distance : (padding[basicPlacement] || 0) + instance.props.distance;\n instance.popperInstance.modifiers.filter(function (m) {\n return m.name === 'preventOverflow';\n })[0].padding = computedPadding;\n currentComputedPadding = computedPadding;\n }\n\n var config = _extends({\n eventsEnabled: false,\n placement: instance.props.placement\n }, popperOptions, {\n modifiers: _extends({}, popperOptions ? popperOptions.modifiers : {}, {\n preventOverflow: _extends({\n boundariesElement: instance.props.boundary,\n padding: PADDING\n }, preventOverflowModifier),\n arrow: _extends({\n element: arrow,\n enabled: !!arrow\n }, getModifier(popperOptions, 'arrow')),\n flip: _extends({\n enabled: instance.props.flip,\n // The tooltip is offset by 10px from the popper in CSS,\n // we need to account for its distance\n padding: instance.props.distance + PADDING,\n behavior: instance.props.flipBehavior\n }, getModifier(popperOptions, 'flip')),\n offset: _extends({\n offset: instance.props.offset\n }, getModifier(popperOptions, 'offset'))\n }),\n onCreate: function onCreate(data) {\n applyMutations(data);\n runMountCallback();\n\n if (popperOptions && popperOptions.onCreate) {\n popperOptions.onCreate(data);\n }\n },\n onUpdate: function onUpdate(data) {\n applyMutations(data);\n runMountCallback();\n\n if (popperOptions && popperOptions.onUpdate) {\n popperOptions.onUpdate(data);\n }\n }\n });\n\n instance.popperInstance = new Popper(reference, popper, config);\n }\n /**\n * Mounts the tooltip to the DOM\n */\n\n\n function mount() {\n hasMountCallbackRun = false;\n var isInLooseFollowCursorMode = getIsInLooseFollowCursorMode();\n\n if (instance.popperInstance) {\n setFlipModifierEnabled(instance.popperInstance.modifiers, instance.props.flip);\n\n if (!isInLooseFollowCursorMode) {\n instance.popperInstance.reference = reference;\n instance.popperInstance.enableEventListeners();\n }\n\n instance.popperInstance.scheduleUpdate();\n } else {\n createPopperInstance();\n\n if (!isInLooseFollowCursorMode) {\n instance.popperInstance.enableEventListeners();\n }\n }\n\n var appendTo = instance.props.appendTo;\n var parentNode = appendTo === 'parent' ? reference.parentNode : invokeWithArgsOrReturn(appendTo, [reference]);\n\n if (!parentNode.contains(popper)) {\n parentNode.appendChild(popper);\n instance.props.onMount(instance);\n instance.state.isMounted = true;\n }\n }\n /**\n * Setup before show() is invoked (delays, etc.)\n */\n\n\n function scheduleShow(event, shouldAvoidCallingOnTrigger) {\n clearDelayTimeouts();\n\n if (instance.state.isVisible) {\n return;\n } // Is a delegate, create an instance for the child target\n\n\n if (instance.props.target) {\n return createDelegateChildTippy(event);\n }\n\n isScheduledToShow = true;\n\n if (event && !shouldAvoidCallingOnTrigger) {\n instance.props.onTrigger(instance, event);\n }\n\n if (instance.props.wait) {\n return instance.props.wait(instance, event);\n } // If the tooltip has a delay, we need to be listening to the mousemove as\n // soon as the trigger event is fired, so that it's in the correct position\n // upon mount.\n // Edge case: if the tooltip is still mounted, but then scheduleShow() is\n // called, it causes a jump.\n\n\n if (getIsInLooseFollowCursorMode() && !instance.state.isMounted) {\n if (!instance.popperInstance) {\n createPopperInstance();\n }\n\n document.addEventListener('mousemove', positionVirtualReferenceNearCursor);\n }\n\n addDocumentClickListener();\n var delay = getValue(instance.props.delay, 0, defaultProps.delay);\n\n if (delay) {\n showTimeoutId = setTimeout(function () {\n show();\n }, delay);\n } else {\n show();\n }\n }\n /**\n * Setup before hide() is invoked (delays, etc.)\n */\n\n\n function scheduleHide() {\n clearDelayTimeouts();\n\n if (!instance.state.isVisible) {\n removeFollowCursorListener();\n removeDocumentClickListener();\n return;\n }\n\n isScheduledToShow = false;\n var delay = getValue(instance.props.delay, 1, defaultProps.delay);\n\n if (delay) {\n hideTimeoutId = setTimeout(function () {\n if (instance.state.isVisible) {\n hide();\n }\n }, delay);\n } else {\n // Fixes a `transitionend` problem when it fires 1 frame too\n // late sometimes, we don't want hide() to be called.\n scheduleHideAnimationFrameId = requestAnimationFrame(function () {\n hide();\n });\n }\n }\n /**\n * Listener to handle clicks on the document to determine if the\n * instance should hide\n */\n\n\n function onDocumentClick(event) {\n // Clicked on interactive popper\n if (instance.props.interactive && popper.contains(event.target)) {\n return;\n } // Clicked on the event listeners target\n\n\n if (getEventListenersTarget().contains(event.target)) {\n if (isUsingTouch) {\n return;\n }\n\n if (instance.state.isVisible && includes(instance.props.trigger, 'click')) {\n return;\n }\n }\n\n if (instance.props.hideOnClick === true) {\n clearDelayTimeouts();\n hide();\n }\n }\n /* ======================= 🔑 Public methods 🔑 ======================= */\n\n /**\n * Enables the instance to allow it to show or hide\n */\n\n\n function enable() {\n instance.state.isEnabled = true;\n }\n /**\n * Disables the instance to disallow it to show or hide\n */\n\n\n function disable() {\n instance.state.isEnabled = false;\n }\n /**\n * Clears pending timeouts related to the `delay` prop if any\n */\n\n\n function clearDelayTimeouts() {\n clearTimeout(showTimeoutId);\n clearTimeout(hideTimeoutId);\n cancelAnimationFrame(scheduleHideAnimationFrameId);\n }\n /**\n * Sets new props for the instance and redraws the tooltip\n */\n\n\n function set(options) {\n // Backwards-compatible after TypeScript change\n options = options || {};\n validateOptions(options, defaultProps);\n removeTriggersFromReference();\n var prevProps = instance.props;\n var nextProps = evaluateProps(reference, _extends({}, instance.props, {}, options, {\n ignoreAttributes: true\n }));\n nextProps.ignoreAttributes = hasOwnProperty(options, 'ignoreAttributes') ? options.ignoreAttributes || false : prevProps.ignoreAttributes;\n instance.props = nextProps;\n addTriggersToReference();\n cleanupInteractiveMouseListeners();\n debouncedOnMouseMove = debounce(onMouseMove, nextProps.interactiveDebounce);\n updatePopperElement(popper, prevProps, nextProps);\n instance.popperChildren = getChildren(popper);\n\n if (instance.popperInstance) {\n if (POPPER_INSTANCE_DEPENDENCIES.some(function (prop) {\n return hasOwnProperty(options, prop) && options[prop] !== prevProps[prop];\n })) {\n instance.popperInstance.destroy();\n createPopperInstance();\n\n if (instance.state.isVisible) {\n instance.popperInstance.enableEventListeners();\n }\n\n if (instance.props.followCursor && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n }\n } else {\n instance.popperInstance.update();\n }\n }\n }\n /**\n * Shortcut for .set({ content: newContent })\n */\n\n\n function setContent(content) {\n set({\n content: content\n });\n }\n /**\n * Shows the tooltip\n */\n\n\n function show() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(instance.props.duration, 0, defaultProps.duration[1]);\n\n if (instance.state.isDestroyed || !instance.state.isEnabled || isUsingTouch && !instance.props.touch) {\n return;\n } // Standardize `disabled` behavior across browsers.\n // Firefox allows events on disabled elements, but Chrome doesn't.\n // Using a wrapper element (i.e. ) is recommended.\n\n\n if (getEventListenersTarget().hasAttribute('disabled')) {\n return;\n }\n\n if (instance.props.onShow(instance) === false) {\n return;\n }\n\n addDocumentClickListener();\n popper.style.visibility = 'visible';\n instance.state.isVisible = true;\n\n if (instance.props.interactive) {\n getEventListenersTarget().classList.add(ACTIVE_CLASS);\n } // Prevent a transition if the popper is at the opposite placement\n\n\n var transitionableElements = getTransitionableElements();\n setTransitionDuration(transitionableElements.concat(popper), 0);\n\n currentMountCallback = function currentMountCallback() {\n if (!instance.state.isVisible) {\n return;\n }\n\n var isInLooseFollowCursorMode = getIsInLooseFollowCursorMode();\n\n if (isInLooseFollowCursorMode && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n } else if (!isInLooseFollowCursorMode) {\n // Double update will apply correct mutations\n instance.popperInstance.update();\n }\n\n if (instance.popperChildren.backdrop) {\n instance.popperChildren.content.style.transitionDelay = Math.round(duration / 12) + 'ms';\n }\n\n if (instance.props.sticky) {\n makeSticky();\n }\n\n setTransitionDuration([popper], instance.props.updateDuration);\n setTransitionDuration(transitionableElements, duration);\n setVisibilityState(transitionableElements, 'visible');\n onTransitionedIn(duration, function () {\n if (instance.props.aria) {\n getEventListenersTarget().setAttribute(\"aria-\".concat(instance.props.aria), popper.id);\n }\n\n instance.props.onShown(instance);\n instance.state.isShown = true;\n });\n };\n\n mount();\n }\n /**\n * Hides the tooltip\n */\n\n\n function hide() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(instance.props.duration, 1, defaultProps.duration[1]);\n\n if (instance.state.isDestroyed || !instance.state.isEnabled && !isBeingDestroyed) {\n return;\n }\n\n if (instance.props.onHide(instance) === false && !isBeingDestroyed) {\n return;\n }\n\n removeDocumentClickListener();\n popper.style.visibility = 'hidden';\n instance.state.isVisible = false;\n instance.state.isShown = false;\n wasVisibleDuringPreviousUpdate = false;\n\n if (instance.props.interactive) {\n getEventListenersTarget().classList.remove(ACTIVE_CLASS);\n }\n\n var transitionableElements = getTransitionableElements();\n setTransitionDuration(transitionableElements, duration);\n setVisibilityState(transitionableElements, 'hidden');\n onTransitionedOut(duration, function () {\n if (!isScheduledToShow) {\n removeFollowCursorListener();\n }\n\n if (instance.props.aria) {\n getEventListenersTarget().removeAttribute(\"aria-\".concat(instance.props.aria));\n }\n\n instance.popperInstance.disableEventListeners();\n instance.popperInstance.options.placement = instance.props.placement;\n popper.parentNode.removeChild(popper);\n instance.props.onHidden(instance);\n instance.state.isMounted = false;\n });\n }\n /**\n * Destroys the tooltip\n */\n\n\n function destroy(destroyTargetInstances) {\n if (instance.state.isDestroyed) {\n return;\n }\n\n isBeingDestroyed = true; // If the popper is currently mounted to the DOM, we want to ensure it gets\n // hidden and unmounted instantly upon destruction\n\n if (instance.state.isMounted) {\n hide(0);\n }\n\n removeTriggersFromReference();\n delete reference._tippy;\n var target = instance.props.target;\n\n if (target && destroyTargetInstances && isRealElement(reference)) {\n arrayFrom(reference.querySelectorAll(target)).forEach(function (child) {\n if (child._tippy) {\n child._tippy.destroy();\n }\n });\n }\n\n if (instance.popperInstance) {\n instance.popperInstance.destroy();\n }\n\n isBeingDestroyed = false;\n instance.state.isDestroyed = true;\n }\n}\n/**\n * Groups an array of instances by taking control of their props during\n * certain lifecycles.\n */\n\n\nfunction group(instances) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$delay = _ref.delay,\n delay = _ref$delay === void 0 ? instances[0].props.delay : _ref$delay,\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 0 : _ref$duration;\n\n var isAnyTippyOpen = false;\n instances.forEach(function (instance) {\n if (instance._originalProps) {\n instance.set(instance._originalProps);\n } else {\n instance._originalProps = _extends({}, instance.props);\n }\n });\n\n function setIsAnyTippyOpen(value) {\n isAnyTippyOpen = value;\n updateInstances();\n }\n\n function onShow(instance) {\n instance._originalProps.onShow(instance);\n\n instances.forEach(function (instance) {\n instance.set({\n duration: duration\n });\n\n if (instance.state.isVisible) {\n instance.hide();\n }\n });\n setIsAnyTippyOpen(true);\n }\n\n function onHide(instance) {\n instance._originalProps.onHide(instance);\n\n setIsAnyTippyOpen(false);\n }\n\n function onShown(instance) {\n instance._originalProps.onShown(instance);\n\n instance.set({\n duration: instance._originalProps.duration\n });\n }\n\n function updateInstances() {\n instances.forEach(function (instance) {\n instance.set({\n onShow: onShow,\n onShown: onShown,\n onHide: onHide,\n delay: isAnyTippyOpen ? [0, Array.isArray(delay) ? delay[1] : delay] : delay,\n duration: isAnyTippyOpen ? duration : instance._originalProps.duration\n });\n });\n }\n\n updateInstances();\n}\n\nvar globalEventListenersBound = false;\n/**\n * Exported module\n */\n\nfunction tippy(targets, options) {\n validateOptions(options || {}, defaultProps);\n\n if (!globalEventListenersBound) {\n bindGlobalEventListeners();\n globalEventListenersBound = true;\n }\n\n var props = _extends({}, defaultProps, {}, options); // If they are specifying a virtual positioning reference, we need to polyfill\n // some native DOM props\n\n\n if (isBareVirtualElement(targets)) {\n polyfillElementPrototypeProperties(targets);\n }\n\n var instances = getArrayOfElements(targets).reduce(function (acc, reference) {\n var instance = reference && createTippy(reference, props);\n\n if (instance) {\n acc.push(instance);\n }\n\n return acc;\n }, []);\n return isSingular(targets) ? instances[0] : instances;\n}\n/**\n * Static props\n */\n\n\ntippy.version = version;\ntippy.defaults = defaultProps;\n/**\n * Static methods\n */\n\ntippy.setDefaults = function (partialDefaults) {\n Object.keys(partialDefaults).forEach(function (key) {\n // @ts-ignore\n defaultProps[key] = partialDefaults[key];\n });\n};\n\ntippy.hideAll = hideAll;\ntippy.group = group;\n/**\n * Auto-init tooltips for elements with a `data-tippy=\"...\"` attribute\n */\n\nfunction autoInit() {\n arrayFrom(document.querySelectorAll('[data-tippy]')).forEach(function (el) {\n var content = el.getAttribute('data-tippy');\n\n if (content) {\n tippy(el, {\n content: content\n });\n }\n });\n}\n\nif (isBrowser) {\n setTimeout(autoInit);\n}\n/**\n * Injects a string of CSS styles to a style node in \n */\n\n\nfunction injectCSS(css) {\n if (isBrowser) {\n var style = document.createElement('style');\n style.type = 'text/css';\n style.textContent = css;\n style.setAttribute('data-tippy-stylesheet', '');\n var head = document.head;\n var firstStyleOrLinkTag = head.querySelector('style,link');\n\n if (firstStyleOrLinkTag) {\n head.insertBefore(style, firstStyleOrLinkTag);\n } else {\n head.appendChild(style);\n }\n }\n}\n\ninjectCSS(css);\nexport default tippy;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar MicroModal = function () {\n var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n\n var Modal = /*#__PURE__*/function () {\n function Modal(_ref) {\n var targetModal = _ref.targetModal,\n _ref$triggers = _ref.triggers,\n triggers = _ref$triggers === void 0 ? [] : _ref$triggers,\n _ref$onShow = _ref.onShow,\n onShow = _ref$onShow === void 0 ? function () {} : _ref$onShow,\n _ref$onClose = _ref.onClose,\n onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,\n _ref$openTrigger = _ref.openTrigger,\n openTrigger = _ref$openTrigger === void 0 ? 'data-micromodal-trigger' : _ref$openTrigger,\n _ref$closeTrigger = _ref.closeTrigger,\n closeTrigger = _ref$closeTrigger === void 0 ? 'data-micromodal-close' : _ref$closeTrigger,\n _ref$disableScroll = _ref.disableScroll,\n disableScroll = _ref$disableScroll === void 0 ? false : _ref$disableScroll,\n _ref$disableFocus = _ref.disableFocus,\n disableFocus = _ref$disableFocus === void 0 ? false : _ref$disableFocus,\n _ref$awaitCloseAnimat = _ref.awaitCloseAnimation,\n awaitCloseAnimation = _ref$awaitCloseAnimat === void 0 ? false : _ref$awaitCloseAnimat,\n _ref$awaitOpenAnimati = _ref.awaitOpenAnimation,\n awaitOpenAnimation = _ref$awaitOpenAnimati === void 0 ? false : _ref$awaitOpenAnimati,\n _ref$debugMode = _ref.debugMode,\n debugMode = _ref$debugMode === void 0 ? false : _ref$debugMode;\n\n _classCallCheck(this, Modal);\n\n // Save a reference of the modal\n this.modal = document.getElementById(targetModal); // Save a reference to the passed config\n\n this.config = {\n debugMode: debugMode,\n disableScroll: disableScroll,\n openTrigger: openTrigger,\n closeTrigger: closeTrigger,\n onShow: onShow,\n onClose: onClose,\n awaitCloseAnimation: awaitCloseAnimation,\n awaitOpenAnimation: awaitOpenAnimation,\n disableFocus: disableFocus // Register click events only if pre binding eventListeners\n\n };\n if (triggers.length > 0) this.registerTriggers.apply(this, _toConsumableArray(triggers)); // pre bind functions for event listeners\n\n this.onClick = this.onClick.bind(this);\n this.onKeydown = this.onKeydown.bind(this);\n }\n /**\n * Loops through all openTriggers and binds click event\n * @param {array} triggers [Array of node elements]\n * @return {void}\n */\n\n\n _createClass(Modal, [{\n key: \"registerTriggers\",\n value: function registerTriggers() {\n var _this = this;\n\n for (var _len = arguments.length, triggers = new Array(_len), _key = 0; _key < _len; _key++) {\n triggers[_key] = arguments[_key];\n }\n\n triggers.filter(Boolean).forEach(function (trigger) {\n trigger.addEventListener('click', function (event) {\n return _this.showModal(event);\n });\n });\n }\n }, {\n key: \"showModal\",\n value: function showModal() {\n var _this2 = this;\n\n this.activeElement = document.activeElement;\n this.modal.setAttribute('aria-hidden', 'false');\n this.modal.classList.add('is-open');\n this.scrollBehaviour('disable');\n this.addEventListeners();\n\n if (this.config.awaitOpenAnimation) {\n var handler = function handler() {\n _this2.modal.removeEventListener('animationend', handler, false);\n\n _this2.setFocusToFirstNode();\n };\n\n this.modal.addEventListener('animationend', handler, false);\n } else {\n this.setFocusToFirstNode();\n }\n\n this.config.onShow(this.modal, this.activeElement);\n }\n }, {\n key: \"closeModal\",\n value: function closeModal() {\n var modal = this.modal;\n this.modal.setAttribute('aria-hidden', 'true');\n this.removeEventListeners();\n this.scrollBehaviour('enable');\n\n if (this.activeElement) {\n this.activeElement.focus();\n }\n\n this.config.onClose(this.modal);\n\n if (this.config.awaitCloseAnimation) {\n this.modal.addEventListener('animationend', function handler() {\n modal.classList.remove('is-open');\n modal.removeEventListener('animationend', handler, false);\n }, false);\n } else {\n modal.classList.remove('is-open');\n }\n }\n }, {\n key: \"closeModalById\",\n value: function closeModalById(targetModal) {\n this.modal = document.getElementById(targetModal);\n if (this.modal) this.closeModal();\n }\n }, {\n key: \"scrollBehaviour\",\n value: function scrollBehaviour(toggle) {\n if (!this.config.disableScroll) return;\n var body = document.querySelector('body');\n\n switch (toggle) {\n case 'enable':\n Object.assign(body.style, {\n overflow: '',\n height: ''\n });\n break;\n\n case 'disable':\n Object.assign(body.style, {\n overflow: 'hidden',\n height: '100vh'\n });\n break;\n\n default:\n }\n }\n }, {\n key: \"addEventListeners\",\n value: function addEventListeners() {\n this.modal.addEventListener('touchstart', this.onClick);\n this.modal.addEventListener('click', this.onClick);\n document.addEventListener('keydown', this.onKeydown);\n }\n }, {\n key: \"removeEventListeners\",\n value: function removeEventListeners() {\n this.modal.removeEventListener('touchstart', this.onClick);\n this.modal.removeEventListener('click', this.onClick);\n document.removeEventListener('keydown', this.onKeydown);\n }\n }, {\n key: \"onClick\",\n value: function onClick(event) {\n if (event.target.hasAttribute(this.config.closeTrigger)) {\n this.closeModal();\n event.preventDefault();\n }\n }\n }, {\n key: \"onKeydown\",\n value: function onKeydown(event) {\n if (event.keyCode === 27) this.closeModal(event);\n if (event.keyCode === 9) this.maintainFocus(event);\n }\n }, {\n key: \"getFocusableNodes\",\n value: function getFocusableNodes() {\n var nodes = this.modal.querySelectorAll(FOCUSABLE_ELEMENTS);\n return Array.apply(void 0, _toConsumableArray(nodes));\n }\n }, {\n key: \"setFocusToFirstNode\",\n value: function setFocusToFirstNode() {\n if (this.config.disableFocus) return;\n var focusableNodes = this.getFocusableNodes();\n if (focusableNodes.length) focusableNodes[0].focus();\n }\n }, {\n key: \"maintainFocus\",\n value: function maintainFocus(event) {\n var focusableNodes = this.getFocusableNodes(); // if disableFocus is true\n\n if (!this.modal.contains(document.activeElement)) {\n focusableNodes[0].focus();\n } else {\n var focusedItemIndex = focusableNodes.indexOf(document.activeElement);\n\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableNodes[focusableNodes.length - 1].focus();\n event.preventDefault();\n }\n\n if (!event.shiftKey && focusedItemIndex === focusableNodes.length - 1) {\n focusableNodes[0].focus();\n event.preventDefault();\n }\n }\n }\n }]);\n\n return Modal;\n }();\n /**\n * Modal prototype ends.\n * Here on code is responsible for detecting and\n * auto binding event handlers on modal triggers\n */\n // Keep a reference to the opened modal\n\n\n var activeModal = null;\n /**\n * Generates an associative array of modals and it's\n * respective triggers\n * @param {array} triggers An array of all triggers\n * @param {string} triggerAttr The data-attribute which triggers the module\n * @return {array}\n */\n\n var generateTriggerMap = function generateTriggerMap(triggers, triggerAttr) {\n var triggerMap = [];\n triggers.forEach(function (trigger) {\n var targetModal = trigger.attributes[triggerAttr].value;\n if (triggerMap[targetModal] === undefined) triggerMap[targetModal] = [];\n triggerMap[targetModal].push(trigger);\n });\n return triggerMap;\n };\n /**\n * Validates whether a modal of the given id exists\n * in the DOM\n * @param {number} id The id of the modal\n * @return {boolean}\n */\n\n\n var validateModalPresence = function validateModalPresence(id) {\n if (!document.getElementById(id)) {\n console.warn(\"MicroModal: \\u2757Seems like you have missed %c'\".concat(id, \"'\"), 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'ID somewhere in your code. Refer example below to resolve it.');\n console.warn(\"%cExample:\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', \"
\"));\n return false;\n }\n };\n /**\n * Validates if there are modal triggers present\n * in the DOM\n * @param {array} triggers An array of data-triggers\n * @return {boolean}\n */\n\n\n var validateTriggerPresence = function validateTriggerPresence(triggers) {\n if (triggers.length <= 0) {\n console.warn(\"MicroModal: \\u2757Please specify at least one %c'micromodal-trigger'\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'data attribute.');\n console.warn(\"%cExample:\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', \"\");\n return false;\n }\n };\n /**\n * Checks if triggers and their corresponding modals\n * are present in the DOM\n * @param {array} triggers Array of DOM nodes which have data-triggers\n * @param {array} triggerMap Associative array of modals and their triggers\n * @return {boolean}\n */\n\n\n var validateArgs = function validateArgs(triggers, triggerMap) {\n validateTriggerPresence(triggers);\n if (!triggerMap) return true;\n\n for (var id in triggerMap) {\n validateModalPresence(id);\n }\n\n return true;\n };\n /**\n * Binds click handlers to all modal triggers\n * @param {object} config [description]\n * @return void\n */\n\n\n var init = function init(config) {\n // Create an config object with default openTrigger\n var options = Object.assign({}, {\n openTrigger: 'data-micromodal-trigger'\n }, config); // Collects all the nodes with the trigger\n\n var triggers = _toConsumableArray(document.querySelectorAll(\"[\".concat(options.openTrigger, \"]\"))); // Makes a mappings of modals with their trigger nodes\n\n\n var triggerMap = generateTriggerMap(triggers, options.openTrigger); // Checks if modals and triggers exist in dom\n\n if (options.debugMode === true && validateArgs(triggers, triggerMap) === false) return; // For every target modal creates a new instance\n\n for (var key in triggerMap) {\n var value = triggerMap[key];\n options.targetModal = key;\n options.triggers = _toConsumableArray(value);\n activeModal = new Modal(options); // eslint-disable-line no-new\n }\n };\n /**\n * Shows a particular modal\n * @param {string} targetModal [The id of the modal to display]\n * @param {object} config [The configuration object to pass]\n * @return {void}\n */\n\n\n var show = function show(targetModal, config) {\n var options = config || {};\n options.targetModal = targetModal; // Checks if modals and triggers exist in dom\n\n if (options.debugMode === true && validateModalPresence(targetModal) === false) return; // stores reference to active modal\n\n activeModal = new Modal(options); // eslint-disable-line no-new\n\n activeModal.showModal();\n };\n /**\n * Closes the active modal\n * @param {string} targetModal [The id of the modal to close]\n * @return {void}\n */\n\n\n var close = function close(targetModal) {\n targetModal ? activeModal.closeModalById(targetModal) : activeModal.closeModal();\n };\n\n return {\n init: init,\n show: show,\n close: close\n };\n}();\n\nexport default MicroModal;","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\n\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\n\n\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n } // NOTE: 1 DOM access here\n\n\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\n\n\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n\n return element.parentNode || element.host;\n}\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\n\n\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n\n case '#document':\n return element.body;\n } // Firefox want us to check `-x` and `-y` variations as well\n\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\n\n\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\n\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n\n if (version === 10) {\n return isIE10;\n }\n\n return isIE11 || isIE10;\n}\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n\n\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here\n\n var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent\n\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n } // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n\n\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\n\n\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\n\n\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n } // Here we make sure to give as \"start\" the element that comes first in the DOM\n\n\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1; // Get common ancestor container\n\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n } // one of the nodes is inside shadowDOM, find which one\n\n\n var element1root = getRoot(element1);\n\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\n\n\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\n\n\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _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 * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\n\n\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n\n\nfunction getBoundingClientRect(element) {\n var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n }; // subtract scrollbar size from sizes\n\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them\n\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n return getClientRect(offset);\n}\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n\n\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n\n var parentNode = getParentNode(element);\n\n if (!parentNode) {\n return false;\n }\n\n return isFixed(parentNode);\n}\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n\n var el = element.parentElement;\n\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n\n return el || document.documentElement;\n}\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\n\n\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here\n\n var boundaries = {\n top: 0,\n left: 0\n };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case\n\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation\n\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n } // Add paddings\n\n\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n return width * height;\n}\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n var variation = placement.split('-')[1];\n return computedPlacement + (variation ? '-' + variation : '');\n}\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n\n\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n\n\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n\n\nfunction getOppositePlacement(placement) {\n var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\n\n\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0]; // Get popper node sizes\n\n var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object\n\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n }; // depending by the popper placement we have to compute its offsets slightly differently\n\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n\n\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n } // use `filter` to obtain the same behavior of `find`\n\n\n return arr.filter(check)[0];\n}\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n\n\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n } // use `find` + `indexOf` if `findIndex` isn't supported\n\n\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\n\n\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n data = fn(data, modifier);\n }\n });\n return data;\n}\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\n\n\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n }; // compute reference element offsets\n\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement`\n\n data.originalPlacement = data.placement;\n data.positionFixed = this.options.positionFixed; // compute the popper offsets\n\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers\n\n data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n\n\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\n\n\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n\n return null;\n}\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\n\n\nfunction destroy() {\n this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled\n\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners(); // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n\n return this;\n}\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n\n\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, {\n passive: true\n });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n\n scrollParents.push(target);\n}\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, {\n passive: true\n }); // Scroll event listener on scroll parents\n\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n return state;\n}\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\n\n\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents\n\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n }); // Reset state\n\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\n\n\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\n\n\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n\n\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = ''; // add unit if the value is numeric and is one of the following\n\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n\n element.style[prop] = styles[prop] + unit;\n });\n}\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n\n\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\n\n\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n\n setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties\n\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\n\n\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n\n setStyles(popper, {\n position: options.positionFixed ? 'fixed' : 'absolute'\n });\n return options;\n}\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\n\n\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper; // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent); // Styles\n\n var styles = {\n position: popper.position\n };\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n\n var prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n\n var left = void 0,\n top = void 0;\n\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n } // Attributes\n\n\n var attributes = {\n 'x-placement': data.placement\n }; // Update `data` attributes, styles and arrowStyles\n\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n return data;\n}\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\n\n\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n\n return isRequired;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction arrow(data, options) {\n var _data$offsets$arrow; // arrow depends on keepTogether in order to work\n\n\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector\n\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier\n\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len]; //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n // top/left side\n\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n } // bottom/right side\n\n\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n\n data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper\n\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper\n\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n return data;\n}\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\n\n\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n\n return variation;\n}\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\n\n\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; // Get rid of `auto` `auto-start` and `auto-end`\n\nvar validPlacements = placements.slice(3);\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\n\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here\n\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required\n\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries\n\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries\n\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\n\n\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2]; // If it's not a number it's an operator, I guess\n\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\n\n\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n }); // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n } // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n\n\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; // Convert the values with units to absolute pixels to allow our computations\n\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, []) // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n }); // Loop trough the offsets arrays and execute the operations\n\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var basePlacement = placement.split('-')[0];\n var offsets = void 0;\n\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n } // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n\n\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n options.boundaries = boundaries;\n var order = options.priority;\n var popper = data.offsets.popper;\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n\n return defineProperty({}, mainSide, value);\n }\n };\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n data.offsets.popper = popper;\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier\n\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n return data;\n}\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\n\n\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: offset,\n\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: arrow,\n\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: flip,\n\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: computeStyle,\n\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: applyStyle,\n\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\n\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n// Utils\n// Methods\n\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n }; // make update() debounced, so that it only runs at most once-per-tick\n\n\n this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it\n\n this.options = _extends({}, Popper.Defaults, options); // init state\n\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n }; // get reference and popper elements (allow jQuery wrappers)\n\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options\n\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n }); // Refactoring modifiers' list (Object => Array)\n\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n }) // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n }); // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n }); // fire the first update to position the popper in the right place\n\n this.update();\n var eventsEnabled = this.options.eventsEnabled;\n\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n } // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\nexport default Popper;","/* Vendored from https://github.com/lodash/lodash/blob/2.4.2/lodash.js#L5742 */\n\n/**\n * Creates a function that will delay the execution of `func` until after\n * `wait` milliseconds have elapsed since the last time it was invoked.\n * Provide an options object to indicate that `func` should be invoked on\n * the leading and/or trailing edge of the `wait` timeout. Subsequent calls\n * to the debounced function will return the result of the last `func` call.\n *\n * Note: If `leading` and `trailing` options are `true` `func` will be called\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to debounce.\n * @param {number} wait The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.\n * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * var lazyLayout = _.debounce(calculateLayout, 150);\n * jQuery(window).on('resize', lazyLayout);\n *\n * // execute `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * });\n *\n * // ensure `batchLog` is executed once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * source.addEventListener('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }, false);\n */\n\nexport function debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true,\n nativeMax = Math.max,\n isObject = function(value) { return !!(value && objectTypes[typeof value]) },\n now = Date.now;\n\n wait = nativeMax(0, wait) || 0;\n\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = options.leading;\n maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);\n trailing = 'trailing' in options ? options.trailing : trailing;\n }\n var delayed = function() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0) {\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n var isCalled = trailingCall;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = null;\n }\n }\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n };\n\n var maxDelayed = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (trailing || (maxWait !== wait)) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = null;\n }\n }\n };\n\n return function() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = null;\n }\n return result;\n };\n}\n","const MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\n\nfunction getFormattedDate(date, prefomattedDate = false, hideYear = false) {\n const day = date.getDate();\n const month = MONTH_NAMES[date.getMonth()];\n const year = date.getFullYear();\n const hours = date.getHours();\n let minutes = date.getMinutes();\n\n if (minutes < 10) {\n // Adding leading zero to minutes\n minutes = `0${ minutes }`;\n }\n\n if (prefomattedDate) {\n // Today at 10:20\n // Yesterday at 10:20\n return `${ prefomattedDate } at ${ hours }:${ minutes }`;\n }\n\n if (hideYear) {\n // 10. January at 10:20\n return `${ month } ${ day }`;\n }\n\n // 10. January 2017. at 10:20\n return `${ day } ${ month } ${ year }`;\n}\n\n\n// --- Main function\nexport function timeAgo(dateParam) {\n if (!dateParam) {\n return null;\n }\n\n const date = typeof dateParam === 'object' ? dateParam : new Date(dateParam);\n const DAY_IN_MS = 86400000; // 24 * 60 * 60 * 1000\n const today = new Date();\n const yesterday = new Date(today - DAY_IN_MS);\n const seconds = Math.round((today - date) / 1000);\n const minutes = Math.round(seconds / 60);\n const minuteName = (minutes == 1) ? 'minute' : 'minutes';\n const hours = Math.round(minutes / 60);\n const hourName = (hours == 1) ? 'hour' : 'hours';\n const days = Math.round(hours / 24);\n const isToday = today.toDateString() === date.toDateString();\n const isYesterday = yesterday.toDateString() === date.toDateString();\n const isThisYear = today.getFullYear() === date.getFullYear();\n\n\n if (seconds < 5) {\n return 'now';\n } else if (seconds < 60) {\n return `${ seconds } seconds ago`;\n } else if (seconds < 90) {\n return '1 minute ago';\n } else if (minutes < 60) {\n return `${ minutes } ${ minuteName } ago`;\n }\n else if (hours < 24) {\n return `${ hours } ${ hourName } ago`;\n }\n // else if (isYesterday) {\n // return getFormattedDate(date, 'yesterday'); // Yesterday at 10:20\n // }\n\n else if (days < 2) {\n return `${ days } day ago`;\n }\n else if (isThisYear) {\n return getFormattedDate(date, false, true); // 10. January at 10:20\n }\n\n return getFormattedDate(date); // 10. January 2017. at 10:20\n}\n","export default class BookmarkForm {\n\n attach() {\n this.$uri = $('#resource_link_attributes_uri');\n this.$list_ids = $('#list_ids');\n this.$showHideNotes = $('#show-hide-notes');\n this.oldUri = this.$uri.val();\n\n // Do nothing if there's no feeback form\n if (this.$uri.length < 1) { return }\n\n this.URI_REGEX = /(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n this.bindHandlers();\n\n // Infer for old extensions pre-filling the form\n if (this.$uri.val()) {\n this.inferTitleAndTags(this.$uri.val());\n $('#haveit').hasClass('new') && this.checkHaveIt(this.$uri.val());\n }\n }\n\n bindHandlers() {\n this.$uri.on('keyup change', this.onChange.bind(this));\n this.$list_ids.on('updated', this.handleListUpdate.bind(this));\n\n $('.bookmark-notes-label').on('click', function(e) {\n $('.form-notes-group textarea').toggleClass('hidden');\n $('#show-hide-notes').toggleClass('hidden');\n });\n\n $('.bookmark-visibility-label').click(function(e) {\n const $bookmarkVisibility = $('#bookmark-visibility');\n const $visibilitySelect = $('#bookmark-visibility select');\n const $bookmarkLabelVisibility = $('#bookmark-label-visibility');\n const $showHideVisibility = $('#show-hide-visibility');\n\n e.preventDefault();\n $bookmarkVisibility.toggleClass('hidden');\n $visibilitySelect.focus();\n $bookmarkLabelVisibility.toggleClass('hidden');\n $('.form-visibility-group').toggleClass('shown');\n $showHideVisibility.toggleClass('hidden');\n });\n\n $('.bookmark-tags-label').click(function(e) {\n const $bookmarkTags = $('#resource-tags');\n const $bookmarkLabelTags = $('#bookmark-label-tags');\n const $showHideTags = $('#show-hide-tags');\n\n e.preventDefault();\n $bookmarkTags.toggleClass('hidden');\n $bookmarkTags.focus();\n $bookmarkLabelTags.toggleClass('hidden');\n $('.form-tag-group').toggleClass('shown');\n $showHideTags.toggleClass('hidden');\n window.tags.ref.select.focus();\n });\n\n $('.bookmark-orgs-label').click(function(e) {\n const $bookmarkOrgs = $('#aliases-orgs');\n const $bookmarkLabelOrgs = $('#bookmark-label-orgs');\n const $showHideOrgs = $('#show-hide-orgs');\n\n e.preventDefault();\n $bookmarkOrgs.toggleClass('hidden');\n $bookmarkOrgs.focus();\n $bookmarkLabelOrgs.toggleClass('hidden');\n $showHideOrgs.toggleClass('hidden');\n });\n\n $('.bookmark-title-label').click(function(e) {\n const $bookmarkTitle = $('#resource_title');\n const $bookmarkLabelTitle = $('#bookmark-label-title');\n const $showHideTitle = $('#show-hide-title');\n\n e.preventDefault();\n $bookmarkTitle.toggleClass('hidden');\n $bookmarkTitle.focus();\n $bookmarkLabelTitle.toggleClass('hidden');\n $('.form-title-group').toggleClass('shown');\n $showHideTitle.toggleClass('hidden');\n });\n\n let checkForInput = this.checkForInput\n\n // The lines below are executed on page load\n $('.form-address-group input').each(function() {\n checkForInput(this);\n });\n\n // The lines below (inside) are executed on change & keyup\n $('.form-address-group input').on('change keyup touchend', function() {\n checkForInput(this);\n });\n\n $('#resource_visibility').change(function() {\n const selectedElement = $('#resource_visibility option:selected');\n const visibilityChoice = selectedElement.text().toLowerCase();\n const visibilityDescs = $('#visibility-desc');\n\n visibilityDescs.children().each(function() {\n if ($(this).attr('id') === visibilityChoice) {\n $(this).removeClass('hidden');\n } else {\n $(this).addClass('hidden');\n }\n });\n });\n }\n\n checkForInput(element) {\n if ($(element).val().length > 0) {\n $('.form-title-group').addClass('active');\n $('.form-tag-group').addClass('active');\n $('.form-list-group').addClass('active');\n $('.form-visibility-group').addClass('active');\n $('.form-notes-group').addClass('active');\n }\n }\n\n handleListUpdate(_event, data) {\n const lists = data.value;\n const $visibility = $('#resource_visibility');\n\n if (lists.find((l) => !l.hidden) && $visibility.val() == 'hidden') {\n $visibility.val('visible');\n $visibility.trigger('change');\n $('#bookmark-label-visibility').text('visible');\n }\n }\n\n onChange(e) {\n const $target = e.currentTarget;\n const url = $target.value;\n\n $('#haveit').addClass('hidden');\n\n if (this.URI_REGEX.test(url)) {\n if (url == this.oldUri) {\n return;\n }\n\n this.inferTitleAndTags(url);\n\n if (e.type == 'change') {\n return;\n }\n\n this.checkHaveIt(url);\n }\n }\n\n uriChanged(url, oldUrl) {\n return oldUrl == '' || url.match(this.URI_REGEX) != null &&\n oldUrl.match(this.URI_REGEX) != null &&\n url.match(this.URI_REGEX)[0] != oldUrl.match(this.URI_REGEX)[0]\n }\n\n inferTitleAndTags(url) {\n const $title = $('#resource_title');\n const $titleLabel = $('#bookmark-label-title');\n const $notes = $('#resource_notes');\n const $tagNames = $('#tag_names');\n const $tagsLabel = $('#bookmark-label-tags');\n const forceUpdate = this.uriChanged(url, this.oldUri);\n const oldUri = this.oldUri;\n\n $.post('/bookmarks/infer_metadata', { url: url }, function(metadata) {\n if (metadata.title && ($title.val() == '' || $title.val() == url || forceUpdate)) {\n $title.val(metadata.title);\n $titleLabel.text(metadata.title);\n }\n\n if (metadata.notes && $notes.val() == '') {\n $notes.val(metadata.notes);\n }\n\n // If someone has already some tags do not try to load more\n // tags every time.\n if (window.tags.state.value.length > 0 && forceUpdate == false)\n return;\n\n // In case tags are empty but the bookmark is in edit mode\n // and the uri has not changed then do not try to fetch tags.\n if (oldUri != undefined && forceUpdate == false)\n return;\n\n if (metadata.tags) {\n metadata.tags.sort().map(function(t) {\n window.tags.addTag([{ label: t, value: t }]);\n });\n }\n\n if ($tagsLabel.text().trim() == '' && metadata.tags) {\n $tagsLabel.text(metadata.tags.sort().join(', '));\n }\n });\n }\n\n checkHaveIt(url) {\n const $haveIt = $('#haveit');\n\n const urlParams = new URLSearchParams(window.location.search);\n\n const listId = urlParams.get('list_id');\n\n $.post('/bookmarks/haveit', { url: url, organization_id: Tefter.organizationId }, function(response) {\n if (response.bookmark) {\n\n if (listId && response.bookmark.organization_id == Tefter.organizationId) {\n\n Turbo.visit(`/bookmarks/${response.bookmark.id}/edit?list_id=${listId}`, { action: 'replace' });\n return;\n }\n\n if (listId && response.bookmark.organizationId != Tefter.organizationId) {\n return;\n }\n\n $haveIt.removeClass('hidden');\n const $link = $haveIt.find('.edit-link');\n $link.prop('href', $link.prop('href').replace(':id', response.bookmark.id));\n }\n });\n }\n}\n","import { debounce } from './vendor/debounce.js'\n\nexport default class Endless {\n attach(options) {\n this.THRESHOLD = 300;\n this.debounce_time = 200;\n\n const path = options.path;\n\n this.paginationUrl = path + '/pagination';\n\n this.isPaginating = false;\n this.currentPage = 1;\n this.older = 0;\n this.$paginationElem = $('.pagination');\n this.totalPages = parseInt(this.$paginationElem.attr('data-pagination-pages'));\n\n this.$paginationElem.hide();\n this.bindHandlers();\n }\n\n bindHandlers() {\n $(window).off('scroll');\n $(window).on('scroll', debounce(function () {\n this.handleScroll();\n }.bind(this), this.debounce_time));\n }\n\n paginationEndpoint(pageNumber) {\n return `${this.paginationUrl}${this.historyEndpoint(pageNumber)}`;\n }\n\n historyEndpoint(pageNumber) {\n // For browser support see here https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams#Browser_compatibility\n let queryParams = `?page=${pageNumber}`;\n\n return queryParams;\n }\n\n $users() { return $('#resources'); }\n\n handleScroll() {\n const $window = $(window);\n const $document = $(document);\n\n if (!this.isPaginating && this.currentPage < this.totalPages && $window.scrollTop() >\n $document.height() - $window.height() - this.THRESHOLD) {\n this.isPaginating = true;\n this.currentPage++;\n\n this.$paginationElem.show();\n\n $.ajax({\n url: this.paginationEndpoint(this.currentPage)\n }).done(function (result) {\n var newIds = $.makeArray($(result).filter('.card').map(function(i, el) {\n return $(el).data('id')\n }));\n\n this.$users().append(result);\n this.isPaginating = false;\n }.bind(this));\n }\n\n if (this.currentPage >= this.totalPages) {\n this.$paginationElem.hide();\n }\n }\n}\n","import { debounce } from './vendor/debounce.js'\n\nexport default class Timeline {\n attach(options) {\n this.THRESHOLD = 300;\n this.debounce_time = 200;\n\n const userName = options.userName;\n this.context = options.userName;\n\n if (userName === '') {\n this.paginationUrl = 'pagination';\n } else {\n this.paginationUrl = userName + '/pagination';\n }\n\n this.isPaginating = false;\n this.currentPage = 1;\n this.older = 0;\n this.$paginationElem = $('.pagination');\n this.totalPages = parseInt(this.$paginationElem.attr('data-pagination-pages'));\n\n this.$paginationElem.hide();\n this.bindHandlers();\n }\n\n bindHandlers() {\n $(window).off('scroll');\n $(window).on('scroll', debounce(function () {\n this.handleScroll();\n }.bind(this), this.debounce_time));\n }\n\n $resources() { return $('#resources'); }\n\n paginationEndpoint(timestamp) {\n return `${this.paginationUrl}${this.historyEndpoint(timestamp)}`;\n }\n\n historyEndpoint(timestamp) {\n // For browser support see here https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams#Browser_compatibility\n const urlParams = new URLSearchParams(window.location.search);\n\n let queryParams;\n\n if (this.context == 'popular') {\n queryParams = `?page=${this.currentPage}`;\n }\n else {\n queryParams = `?older=${timestamp}`;\n }\n\n // Keep bots flag\n if (urlParams.get('bot') != null) {\n queryParams += `&bot=${urlParams.get('bot')}`;\n }\n\n // Keep domain_id\n if (urlParams.get('domain_id') != null) {\n queryParams += `&domain_id=${urlParams.get('domain_id')}`;\n }\n\n // Keep d\n if (urlParams.get('d') != null) {\n queryParams += `&d=${urlParams.get('d')}`;\n }\n\n // Keep tags\n if (urlParams.get('tags') != null) {\n queryParams += `&tags=${urlParams.get('tags')}`;\n }\n\n // Keep query\n if (urlParams.get('q') != null) {\n queryParams += `&q=${urlParams.get('q')}`;\n }\n\n // Keep user filtering\n if (urlParams.get('u') != null) {\n queryParams += `&u=${urlParams.get('u')}`;\n }\n\n // Keep view_mode\n if (urlParams.get('view_mode') != null) {\n queryParams += `&view_mode=${urlParams.get('view_mode')}`;\n }\n\n // Keep order_mode\n if (urlParams.get('sort') != null) {\n queryParams += `&sort=${urlParams.get('sort')}`;\n }\n\n return queryParams;\n }\n\n oldestTimestamp() {\n let element = this.$resources().find('.card:last .created-at');\n\n if (element.length == 0) {\n element = this.$resources().find('.condensed-card:last .created-at');\n }\n\n return Math.floor(\n Date.parse(\n JSON.parse(\n element.attr('date'))) / 1000);\n }\n\n handleScroll() {\n const $window = $(window);\n const $document = $(document);\n\n if (!this.isPaginating && this.currentPage < this.totalPages && $window.scrollTop() >\n $document.height() - $window.height() - this.THRESHOLD) {\n this.isPaginating = true;\n this.currentPage++;\n\n var oldest = this.oldestTimestamp();\n\n this.$paginationElem.show();\n\n $.ajax({\n url: this.paginationEndpoint(oldest)\n }).done(function (result) {\n var newIds = $.makeArray($(result).filter('.card').map(function(i, el) {\n return $(el).data('id')\n }));\n\n let url = this.historyEndpoint(oldest);\n history.pushState({turbo: true, url: url}, null, url);\n\n this.$resources().append(result);\n\n this.isPaginating = false;\n }.bind(this));\n }\n\n if (this.currentPage >= this.totalPages) {\n this.$paginationElem.hide();\n }\n }\n}\n","export default class Onboarding {\n attach() {\n if (this.inProgress()) {\n this.timer = window.setInterval(this.refresh.bind(this), this.refreshInterval())\n }\n }\n\n inProgress() {\n return $('.onboarding-list').data('inProgress')\n }\n\n refresh() {\n if (!this.inProgress()) {\n window.clearInterval(this.timer);\n\n return;\n }\n\n $.getJSON('/onboarding.json', this.handleStatuses.bind(this));\n }\n\n handleStatuses(progress) {\n const statuses = progress.progress;\n\n // TODO: DRY\n if (statuses.first_follow) {\n this.complete('.first-follow');\n } else {\n this.setOngoing('.first-follow');\n }\n\n if (statuses.extension_installed) {\n this.complete('.extension-installed');\n } else {\n this.setOngoing('.extension-installed');\n }\n\n if (statuses.completed_import) {\n this.complete('.completed-import');\n } else {\n this.setOngoing('.completed-import');\n }\n\n if (statuses.has_avatar) {\n this.complete('.has-avatar');\n } else {\n this.setOngoing('.has-avatar');\n }\n\n if (statuses.first_bookmark) {\n this.complete('.first-bookmark');\n } else {\n this.setOngoing('.first-bookmark');\n }\n\n if (statuses.review_privacy) {\n this.complete('.privacy-review');\n } else {\n this.setOngoing('.privacy-review');\n }\n }\n\n complete(classname) {\n $(classname).find('.status').removeClass('hidden');\n $(classname).find('.action-button').addClass('hidden');\n $(classname).addClass('done');\n }\n\n setOngoing(classname) {\n $(classname).find('.status').addClass('hidden');\n $(classname).find('.action-button').removeClass('hidden');\n }\n\n refreshInterval() { return 5000; }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = ['input', 'message', 'button'];\n\n reset() {\n let $modal = $(\"#modal-quick-bookmark\");\n\n let title = 'Add bookmark';\n\n if (window.Tefter.orgName) {\n title = `${title} to ${window.Tefter.orgName}`;\n }\n\n $(\"#modal-quick-bookmark-title\").text(title);\n\n $modal.find('input[type=text]').show().val('');\n $modal.find('input[type=text]').val('');\n\n setTimeout(function() { $modal.find('input[type=text]').focus(); }, 100);\n\n $modal.find('.message').text('');\n $modal.find('.create').show().val('Save')\n }\n\n handleResponse(event) {\n let [data, status, xhr] = event.detail;\n let message = '';\n\n if (data.status === 422) {\n if (data.responseText.match('Your plan supports')) {\n message = JSON.parse(data.responseText).errors.title;\n }\n else {\n message = `Address is invalid. Please provide a well\nformatted address like https://www.example.com`\n }\n\n this.messageTarget.innerHTML = message;\n }\n\n if (data.status === 200) {\n let response = JSON.parse(data.response);\n\n if (response.resource.existing == true) {\n $(this.buttonTarget).hide();\n\n let url = '/bookmarks/' + response.resource.id + '/edit';\n\n if (window.Tefter.organizationSlug && window.Tefter.organizationSlug.length > 0) {\n url = `/orgs/${window.Tefter.organizationSlug}${url}`;\n }\n\n message = `Bookmark already exists. Click here to edit.`;\n\n this.messageTarget.innerHTML = message;\n }\n }\n\n if (data.status === 201) {\n let response = JSON.parse(data.response);\n let ctrl = this;\n\n this.fetchMetadata(this.inputTarget.value).then(function(metadata) {\n let modalId = ctrl.element.id.replace('-content', '');\n\n $(ctrl.inputTarget).hide();\n $(ctrl.buttonTarget).hide();\n $(\"#modal-quick-bookmark-title\").text('Bookmark added!');\n\n let url = '/bookmarks/' + response.resource.id + '/edit';\n let refreshUrl = '/bookmarks';\n\n if (window.Tefter.organizationSlug && window.Tefter.organizationSlug.length > 0) {\n url = `/orgs/${window.Tefter.organizationSlug}${url}`;\n refreshUrl = `/orgs/${window.Tefter.organizationSlug}${refreshUrl}`;\n }\n\n if (metadata.title) {\n message = `\n “${metadata.title}”\n
\n Edit\n `;\n } else {\n message = `Edit`;\n }\n\n window.setTimeout(window.Tefter.MicroModal.close, 2 * 1000, modalId);\n window.setTimeout(Turbo.visit, 1000, refreshUrl, { action: 'replace' });\n\n ctrl.messageTarget.innerHTML = message;\n });\n }\n\n this.buttonTarget.value = 'Save';\n }\n\n fetchMetadata(url) {\n return $.post('/bookmarks/infer_metadata', { url: url, timeout: 1000 });\n }\n\n submit(event) {\n this.buttonTarget.value = 'Saving..';\n }\n}\n","export default class Subcscriptions {\n attach() {\n if (typeof Stripe == 'undefined') {\n return\n }\n\n // Create a Stripe client.\n var stripe = Stripe(window.tefter_stripe_public_key);\n\n // Custom styling can be passed to options when creating an Element.\n // (Note that this demo uses a wider set of styles than the guide below.)\n var style = {\n base: {\n color: '#32325d',\n fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\n fontSmoothing: 'antialiased',\n fontSize: '16px',\n '::placeholder': {\n color: '#aab7c4'\n }\n },\n invalid: {\n color: '#fa755a',\n iconColor: '#fa755a'\n }\n };\n\n // Create a token when the form is submitted.\n var form = document.getElementById('subscription-form');\n form.addEventListener('submit', function(e) {\n e.preventDefault();\n\n stripe.redirectToCheckout({\n // Make the id field from the Checkout Session creation API response\n // available to this file, so you can provide it as argument here\n // instead of the {{CHECKOUT_SESSION_ID}} placeholder.\n sessionId: window.checkout_session_id\n });\n });\n }\n}\n","export default class TrialNotice {\n attach() {\n this.$el = $('.trial-notice');\n this.bindHandlers();\n }\n\n bindHandlers() {\n this.$el.find('.subscription.btn').on('click', this.clickSubscription.bind(this));\n }\n\n clickSubscription(e) {\n e.preventDefault();\n this.$el.find('.pricing-plans-section').show();\n }\n}\n","import tippy from 'tippy.js';\n\nfunction loadAvatarContent() {\n const $headerAvatar = document.querySelector('#header-avatar');\n\n if ($headerAvatar == undefined) {\n return;\n }\n\n let headerAvatar = tippy($headerAvatar,\n { interactive: true,\n trigger: 'click',\n theme: 'light',\n offset: '0, 20',\n arrow: true });\n\n if (typeof headerAvatar === 'undefined') {\n return;\n }\n\n headerAvatar.setContent(window.Tefter.headerAvatarContent);\n}\n\nfunction loadSidebarContent() {\n const $sidebarAvatar = document.querySelector('#sidebar-avatar');\n\n if ($sidebarAvatar == undefined) {\n return;\n }\n\n let sidebarAvatar = tippy($sidebarAvatar,\n { interactive: true,\n trigger: 'click',\n theme: 'light',\n offset: '0, 20',\n arrow: true });\n\n if (sidebarAvatar == undefined) {\n return;\n }\n\n sidebarAvatar.setContent(window.Tefter.headerAvatarContent);\n}\n\nfunction loadHelpMenuContent() {\n const $helpMenu = document.querySelector('#help-menu');\n const $sidebarHelpMenu = document.querySelector('#sidebar-help-menu');\n\n if ($helpMenu == undefined) {\n return;\n }\n\n var helpMenu = tippy($helpMenu, { interactive: true,\n trigger: 'click',\n theme: 'light',\n offset: '0, 20',\n arrow: true })\n\n var sidebarHelpMenu = tippy($sidebarHelpMenu,\n { interactive: true,\n trigger: 'click',\n theme: 'light',\n offset: '0, 20',\n arrow: true })\n\n if (helpMenu == undefined) {\n return;\n }\n\n const content = ``\n\n helpMenu.setContent(content);\n sidebarHelpMenu.setContent(content);\n}\n\nfunction resizeAllGridItems(){\n let grid = document.getElementsByClassName(\"grid\")[0];\n if ( grid == undefined || grid.getAttribute('data-grid-fixed') == true)\n return;\n\n let rowHeight = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-auto-rows'));\n let rowGap = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-row-gap'));\n\n let allItems = document.getElementsByClassName(\"card\");\n for(let x = 0; x < allItems.length; x++){\n $(allItems[x]).animate({ opacity: 1 }, 100);\n resizeGridItem(allItems[x], rowHeight, rowGap);\n }\n}\n\nfunction resizeGridItem(item, rowHeight, rowGap){\n let rowSpan = Math.ceil((item.querySelector('.card-content').getBoundingClientRect().height+rowGap)/(rowHeight+rowGap));\n\n item.style.gridRowEnd = \"span \" + rowSpan;\n}\n\nexport function startCoreBehavior() {\n document.addEventListener('turbo:load', function() {\n // First of all, start with Tefter initialization. Basically with this step we\n // load some backend value that are not accessible through JavaScript space\n // directly.\n window.Tefter.initTefter();\n\n $.ajaxSetup({\n headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') }\n });\n\n loadAvatarContent();\n\n loadSidebarContent();\n\n loadHelpMenuContent();\n\n resizeAllGridItems();\n });\n\n window.addEventListener('beforeinstallprompt', (event) => {\n window.TefterBeforeInstallPromptEvent = event;\n });\n\n // Clear Turbolinks cache before ajax requests\n document.addEventListener('ajax:before [data-remote]', () => {\n Turbo.clearCache();\n });\n}\n","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","function _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof2(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActionCable = {});\n})(this, function (exports) {\n \"use strict\";\n\n var adapters = {\n logger: self.console,\n WebSocket: self.WebSocket\n };\n var logger = {\n log: function log() {\n if (this.enabled) {\n var _adapters$logger;\n\n for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n\n messages.push(Date.now());\n\n (_adapters$logger = adapters.logger).log.apply(_adapters$logger, [\"[ActionCable]\"].concat(messages));\n }\n }\n };\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var now = function now() {\n return new Date().getTime();\n };\n\n var secondsSince = function secondsSince(time) {\n return (now() - time) / 1e3;\n };\n\n var clamp = function clamp(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n\n var ConnectionMonitor = function () {\n function ConnectionMonitor(connection) {\n classCallCheck(this, ConnectionMonitor);\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n\n ConnectionMonitor.prototype.start = function start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor started. pollInterval = \" + this.getPollInterval() + \" ms\");\n }\n };\n\n ConnectionMonitor.prototype.stop = function stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n };\n\n ConnectionMonitor.prototype.isRunning = function isRunning() {\n return this.startedAt && !this.stoppedAt;\n };\n\n ConnectionMonitor.prototype.recordPing = function recordPing() {\n this.pingedAt = now();\n };\n\n ConnectionMonitor.prototype.recordConnect = function recordConnect() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n };\n\n ConnectionMonitor.prototype.recordDisconnect = function recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n };\n\n ConnectionMonitor.prototype.startPolling = function startPolling() {\n this.stopPolling();\n this.poll();\n };\n\n ConnectionMonitor.prototype.stopPolling = function stopPolling() {\n clearTimeout(this.pollTimeout);\n };\n\n ConnectionMonitor.prototype.poll = function poll() {\n var _this = this;\n\n this.pollTimeout = setTimeout(function () {\n _this.reconnectIfStale();\n\n _this.poll();\n }, this.getPollInterval());\n };\n\n ConnectionMonitor.prototype.getPollInterval = function getPollInterval() {\n var _constructor$pollInte = this.constructor.pollInterval,\n min = _constructor$pollInte.min,\n max = _constructor$pollInte.max,\n multiplier = _constructor$pollInte.multiplier;\n var interval = multiplier * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1e3);\n };\n\n ConnectionMonitor.prototype.reconnectIfStale = function reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + this.getPollInterval() + \" ms, time disconnected = \" + secondsSince(this.disconnectedAt) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n\n if (this.disconnectedRecently()) {\n logger.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n };\n\n ConnectionMonitor.prototype.connectionIsStale = function connectionIsStale() {\n return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.disconnectedRecently = function disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.visibilityDidChange = function visibilityDidChange() {\n var _this2 = this;\n\n if (document.visibilityState === \"visible\") {\n setTimeout(function () {\n if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {\n logger.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = \" + document.visibilityState);\n\n _this2.connection.reopen();\n }\n }, 200);\n }\n };\n\n return ConnectionMonitor;\n }();\n\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30,\n multiplier: 5\n };\n ConnectionMonitor.staleThreshold = 6;\n var INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\"\n },\n default_mount_path: \"/cable\",\n protocols: [\"actioncable-v1-json\", \"actioncable-unsupported\"]\n };\n var message_types = INTERNAL.message_types,\n protocols = INTERNAL.protocols;\n var supportedProtocols = protocols.slice(0, protocols.length - 1);\n var indexOf = [].indexOf;\n\n var Connection = function () {\n function Connection(consumer) {\n classCallCheck(this, Connection);\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n\n Connection.prototype.send = function send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n\n Connection.prototype.open = function open() {\n if (this.isActive()) {\n logger.log(\"Attempted to open WebSocket, but existing socket is \" + this.getState());\n return false;\n } else {\n logger.log(\"Opening WebSocket, current state is \" + this.getState() + \", subprotocols: \" + protocols);\n\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n\n Connection.prototype.close = function close() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n allowReconnect: true\n },\n allowReconnect = _ref.allowReconnect;\n\n if (!allowReconnect) {\n this.monitor.stop();\n }\n\n if (this.isActive()) {\n return this.webSocket.close();\n }\n };\n\n Connection.prototype.reopen = function reopen() {\n logger.log(\"Reopening WebSocket, current state is \" + this.getState());\n\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n\n Connection.prototype.getProtocol = function getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n };\n\n Connection.prototype.isOpen = function isOpen() {\n return this.isState(\"open\");\n };\n\n Connection.prototype.isActive = function isActive() {\n return this.isState(\"open\", \"connecting\");\n };\n\n Connection.prototype.isProtocolSupported = function isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n };\n\n Connection.prototype.isState = function isState() {\n for (var _len = arguments.length, states = Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return indexOf.call(states, this.getState()) >= 0;\n };\n\n Connection.prototype.getState = function getState() {\n if (this.webSocket) {\n for (var state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n\n return null;\n };\n\n Connection.prototype.installEventHandlers = function installEventHandlers() {\n for (var eventName in this.events) {\n var handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n\n Connection.prototype.uninstallEventHandlers = function uninstallEventHandlers() {\n for (var eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function () {};\n }\n };\n\n return Connection;\n }();\n\n Connection.reopenDelay = 500;\n Connection.prototype.events = {\n message: function message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n\n var _JSON$parse = JSON.parse(event.data),\n identifier = _JSON$parse.identifier,\n message = _JSON$parse.message,\n reason = _JSON$parse.reason,\n reconnect = _JSON$parse.reconnect,\n type = _JSON$parse.type;\n\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(\"Disconnecting. Reason: \" + reason);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return this.monitor.recordPing();\n\n case message_types.confirmation:\n return this.subscriptions.notify(identifier, \"connected\");\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function open() {\n logger.log(\"WebSocket onopen event, using '\" + this.getProtocol() + \"' subprotocol\");\n this.disconnected = false;\n\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function close(event) {\n logger.log(\"WebSocket onclose event\");\n\n if (this.disconnected) {\n return;\n }\n\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function error() {\n logger.log(\"WebSocket onerror event\");\n }\n };\n\n var extend = function extend(object, properties) {\n if (properties != null) {\n for (var key in properties) {\n var value = properties[key];\n object[key] = value;\n }\n }\n\n return object;\n };\n\n var Subscription = function () {\n function Subscription(consumer) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var mixin = arguments[2];\n classCallCheck(this, Subscription);\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n\n Subscription.prototype.perform = function perform(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n data.action = action;\n return this.send(data);\n };\n\n Subscription.prototype.send = function send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n\n Subscription.prototype.unsubscribe = function unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n };\n\n return Subscription;\n }();\n\n var Subscriptions = function () {\n function Subscriptions(consumer) {\n classCallCheck(this, Subscriptions);\n this.consumer = consumer;\n this.subscriptions = [];\n }\n\n Subscriptions.prototype.create = function create(channelName, mixin) {\n var channel = channelName;\n var params = (typeof channel === \"undefined\" ? \"undefined\" : _typeof(channel)) === \"object\" ? channel : {\n channel: channel\n };\n var subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n\n Subscriptions.prototype.add = function add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.sendCommand(subscription, \"subscribe\");\n return subscription;\n };\n\n Subscriptions.prototype.remove = function remove(subscription) {\n this.forget(subscription);\n\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n\n return subscription;\n };\n\n Subscriptions.prototype.reject = function reject(identifier) {\n var _this = this;\n\n return this.findAll(identifier).map(function (subscription) {\n _this.forget(subscription);\n\n _this.notify(subscription, \"rejected\");\n\n return subscription;\n });\n };\n\n Subscriptions.prototype.forget = function forget(subscription) {\n this.subscriptions = this.subscriptions.filter(function (s) {\n return s !== subscription;\n });\n return subscription;\n };\n\n Subscriptions.prototype.findAll = function findAll(identifier) {\n return this.subscriptions.filter(function (s) {\n return s.identifier === identifier;\n });\n };\n\n Subscriptions.prototype.reload = function reload() {\n var _this2 = this;\n\n return this.subscriptions.map(function (subscription) {\n return _this2.sendCommand(subscription, \"subscribe\");\n });\n };\n\n Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {\n var _this3 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return this.subscriptions.map(function (subscription) {\n return _this3.notify.apply(_this3, [subscription, callbackName].concat(args));\n });\n };\n\n Subscriptions.prototype.notify = function notify(subscription, callbackName) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n var subscriptions = void 0;\n\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [subscription];\n }\n\n return subscriptions.map(function (subscription) {\n return typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : undefined;\n });\n };\n\n Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {\n var identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n\n return Subscriptions;\n }();\n\n var Consumer = function () {\n function Consumer(url) {\n classCallCheck(this, Consumer);\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n }\n\n Consumer.prototype.send = function send(data) {\n return this.connection.send(data);\n };\n\n Consumer.prototype.connect = function connect() {\n return this.connection.open();\n };\n\n Consumer.prototype.disconnect = function disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n\n Consumer.prototype.ensureActiveConnection = function ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n\n createClass(Consumer, [{\n key: \"url\",\n get: function get$$1() {\n return createWebSocketURL(this._url);\n }\n }]);\n return Consumer;\n }();\n\n function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n\n if (url && !/^wss?:/i.test(url)) {\n var a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n }\n\n function createConsumer() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig(\"url\") || INTERNAL.default_mount_path;\n return new Consumer(url);\n }\n\n function getConfig(name) {\n var element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n exports.Connection = Connection;\n exports.ConnectionMonitor = ConnectionMonitor;\n exports.Consumer = Consumer;\n exports.INTERNAL = INTERNAL;\n exports.Subscription = Subscription;\n exports.Subscriptions = Subscriptions;\n exports.adapters = adapters;\n exports.createWebSocketURL = createWebSocketURL;\n exports.logger = logger;\n exports.createConsumer = createConsumer;\n exports.getConfig = getConfig;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","var map = {\n\t\"./admin_panel_controller.js\": 119,\n\t\"./bookmark_controller.js\": 120,\n\t\"./bookmark_filters_controller.js\": 121,\n\t\"./bookmark_form_controller.js\": 122,\n\t\"./card_controller.js\": 123,\n\t\"./endless_pagination_controller.js\": 124,\n\t\"./faq_controller.js\": 125,\n\t\"./feed_pagination_controller.js\": 126,\n\t\"./filter_controller.js\": 127,\n\t\"./golink_controller.js\": 128,\n\t\"./golink_form_controller.js\": 129,\n\t\"./help_controller.js\": 130,\n\t\"./invitations_controller.js\": 131,\n\t\"./list_controller.js\": 132,\n\t\"./list_form_controller.js\": 133,\n\t\"./list_toggler_controller.js\": 134,\n\t\"./listing_controller.js\": 135,\n\t\"./modal_controller.js\": 136,\n\t\"./new_feed_controller.js\": 137,\n\t\"./onboarding_controller.js\": 138,\n\t\"./password_visibility_controller.js\": 139,\n\t\"./pricing_plans_controller.js\": 140,\n\t\"./privacy_checker_controller.js\": 141,\n\t\"./quick_bookmark_controller.js\": 101,\n\t\"./sidebar_controller.js\": 142,\n\t\"./subscriptions_controller.js\": 143,\n\t\"./tooltip_controller.js\": 144,\n\t\"./trial_notice_controller.js\": 145,\n\t\"./user_background_controller.js\": 146,\n\t\"./user_card_controller.js\": 147,\n\t\"./user_controller.js\": 148,\n\t\"./view_controls_controller.js\": 149\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 118;","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = ['scan']\n\n onScanSuccess(event) {\n let [data, status, xhr] = event.detail;\n }\n\n connect() {\n this.scanProcess = false;\n }\n\n\n scanClick(event) {\n this.scanTarget.addEventListener('ajax:success', this.handleSuccess.bind(this))\n this.scanTarget.addEventListener('ajax:error', this.handleError.bind(this))\n\n if (!this.scanProcess) {\n }\n }\n\n handleSuccess(event) {\n }\n\n handleError(event) {\n }\n}\n","import { Controller } from \"stimulus\";\nimport { timeAgo } from '../packs/timeAgo.js';\nimport tippy from 'tippy.js';\nimport { showModal } from '../packs/utils.js';\nimport { hideAllBookmarksTippy, destroyAllBookmarksTippy,\n prepareModal, deleteBookmarkCard, ajaxPost,\n ajaxDelete, ajaxGet, defaultTippyOptions,\n checkAuthentication, tippyWithDynamicContent,\n webShare, closeModal } from '../packs/utils.js';\n\nexport default class extends Controller {\n static targets = ['date', 'notes', 'likeButton', 'share'];\n\n connect() {\n if (this.hasDateTarget == true ) {\n const bookmarkDate = JSON.parse(this.dateTarget.getAttribute('date'));\n const path = JSON.parse(this.dateTarget.getAttribute('path'));\n\n const content = `${timeAgo(bookmarkDate)}`;\n this.dateTarget.innerHTML = content;\n }\n\n if (this.hasShareTarget == true) {\n if (!navigator.share) {\n this.shareTarget.parentElement.style.display = 'none';\n }\n }\n\n // Check for likeButton existence\n if (this.hasLikeButtonTarget == true) {\n if (!window.Tefter.cdn) {\n window.Tefter.initTefter();\n }\n\n const id = parseInt(this.element.dataset.id);\n const alreadyLiked = window.Tefter.likedBookmarkIds.includes(id);\n\n if (alreadyLiked) {\n const $element = $(this.likeButtonTarget);\n\n $element.removeClass('like');\n $element.addClass('unlike');\n $element.attr('title', 'Unlike this bookmark');\n }\n }\n\n if (this.hasNotesTarget == true) {\n const $element = this.notesTarget;\n\n if (typeof($element) == undefined ||\n $element.parentElement.querySelector('.tooltip-content') == null) {\n return;\n }\n\n const t = tippy($element,\n {\n ...defaultTippyOptions(),\n trigger: 'mouseenter',\n delay: $element.dataset['delay'] || 0,\n placement: $element.dataset['placement'] || 'bottom',\n content: $element.parentElement.querySelector('.tooltip-content').innerHTML\n });\n if ($element.dataset['show']) {\n t.show();\n }\n }\n }\n\n share(event) {\n webShare(event);\n }\n\n copy(event) {\n const element = $(event.srcElement);\n const id = element.data('id');\n const parent = element.parent();\n const response = event.detail[0];\n\n if (response.status == 'unprocessable_entity') {\n this.tippy = $(event.srcElement)._tippy || tippy($(event.srcElement), {\n ...defaultTippyOptions(),\n distance: 25,\n placement: 'bottom-left'\n });\n\n let content = `Probably you have reached the maximum number of bookmarks that your plan\nsupports. Please upgrade your account or contact as at support@tefter.`\n\n this.tippy.setContent(content);\n this.tippy.show();\n }\n else {\n element\n .attr('href', event.detail[0].resource_path)\n .attr('target', '_blank')\n .css('font-size', '100%')\n .removeClass('icon-plus-circle')\n .addClass('bookmark-action')\n .removeAttr('data-remote')\n .removeAttr('data-method')\n .html('added');\n\n let id = event.srcElement.getAttribute('data-id');\n const $element = $(\"li[data-id='\" + id + \"']\")[0];\n\n destroyAllBookmarksTippy();\n }\n }\n\n beforeSend(event) {\n checkAuthentication(event);\n }\n\n delete(event) {\n deleteBookmarkCard(event.srcElement);\n }\n\n /* Visually toggles favorite element from bookmarks actions. If the user is in\n * her favorites page, then the bookmark card is deleted also.\n */\n favorite(event) {\n const element = event.srcElement;\n\n element.classList.toggle('icon-heart-fill')\n element.classList.toggle('icon-heart')\n\n if (window.location.href.includes('lists/favorites')) {\n deleteBookmarkCard(event.srcElement);\n }\n }\n\n showReadingActions(event) {\n const {bookmarkId, listId, organizationId } = event.srcElement.dataset;\n const params = { list_id: listId };\n const path = `/bookmarks/${bookmarkId}/reading_actions?organization_id=${organizationId}`;\n\n tippyWithDynamicContent(event, path, params, {\n ...defaultTippyOptions(),\n trigger: 'mouseenter click',\n offset: '-20, 0',\n distance: 3,\n touch: true,\n delay: [20, 100],\n duration: [10, 10],\n placement: 'left-start',\n hideOnClick: true,\n }, { hideAllTippys: false, ignoreEventType: \"click\" });\n\n }\n\n like(event) {\n checkAuthentication(event);\n\n const element = $(event.srcElement);\n const like = element.hasClass('like');\n const linkId = element.parent().attr('id').split('-')[1];\n const likeUrl = '/likes';\n const likeCountElement = element.parent().find('.likes-count');\n const data = { link_id: linkId };\n\n if (like) {\n ajaxPost(likeUrl, data, function (result) {\n likeCountElement.text(function (_, c) {\n const likeCount = parseInt(c) || 0;\n return likeCount + 1;\n });\n })\n }\n else {\n ajaxDelete(likeUrl, data, function (result) {\n likeCountElement.text(function (_, c) {\n const likeCount = parseInt(c) || 0;\n return (likeCount - 1) || '';\n });\n });\n }\n\n element.toggleClass('like');\n element.toggleClass('unlike');\n }\n\n goto(event) {\n const element = $(event.srcElement);\n const path = element.data('gotoPath');\n\n if (element.data('integration') != null || !path) {\n return\n }\n\n element.attr('href', path);\n\n if (!element.is('a')) {\n window.open(path, '_blank');\n }\n }\n\n readableClick(event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (window.history.length <= 2 && window.Tefter.user_signed_in === false) {\n window.location = window.Tefter.signInPath;\n } else if (window.history.length <= 2 && window.Tefter.user_signed_in === true) {\n window.location = '/';\n } else {\n window.history.back();\n }\n }\n\n actionsMouseLeave(event) {\n let element = event.srcElement._tippy;\n\n if (element && element.state.isEnabled == true && element.state.isShown == false) {\n event.srcElement._tippy.destroy();\n }\n }\n\n showActions(event) {\n const { bookmarkId, organizationId, actionName, controllerName } =\n event.srcElement.dataset;\n const listId = window.Tefter.listSlug || null;\n const params = { list_id: listId };\n const path = '/bookmarks/' + bookmarkId + '/actions?list_id=' + listId +\n '&actionName=' + actionName +\n '&controllerName=' + controllerName + '&organization_id=' + organizationId;\n let ellipsisButton = event.srcElement;\n\n tippyWithDynamicContent(event, path, params,{\n ...defaultTippyOptions(),\n distance: 8,\n offset: '-26, 5',\n touch: true,\n delay: [20, 100],\n duration: [10, 10],\n placement: 'top',\n hideOnClick: true,\n onShow(instance) {\n instance.set({trigger: 'click'});\n\n ellipsisButton.style.opacity = 1;\n },\n\n onHide(instance) {\n if (document.querySelectorAll('.bookmark-reading-actions').length > 0) {\n return false;\n }\n\n instance.set({trigger: 'click'});\n\n ellipsisButton.style.opacity = '';\n }\n });\n }\n\n // @todo: Remove jQuery\n actionsMouseEnter(event) {\n const id = event.srcElement.getAttribute('data-id');\n let $element = $(\"a.js-burger-button[data-bookmark-id='\" + id + \"']\");\n\n if ($element.length > 0) {\n $element.css('opacity', 1);\n }\n }\n\n addToOrg(event) {\n prepareModal(event, 'bookmarks', 'org_modal', 'org-modal');\n }\n\n addToList(event) {\n prepareModal(event, 'bookmarks', 'list_modal', 'list-modal');\n }\n\n addToTag(event) {\n prepareModal(event, 'bookmarks', 'tag_modal', 'tag-modal');\n }\n\n showLikes(event) {\n prepareModal(event, 'bookmarks', 'likes', 'modal-like');\n }\n\n showUsers(event) {\n prepareModal(event, 'bookmarks', 'users', 'modal');\n }\n\n // @todo: Remove jQuery\n toggleReadState(event) {\n let $element = $(event.srcElement);\n let $parent = $(this.element);\n const selected = $element.hasClass('icon-circle');\n\n $parent.find('a').\n filter(a => $(a) != $element).\n removeClass('icon-circle').\n addClass('icon-circle-empty');\n\n if (selected) {\n $element.addClass('icon-circle-empty');\n $element.removeClass('icon-circle');\n } else {\n $element.removeClass('icon-circle-empty');\n $element.addClass('icon-circle');\n }\n\n if (window.location.href.includes('lists/finished') ||\n window.location.href.includes('lists/read_later')) {\n // Hide 2nd level tippy\n $parent.hide();\n\n deleteBookmarkCard(event.srcElement);\n }\n }\n\n followTag(event) {\n const tag = event.target.dataset.tag;\n let url = location.href;\n let domain = `https://${window.location.hostname}`;\n let visitedUrl = '';\n\n if (url.endsWith('#')) {\n url = url.slice(0, -1);\n }\n\n if (window.Tefter.environment != 'production') {\n domain = 'http://127.0.0.1:3000';\n }\n\n visitedUrl = `${domain}/filter?tag=${tag}&url=${url}`\n\n history.pushState({turbo: true, url: visitedUrl}, null, visitedUrl);\n }\n\n followDomain(event) {\n const d = event.target.dataset.d;\n let url = location.href;\n let domain = `https://${window.location.hostname}`;\n let visitedUrl = '';\n\n if (url.endsWith('#')) {\n url = url.slice(0, -1);\n }\n\n if (window.Tefter.environment != 'production') {\n domain = 'http://127.0.0.1:3000';\n }\n\n visitedUrl = `${domain}/filter?d=${d}&url=${url}`\n\n history.pushState({turbo: true, url: visitedUrl}, null, visitedUrl);\n }\n\n // Adds or removes a bookmark from an org.\n toggleBookmarkToOrg(event) {\n const bookmarkId = this.element.getAttribute('data-bookmark-id');\n const orgId = event.srcElement.getAttribute('id');\n const isChecked = event.srcElement.checked;\n const data = { organization_id: orgId, id: bookmarkId };\n let path = [`/bookmarks/${bookmarkId}/`];\n\n if (orgId != '' && orgId != null) {\n path.unshift(`/orgs/${orgId}`);\n }\n\n path.push( isChecked ? 'add_to_org' : 'remove_from_org' );\n\n ajaxPost(path.join(''), data);\n }\n\n // Adds or removes a bookmark from a list.\n toggleBookmarkToList(event) {\n const { bookmarkId, username: userName } = this.element.dataset;\n const listId = event.srcElement.getAttribute('id');\n const isChecked = event.srcElement.checked;\n const data = { list_id: listId, id: bookmarkId };\n let path = [`/bookmarks/${bookmarkId}/`];\n\n if (userName != '') {\n path.unshift(`/${userName}/lists/${listId}`);\n }\n\n path.push( isChecked ? 'add_to_list' : 'remove_from_list' );\n\n ajaxPost(path.join(''), data);\n }\n\n showReadable(event) {\n const bookmarkId = event.srcElement.getAttribute('data-bookmark-id');\n let path = `/bookmarks/${bookmarkId}/readable`;\n\n let $document = $('body');\n const modalId = `bookmark-readable-${bookmarkId}`;\n\n // Hide all other tippy elements.\n hideAllBookmarksTippy();\n\n // Clear Turbolinks cache\n Turbo.clearCache();\n\n $.ajax({\n url: path\n }).done(function (result) {\n $document.append(result);\n\n showModal(modalId);\n });\n }\n\n showSummary(event) {\n const bookmarkId = event.srcElement.getAttribute('data-bookmark-id');\n let path = `/bookmarks/${bookmarkId}/open_ai_summary`;\n\n let $document = $('body');\n const modalId = `bookmark-summary-${bookmarkId}`;\n\n // Hide all other tippy elements.\n hideAllBookmarksTippy();\n\n showModal('modal-loading');\n\n // Clear Turbolinks cache\n Turbo.clearCache();\n\n $.ajax({\n url: path\n }).done(function (result) {\n closeModal('modal-loading');\n\n $document.append(result);\n\n showModal(modalId);\n });\n\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = ['clear'];\n\n initialize() {\n let visibleTags = $('.search-tag-selected').length;\n\n if (!this.hasClearTarget) {\n return;\n }\n\n let $clearFilters = $(this.clearTarget);\n\n if (visibleTags > 3) {\n $clearFilters.removeClass('hidden');\n }\n else {\n $clearFilters.addClass('hidden');\n }\n }\n}\n","import { Controller } from \"stimulus\";\nimport BookmarkForm from '../packs/bookmark_form.js';\n\nexport default class extends Controller {\n connect() {\n (new BookmarkForm).attach();\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = ['number', 'cvc', 'month', 'year'];\n\n numberKeydown(event) {\n if (event.keyCode === 8) {\n\n if ((this.numberTarget.value.length - 1) % 5 == 0) {\n this.numberTarget.value = this.numberTarget.value.slice(0, -2);\n event.stopPropagation();\n event.preventDefault();\n return\n }\n }\n }\n\n numberKeypress(event) {\n if (isNaN(parseInt(event.key)) || this.numbersLength(this.numberTarget.value) > 15) {\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n\n if (((this.numbersLength(this.numberTarget.value)) % 4 === 0) &&\n (this.numbersLength(this.numberTarget.value) != 0)) {\n this.numberTarget.value += ' ';\n }\n }\n\n numbersLength(value) {\n let chars = value.split('');\n return chars.filter(number => number != ' ').length\n }\n\n numberChange(event) {\n let chars = this.numberTarget.value.split('');\n chars = chars.filter(number => !isNaN(parseInt(number)));\n let newValue = '';\n\n for (let i = 0; i < chars.length; i++) {\n if (i % 4 == 0 && i != 0) {\n newValue += ' ';\n }\n\n newValue += chars[i];\n }\n\n newValue = newValue.slice(0, 19);\n\n this.numberTarget.value = newValue;\n }\n\n cvcKeypress(event) {\n if (isNaN(parseInt(event.key)) || this.cvcTarget.value.length > 2) {\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n }\n\n monthKeypress(event) {\n if (isNaN(parseInt(event.key)) || this.monthTarget.value.length > 1) {\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n }\n\n yearKeypress(event) {\n if (isNaN(parseInt(event.key)) || this.yearTarget.value.length > 3) {\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n }\n}\n","import { Controller } from 'stimulus'\nimport Endless from '../packs/endless.js'\n\nexport default class extends Controller {\n connect() {\n (new Endless).attach( { path: this.data.get('username') });\n }\n\n disconnect() {\n $(window).off('scroll');\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"source\"];\n\n connect() {\n const anchorValue = window.location.hash;\n\n if (anchorValue === \"\") { return }\n\n // Grab $element based on anchorValue and the first parent with\n // a class 'collapsable-card' and make them 'active'\n const $element = $(anchorValue);\n $element.addClass('active');\n $element.parents('.collapsable-card').addClass('active');\n }\n\n toggle(event) {\n event.preventDefault();\n event.srcElement.parentElement.classList.toggle('active');\n }\n}\n","import { Controller } from 'stimulus'\nimport Timeline from '../packs/timeline.js'\n\nexport default class extends Controller {\n connect() {\n (new Timeline).attach( { userName: this.data.get('username') });\n }\n\n disconnect() {\n $(window).off('scroll');\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n toggle(event) {\n event.preventDefault();\n event.srcElement.classList.toggle('active');\n\n const $selectedTags = $('.search-tag-selected');\n const $bookmarkFilters = $('.bookmarks-filters');\n\n $bookmarkFilters.toggleClass('active');\n $bookmarkFilters.toggleClass('hidden');\n $selectedTags.toggleClass('hidden');\n }\n}\n","import { Controller } from \"stimulus\";\nimport { prepareModal, deleteBookmarkCard, ajaxPost, defaultTippyOptions,\n tippyWithDynamicContent, hideAllBookmarksTippy, showModal } from '../packs/utils.js';\n\n/* Responsible to handle:\n * - menu behavior in golink cards\n * - form behavior in golink new/edit\n * - toggling in orgs modals\n *\n * jQuery: Free\n */\nexport default class extends Controller {\n static targets = ['haveit', 'url', 'name'];\n\n showActions(event) {\n const element = event.srcElement;\n let golinkId = element.dataset.golinkId;\n const organizationId = element.dataset.organizationId;\n let ellipsisButton = this.element;\n const path = '/aliases/' + golinkId + '/actions?&organization_id=' + organizationId;\n\n tippyWithDynamicContent(event, path, {}, {\n ...defaultTippyOptions(),\n distance: 8,\n offset: '-26, 5',\n touch: true,\n delay: [20, 100],\n duration: [10, 10],\n placement: 'top',\n hideOnClick: true,\n onShow(instance) {\n instance.set({trigger: 'click'});\n\n ellipsisButton.style.opacity = 1;\n },\n\n onHide(instance) {\n instance.set({trigger: 'click'})\n\n ellipsisButton.style.opacity = '';\n }\n });\n }\n\n delete(event) {\n deleteBookmarkCard(event.srcElement);\n }\n\n showSuggestions(event) {\n const orgId = event.srcElement.getAttribute('data-organization-id') ||\n event.srcElement.parentElement.getAttribute('data-organization-id');\n\n let path = `/aliases/suggestions`;\n\n if (orgId != '' && orgId != null) {\n path = `/orgs/${orgId}` + path;\n }\n\n let $document = $('body');\n const modalId = 'aliases-suggestions';\n\n // Hide all other tippy elements.\n hideAllBookmarksTippy();\n\n // Clear Turbolinks cache\n Turbo.clearCache();\n\n $.ajax({\n url: path\n }).done(function (result) {\n $document.append(result);\n\n showModal(modalId);\n });\n }\n\n addToOrg(event) {\n prepareModal(event, 'aliases', 'org_modal', 'org-modal');\n }\n\n toggleGolinkToOrg(event) {\n const golinkId = this.element.dataset.golinkId;\n const orgId = event.srcElement.getAttribute('id');\n const isChecked = event.srcElement.checked;\n const data = { organization_id: orgId, id: golinkId };\n let path = [`/aliases/${golinkId}/`];\n\n if (orgId != '' && orgId != null) {\n path.unshift(`/orgs/${orgId}`);\n }\n\n path.push( isChecked ? 'add_to_org' : 'remove_from_org' );\n\n ajaxPost(path.join(''), data);\n }\n\n toggleSuggestion(event) {\n const golinkName = this.element.getAttribute('data-golink-name');\n const golinkUrl = this.element.getAttribute('data-golink-url');\n const golinkDescription = this.element.getAttribute('data-golink-description');\n const orgId = event.srcElement.getAttribute('data-organization-id');\n const isChecked = $(event.srcElement).is(':checked');\n let path = `/aliases/`;\n\n if (orgId != '' && orgId != null) {\n path = `/orgs/${orgId}` + path;\n }\n\n if (isChecked === true) {\n path += 'add_suggestion';\n }\n else {\n path += 'remove_suggestion';\n }\n\n $.ajax({\n url: path,\n method: 'POST',\n beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name=\"csrf-token\"]').attr('content'))},\n data: { organization_id: orgId,\n name: golinkName,\n description: golinkDescription,\n url: golinkUrl }\n }).done(function (result) {\n });\n }\n}\n","import { Controller } from \"stimulus\";\nimport { prepareModal, deleteBookmarkCard, ajaxPost, defaultTippyOptions,\n tippyWithDynamicContent, hideAllBookmarksTippy, showModal } from '../packs/utils.js';\n\n/* Responsible to handle:\n * - menu behavior in golink cards\n * - form behavior in golink new/edit\n * - toggling in orgs modals\n *\n * jQuery: Free\n */\nexport default class extends Controller {\n static targets = ['haveit', 'url', 'name'];\n\n connect() {\n if (this.hasUrlTarget) {\n this.urlTarget.value = this.urlTarget.value ||\n localStorage.getItem('golinkUrl');\n\n if (this.urlTarget.value != localStorage.getItem('golinkUrl')) {\n localStorage.setItem('golinkUrl', this.urlTarget.value);\n }\n }\n\n if (this.hasNameTarget) {\n this.nameTarget.value = this.nameTarget.value ||\n localStorage.getItem('golinkName');\n\n if (this.nameTarget.value != localStorage.getItem('golinkName')) {\n localStorage.setItem('golinkName', this.nameTarget.value);\n }\n }\n }\n\n changeName(event) {\n const name = event.srcElement.value;\n const haveItElement = this.haveitTarget;\n const currentName = this.data.get('name');\n const organizationId = this.data.get('organization-id');\n\n if (name == currentName || event.key == \"Enter\") {\n return;\n }\n\n ajaxPost('/aliases/haveit',\n { name: name, organization_id: organizationId }, function(response) {\n if (response.golink) {\n haveItElement.classList.remove('hidden');\n const linkElement = haveItElement.querySelector('.edit-link');\n linkElement.href = linkElement.href.replace(':id', response.golink.id);\n } else {\n haveItElement.classList.add('hidden');\n }\n });\n }\n\n blurUrl(event) {\n localStorage.setItem('golinkUrl', event.target.value);\n }\n\n blurName(event) {\n localStorage.setItem('golinkName', event.target.value);\n }\n\n submitForm(event) {\n localStorage.setItem('golinkUrl', '');\n localStorage.setItem('golinkName', '');\n }\n\n resetStorage(event) {\n localStorage.setItem('golinkUrl', '');\n localStorage.setItem('golinkName', '');\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n connect() {\n const $element = this.element;\n }\n\n toggle(event) {\n event.preventDefault();\n\n let guide = document.querySelector('.usage-guide');\n\n if (guide) {\n guide.classList.toggle('hidden');\n }\n }\n}\n","import { Controller } from \"stimulus\";\nimport { prepareModal, deleteBookmarkCard, ajaxPost, defaultTippyOptions,\n tippyWithDynamicContent, hideAllBookmarksTippy, showModal } from '../packs/utils.js';\n\n\nexport default class extends Controller {\n static targets = ['url'];\n\n copy(event) {\n navigator.permissions.query({name: \"clipboard-write\"}).then(result => {\n if (result.state == \"granted\" || result.state == \"prompt\") {\n navigator.clipboard.writeText(this.urlTarget.text).\n then(function()\n {\n event.target.classList.remove('btn-control');\n event.target.classList.add('btn-edit');\n event.target.text = 'Copied';\n },\n function()\n {\n event.target.classList.remove('btn-control');\n event.target.classList.add('btn-delete');\n event.target.text = 'Fail';\n });\n }\n });\n }\n\n showPendingInvitations(event) {\n const orgId = event.srcElement.getAttribute('data-organization-id') ||\n event.srcElement.parentElement.getAttribute('data-organization-id');\n\n let path = `/invitations/pending_invitations`;\n\n if (orgId != '' && orgId != null) {\n path = `/orgs/${orgId}` + path;\n }\n\n let $document = $('body');\n const modalId = 'pending-invitations';\n\n // Hide all other tippy elements.\n hideAllBookmarksTippy();\n\n // Clear Turbolinks cache\n Turbo.clearCache();\n\n $.ajax({\n url: path\n }).done(function (result) {\n $document.append(result);\n\n showModal(modalId);\n });\n }\n}\n","import { Controller } from \"stimulus\";\nimport tippy from 'tippy.js';\nimport { tokenize, words, webShare, checkAuthentication } from '../packs/utils.js';\n\nexport default class extends Controller {\n static targets = ['subscriptionsCount', 'share'];\n\n connect() {\n if (this.hasShareTarget == true) {\n if (!navigator.share) {\n this.shareTarget.parentElement.style.display = 'none';\n }\n }\n }\n\n toggleSubscribe(event) {\n const path = event.detail[0].path;\n const counter = event.detail[0].counter;\n let caption = event.srcElement.text;\n\n caption = (caption === 'Subscribe') ? 'Unsubscribe' : 'Subscribe';\n\n // Toggle caption\n event.srcElement.text = caption;\n\n // Change post path\n event.srcElement.href = path;\n\n // Change background colors\n event.srcElement.classList.toggle('!bg-emerald-400');\n event.srcElement.classList.toggle('hover:!bg-emerald-500');\n\n // Update list subscription counter\n this.subscriptionsCountTarget.setAttribute('data_src', counter);\n }\n\n share(event) {\n webShare(event);\n }\n\n delete(event) {\n $(event.currentTarget).parents('.card').remove();\n this.decrementCount(document.getElementById('lists-count'));\n }\n\n deleteSubscription(event) {\n $(event.currentTarget).parents('.card').remove();\n this.decrementCount(document.getElementById('list-subscriptions-count'));\n }\n\n beforeSend(event) {\n checkAuthentication();\n }\n\n addSubscription(event) {\n event.srcElement.classList.toggle('hidden');\n this.increamentCount(document.getElementById('list-subscriptions-count'));\n }\n\n decrementCount($el) {\n const count = parseInt($el.innerHTML.replace('(', '').replace(')', ''), 10);\n\n $el.innerHTML = `(${count - 1})`;\n }\n\n increamentCount($el) {\n const count = parseInt($el.innerHTML.replace('(', '').replace(')', ''), 10);\n\n $el.innerHTML = `(${count + 1})`;\n }\n\n filter(event) {\n let query = event.srcElement.value;\n let regex = new RegExp(`^${query}`, 'giu');\n let lists;\n let selectedLists = [];\n let unselectedLists = [];\n let listNode;\n\n lists = event.srcElement.parentElement.querySelectorAll('label.form-checkbox');\n listNode = event.srcElement.parentElement.querySelector('ul');\n\n lists.forEach(list => {\n if (list.children[0].checked && query.length == 0) {\n selectedLists.push(list.parentElement);\n } else {\n unselectedLists.push(list.parentElement);\n }\n\n listNode.removeChild(list.parentElement);\n });\n\n selectedLists = selectedLists.sort((a, b) =>\n a.children[0].textContent.trim().localeCompare(\n b.children[0].textContent.trim()));\n\n\n selectedLists.forEach(list => {\n let label = list.children[0];\n label.classList.remove('hidden');\n\n listNode.appendChild(list);\n });\n\n unselectedLists = unselectedLists.sort((a, b) =>\n a.children[0].textContent.trim().localeCompare(\n b.children[0].textContent.trim()));\n\n\n unselectedLists.forEach(list => {\n let label = list.children[0];\n let name = label.textContent.trim();\n let tokens = words([name]);\n\n if (tokens.some(word => regex.test(word))) {\n label.classList.remove('hidden');\n } else {\n label.classList.add('hidden');\n }\n\n listNode.appendChild(list);\n });\n }\n}\n","import { Controller } from \"stimulus\";\n\nimport { ajaxPost } from '../packs/utils.js';\n\nexport default class extends Controller {\n static targets = ['haveit'];\n\n connect() {\n this.previousName = ':id';\n }\n\n\n keyUp(event) {\n const name = event.srcElement.value;\n const haveItElement = this.haveitTarget;\n const currentName = this.data.get('list-id');\n const organizationId = this.data.get('organization-id');\n const previousName = this.previousName;\n let element = this;\n\n if (name == currentName || event.key == \"Enter\") {\n return;\n }\n\n ajaxPost('/lists/haveit',\n { list_name: name, organization_id: organizationId }, function(response) {\n if (response.list) {\n haveItElement.classList.remove('hidden');\n\n const linkElements = haveItElement.querySelectorAll('.edit-link');\n linkElements.forEach(function(linkElement) {\n linkElement.href = linkElement.href.replace(previousName, response.list.id);\n });\n\n element.previousName = name;\n }\n else {\n haveItElement.classList.add('hidden');\n }\n });\n }\n}\n","import { Controller } from \"stimulus\";\nimport tippy from 'tippy.js';\nimport { defaultTippyOptions } from '../packs/utils.js';\n\nexport default class extends Controller {\n initialize() {\n // Initialize hidden toggler\n this._initial_state = this.data.get('hidden') == 'true' ? true : false;\n this._hidden = this._initial_state;\n\n // Initialize id\n this._id = this.data.get('listId');\n\n this._hiddenBookmarks = Number(this.data.get('hiddenBookmarks'));\n\n this._visibleBookmarks = Number(this.data.get('visibleBookmarks'));\n\n this._sharedBookmarks = Number(this.data.get('sharedBookmarks'));\n\n this._subscriptionsCount = Number(this.data.get('subscriptionsCount'));\n }\n\n toggle(event) {\n event.stopPropagation();\n\n // Reverse hidden value every time a toggler is pressed.\n this._hidden = !this._hidden;\n\n if (this._hidden == this._initial_state) {\n return;\n }\n\n // If this is a new list do not bother on checking\n // for bookmarks with non compatible visibilities.\n if (this._id === '') {\n return;\n }\n\n let publicBookmarks = this._visibleBookmarks + this._sharedBookmarks;\n let privateBookmarks = this._hiddenBookmarks;\n\n if (this._hidden === true && (publicBookmarks > 0 || this._subscriptionsCount > 0)) {\n this.tippy = this.element._tippy || tippy(this.element , {\n ...defaultTippyOptions(),\n trigger: 'manual',\n distance: 25,\n placement: 'bottom',\n onHide(instance) {\n if (instance.state.isShown == false) {\n return false;\n }\n }\n });\n\n let content = `Please note that ${publicBookmarks} public bookmarks of this list\nwill change to private ⚠`;\n\n if (this._subscriptionsCount > 0) {\n content += ` and ${this._subscriptionsCount} list subscription(s) will be dropped!`\n }\n\n this.tippy.setContent(content);\n this.tippy.show();\n\n return;\n }\n\n if (this._hidden == false && privateBookmarks > 0) {\n this.tippy = this.element._tippy || tippy(this.element , {\n ...defaultTippyOptions(),\n trigger: 'manual',\n distance: 25,\n placement: 'bottom',\n onHide(instance) {\n if (instance.state.isShown == false) {\n return false;\n }\n }\n });\n\n let content = `Please note that ${privateBookmarks} private bookmarks of\nthis list will change to public ⚠` ;\n\n this.tippy.setContent(content);\n this.tippy.show();\n\n return;\n }\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n delete(event) {\n $(event.currentTarget).parents('.card').remove();\n this.decrementCount($('.resources-count'));\n }\n\n decrementCount($el) {\n const count = parseInt($el.text().replace('(', '').replace(')', ''), 10);\n\n $el.text(`(${count - 1})`);\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n click(event) {\n // Allow propagation for close modal buttons.\n if (event.target.classList.value === 'modal__close') {\n if (this.data.get('refresh') == 'true') {\n Turbo.visit(window.location.toString(), { action: 'replace' })\n }\n\n return;\n }\n\n event.stopPropagation();\n }\n\n blur(event) {\n if (this.data.get('refresh') == 'true') {\n Turbo.visit(window.location.toString(), { action: 'replace' })\n }\n\n Array.from(document.getElementsByClassName('micromodal-slide')).forEach(function(element) {\n try {\n window.Tefter.MicroModal.close(element['id']);\n } catch(error) {}\n });\n\n // Reset sidebar css opacity\n $('.sidebar').css('opacity', 1);\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = ['input', 'message', 'button'];\n\n reset() {\n let $modal = $(\"#modal-new-feed\");\n\n let title = 'Add new rss feed';\n\n if (window.Tefter.orgName) {\n title = `${title} to ${window.Tefter.orgName}`;\n }\n\n $(\"#modal-new-feed-title\").text(title);\n\n $modal.find('input[type=text]').show().val('');\n $modal.find('input[type=text]').val('');\n\n setTimeout(function() { $modal.find('input[type=text]').focus(); }, 100);\n\n $modal.find('.message').text('');\n $modal.find('.create').show().val('Follow')\n }\n\n handleResponse(event) {\n let [data, status, xhr] = event.detail;\n let message = '';\n\n if (data.status === 422) {\n if (data.responseText.match('Your plan supports')) {\n message = JSON.parse(data.responseText).errors.title;\n }\n else {\n message = `RSS feed is invalid. Please provide a well\nformatted rss feed like https://www.example.com/rss`\n }\n\n this.messageTarget.innerHTML = message;\n }\n\n if (data.status === 200) {\n let response = JSON.parse(data.response);\n\n if (response.existing == true) {\n $(this.buttonTarget).hide();\n\n let url = '/' + response.object.username;\n\n message = `You already followed ${response.object.username}. Click here to see feed's page.`;\n\n this.messageTarget.innerHTML = message;\n }\n }\n\n if (data.status === 201) {\n let response = JSON.parse(data.response);\n let ctrl = this;\n\n let modalId = ctrl.element.id.replace('-content', '');\n\n $(ctrl.inputTarget).hide();\n $(ctrl.buttonTarget).hide();\n $(\"#modal-new-feed-title\").text('You followed one more feed!');\n\n let refreshUrl = '/following';\n\n window.setTimeout(window.Tefter.MicroModal.close, 2 * 1000, modalId);\n window.setTimeout(Turbo.visit, 1000, refreshUrl, { action: 'replace' });\n\n ctrl.messageTarget.innerHTML = message;\n }\n }\n\n submit(event) {\n this.buttonTarget.value = 'Following..';\n }\n}\n","import { Controller } from 'stimulus';\nimport Onboarding from '../packs/onboarding.js';\n\nexport default class extends Controller {\n connect() {\n (new Onboarding).attach();\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"passwordField\"];\n\n change(e) {\n }\n\n toggle(event) {\n if (this.passwordFieldTarget.type === 'password') {\n this.passwordFieldTarget.type = 'text';\n } else {\n this.passwordFieldTarget.type = 'password';\n }\n\n event.preventDefault();\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n connect() {\n $('#pricing-choices').click(function() {\n $('.pricing-hobbyist').toggleClass('hidden');\n $('.pricing-pro').toggleClass('hidden');\n });\n }\n}\n","import { Controller } from \"stimulus\";\nimport tippy from 'tippy.js';\nimport { defaultTippyOptions } from '../packs/utils.js';\n\nexport default class extends Controller {\n initialize() {\n this._initialState = this.data.get('privacy') == 'true' ? true : false;\n this._privacy = this._initialState;\n\n this._followers = Number(this.data.get('followers'));\n }\n\n toggle(event) {\n this._privacy = !this._privacy;\n\n if (this._privacy == this._initialState) {\n return;\n }\n\n if (this._privacy == true && this._followers > 0) {\n this.tippy = event.srcElement._tippy || tippy(event.srcElement , {\n ...defaultTippyOptions(),\n trigger: 'manual',\n distance: 15,\n placement: 'bottom-start',\n onHide(instance) {\n if (instance.state.isShown == false) {\n return false;\n }\n }\n });\n\n let content = `Please note that your ${this._followers} followers\nwill automatically stop following your account ⚠`;\n\n this.tippy.setContent(content);\n this.tippy.show();\n\n return;\n }\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n toggleMenu(event) {\n this.element.classList.toggle('active')\n }\n\n toggleSearch(event) {\n event.preventDefault();\n $('.searchbar-mobile').toggleClass('active');\n\n if ($('.searchbar-mobile').hasClass('active')) {\n setTimeout(function() {\n $('#mobile-autocomplete input').focus();\n }, 200);\n }\n }\n\n toggleSidebar(event) {\n // Do not try to toggle Sidebar when a user tries to click an element\n // that belongs to the sidebar, eg. Feed or Search icon.\n if (event.srcElement.href != undefined) {\n return;\n }\n\n const element = $('.dashboard');\n const menuItems = $('.sidebar-menu a');\n const sidebar = $('.sidebar');\n let grid = element.css('grid-template-columns');\n\n if (grid == undefined) {\n return;\n }\n\n grid = grid.split(' ')[0];\n\n if (grid == '300px') {\n $(event.currentTarget).toggleClass('expanded');\n element.css('grid-template-columns', '50px 1fr');\n menuItems.css('font-size', '0px');\n }\n else if (grid == '50px') {\n $(event.currentTarget).toggleClass('expanded');\n menuItems.css('font-size', '16px');\n element.css('grid-template-columns', '300px 1fr');\n }\n }\n\n simpleClick(event) {\n let source = event.srcElement;\n\n if (source.localName == 'li') {\n event.preventDefault();\n event.stopPropagation();\n window.location = source.querySelector('a').href;\n return;\n }\n }\n\n toggleLists(event) {\n $('.toggle-lists').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n }\n\n toggleAliases(event) {\n $('.toggle-aliases').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n toggleBookmarks(event) {\n $('.toggle-bookmarks').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n toggleAccount(event) {\n $('.toggle-account').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n toggleSettings(event) {\n $('.toggle-settings').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n toggleExplore(event) {\n $('.toggle-explore').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n toggleTeams(event) {\n $('.toggle-teams').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n toggleOrganization(event) {\n $('.toggle-organization').toggleClass('hidden');\n $(event.currentTarget).toggleClass('icon-right-open');\n $(event.currentTarget).toggleClass('icon-down-open');\n\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { Controller } from \"stimulus\";\nimport Subscriptions from '../packs/subscriptions.js';\n\nexport default class extends Controller {\n connect() {\n (new Subscriptions).attach();\n }\n}\n","import { Controller } from \"stimulus\"\nimport tippy from 'tippy.js';\nimport { defaultTippyOptions } from '../packs/utils.js';\n\nexport default class extends Controller {\n connect() {\n const $element = this.element;\n\n if (typeof($element) == undefined ||\n $element.parentElement.querySelector('.tooltip-content') == null) {\n return;\n }\n\n const t = tippy($element,\n {\n ...defaultTippyOptions(),\n trigger: 'mouseenter',\n delay: $element.dataset['delay'] || 0,\n placement: $element.dataset['placement'] || 'bottom',\n content: $element.parentElement.querySelector('.tooltip-content').innerHTML\n });\n if ($element.dataset['show']) {\n t.show();\n }\n }\n}\n","import { Controller } from \"stimulus\";\nimport TrialNotice from '../packs/trial_notice.js';\n\nexport default class extends Controller {\n connect() {\n (new TrialNotice).attach();\n }\n}\n","import { Controller } from 'stimulus';\nimport tippy from 'tippy.js';\nimport { ajaxPut } from '../packs/utils.js';\n\nexport default class extends Controller {\n renderBackgrounds(e) {\n e.preventDefault();\n this.tippy = this.element._tippy || tippy(this.element, {\n trigger: 'click',\n interactive: true,\n distance: 25,\n arrow: true,\n placement: 'bottom'\n });\n\n this.content().then(function(content) {\n this.tippy.setContent(content);\n this.tippy.show();\n }.bind(this));\n }\n\n pickBackground(event) {\n let imgEl = event.target;\n let img = imgEl.src;\n let realImage = img.match(/thumbs\\/(.*)/)[1];\n let url = `https://${Tefter.cdn}/wallpapers/${realImage}`;\n let $card = $('.account-card');\n let classes = Array.from($card.prop('classList'));\n\n $card.\n addClass('with-background').\n removeClass(classes.filter(c => c.match(/^theme-/)).join(' ')).\n addClass(`theme-${imgEl.dataset.theme}`).\n css('background-image', `url(${url})`);\n\n $('.change-background')[0]._tippy.hide();\n\n this.updateBackground(url);\n }\n\n updateBackground(background) {\n ajaxPut('/users/update_background', { background: background });\n }\n\n removeBackgroundElement() {\n if ($('.account-card').hasClass('with-background')) {\n return `user-background#removeBackground\">Remove background`;\n } else {\n return '';\n }\n }\n\n removeBackground(e) {\n e.preventDefault();\n\n $('.account-card').\n removeClass('with-background').\n css('background-image', 'none');\n\n $('.change-background')[0]._tippy.hide();\n this.updateBackground(null);\n }\n\n content() {\n return this.availableImages().then(function(images) {\n return `\n
\n ${this.removeBackgroundElement()}\n ${this.renderImageThumbs(images)}\n Images by unsplash\n
`;\n }.bind(this));\n }\n\n renderImageThumbs(images) {\n return images.map(function(img) {\n return `\n user-background#pickBackground\"\n src=\"/wallpapers/thumbs/${img.name}\"/>\n `;\n }).join('\\n');\n }\n\n availableImages() {\n if (this.backgrounds) {\n return Promise.resolve(this.backgrounds);\n } else {\n return $.get('/users/backgrounds').then(function(res) {\n return this.backgrounds = res.backgrounds;\n }.bind(this));\n }\n }\n}\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n connect() {\n let $element = $(this.element);\n\n if ($element.css('opacity') == 0) {\n this.element.style.gridRowEnd = \"span 10\";\n $element.animate({ opacity: 1 }, 100);\n }\n }\n}\n","import { Controller } from \"stimulus\";\nimport tippy from 'tippy.js';\nimport { defaultTippyOptions } from '../packs/utils.js';\n\nexport default class extends Controller {\n static targets = ['link'];\n\n handleResponse(event) {\n const $this = $(event.currentTarget);\n const response = event.detail[0];\n\n if (response && response.status == 'maximum_feeds') {\n this.tippy = this.element._tippy || tippy(this.element, {\n ...defaultTippyOptions(),\n distance: 25,\n placement: 'bottom'\n });\n\n let content = `You have reached the maximum number of feeds/users that your plan\nsupports. Please upgrade your account or contact as at support@tefter.io.`\n\n this.tippy.setContent(content);\n this.tippy.show();\n }\n else if (response) {\n this.toggleButton();\n this.updateForm(response);\n }\n }\n\n beforeSend(event) {\n if (Tefter.user_signed_in === false) {\n event.stopPropagation();\n event.preventDefault();\n\n window.location = window.Tefter.signInPath;\n }\n }\n\n updateForm(response) {\n this.linkTarget.href = response.url;\n this.linkTarget.setAttribute('data-method', response.method);\n }\n\n toggleButton() {\n let subscribeLabel = 'Follow';\n let subscribingLabel = 'Following';\n\n if ($(this.linkTarget).parent().parent().find('h2.feed').length > 0) {\n subscribeLabel = 'Subscribe';\n subscribingLabel = 'Subscribed';\n }\n\n const $button = $(this.linkTarget);\n\n if ($button.hasClass('btn-follow')) {\n $button.prop('value', subscribingLabel);\n $button.text('✓ ' + subscribingLabel);\n } else {\n $button.prop('value', subscribeLabel);\n $button.text('+ ' + subscribeLabel);\n }\n\n $button.toggleClass('btn-unfollow');\n $button.toggleClass('btn-follow');\n }\n}\n","import { Controller } from 'stimulus';\nimport tippy from 'tippy.js';\nimport { defaultTippyOptions } from '../packs/utils.js';\n\nexport default class extends Controller {\n optionsTemplate(path, pred, options, urlParams, separator = '') {\n return options.map((option) => {\n return `
  • \n View\n
      \n ${this.optionsTemplate('?view_mode', currentView, options, urlParams)}\n
    `\n }\n\n renderSizeMode(currentSize, urlParams) {\n let options = [ { key: '25', label: '25' },\n { key: '50', label: '50' },\n { key: '100', label: '100' } ];\n\n return `\n

    Page size

    \n
      \n ${this.optionsTemplate('?size', currentSize, options, urlParams, ' | ')}\n
    \n `\n }\n\n listsContent(currentView, currentOrder, currentSize, urlParams) {\n let options = [ { key: 'newest-created', label: 'newest' },\n { key: 'oldest-created', label: 'oldest' },\n { key: 'alphabetical-asc', label: 'alphabetical' }];\n\n return `\n
    \n ${this.renderViewMode(currentView, urlParams)}\n\n

    Order

    \n\n
      \n ${this.optionsTemplate('?sort', currentOrder, options, urlParams)}\n
    \n\n ${this.renderSizeMode(currentSize, urlParams)}\n
    \n `\n }\n\n goLinksContent(currentView, currentOrder, currentSize, urlParams) {\n let options = [ { key: 'most-used', label: 'most used' },\n { key: 'newest-created', label: 'newest' },\n { key: 'oldest-created', label: 'oldest' },\n { key: 'alphabetical-asc', label: 'alphabetical' }];\n\n return `\n
    \n ${this.renderViewMode(currentView, urlParams)}\n\n

    Order

    \n
      \n ${this.optionsTemplate('?sort', currentOrder, options, urlParams)}\n
    \n\n ${this.renderSizeMode(currentSize, urlParams)}\n
    \n `\n }\n\n feedContent(currentView, currentOrder, currentSize, urlParams) {\n let options = [ { key: 'newest-shared', label: 'newest' },\n { key: 'oldest-shared', label: 'oldest' }];\n\n return `\n
    \n ${this.renderViewMode(currentView, urlParams)}\n\n

    Order

    \n\n
      \n ${this.optionsTemplate('?sort', currentOrder, options, urlParams)}\n
    \n ${this.renderSizeMode(currentSize, urlParams)}\n
    \n `\n }\n\n defaultContent(currentView, currentOrder, currentSize, urlParams) {\n let options = [ { key: 'newest-created', label: 'newest' },\n { key: 'oldest-created', label: 'oldest' }];\n\n return `\n
    \n ${this.renderViewMode(currentView, urlParams)}\n\n

    Order

    \n\n
      \n ${this.optionsTemplate('?sort', currentOrder, options, urlParams)}\n
    \n ${this.renderSizeMode(currentSize, urlParams)}\n
    \n `\n }\n\n exploreContent(currentView, currentOrder, currentSize, urlParams) {\n let options = [ { key: 'most-popular', label: 'most popular' },\n { key: 'less-popular', label: 'less popular' }];\n\n return `\n
    \n ${this.renderViewMode(currentView, urlParams)}\n\n

    Order

    \n\n
      \n ${this.optionsTemplate('?sort', currentOrder, options, urlParams)}\n
    \n ${this.renderSizeMode(currentSize, urlParams)}\n
    \n `\n }\n\n loadContent() {\n const currentView = this.element.dataset.viewMode;\n const currentOrder = this.element.dataset.orderMode;\n const currentSize = this.element.dataset.sizeMode;\n\n let urlParams = new URLSearchParams(window.location.search).toString();\n\n urlParams = urlParams.replace(/&*view_mode=\\w+&*/g, '');\n urlParams = urlParams.replace(/&*sort=[\\w|-]+&*/g, '');\n urlParams = urlParams.replace(/&*size=[\\w|-]+&*/g, '');\n\n if (urlParams.length > 0) {\n urlParams = `&${urlParams}`;3\n }\n\n const settingsContent = this.element.dataset.settingsContent || 'default';\n\n switch(settingsContent) {\n case 'default':\n return this.defaultContent(currentView, currentOrder, currentSize, urlParams);\n break;\n case 'feed':\n return this.feedContent(currentView, currentOrder, currentSize, urlParams);\n break;\n case 'explore':\n return this.exploreContent(currentView, currentOrder, currentSize, urlParams);\n break;\n case 'golinks':\n return this.goLinksContent(currentView, currentOrder, currentSize, urlParams);\n break;\n case 'lists':\n return this.listsContent(currentView, currentOrder, currentSize, urlParams);\n break;\n }\n }\n\n connect() {\n const $picker = this.context.element.querySelector('.view-picker');\n const currentView = this.element.dataset.viewMode;\n const currentOrder = this.element.dataset.orderMode;\n\n let urlParams = new URLSearchParams(window.location.search).toString();\n\n urlParams = urlParams.replace(/&*view_mode=\\w+&*/g, '');\n urlParams = urlParams.replace(/&*sort=\\w+&*/g, '');\n\n if (urlParams.length > 0) {\n urlParams = `&${urlParams}`;\n }\n\n const t = tippy($picker,\n {\n ...defaultTippyOptions(),\n placement: 'bottom',\n maxWidth: 700,\n content: this.loadContent()\n });\n }\n}\n","/**\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\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","var _templateObject, _templateObject2;\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n/*\nTurbo 7.0.0\nCopyright © 2021 Basecamp, LLC\n */\n(function () {\n if (window.Reflect === undefined || window.customElements === undefined || window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n\n var BuiltInHTMLElement = HTMLElement;\n var wrapperForTheName = {\n 'HTMLElement': function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n }\n };\n window.HTMLElement = wrapperForTheName['HTMLElement'];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\nvar submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n var element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n var candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\n\nfunction clickCaptured(event) {\n var submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return;\n var prototype;\n\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n } else if (\"SubmitEvent\" in window) {\n return;\n } else {\n prototype = window.Event.prototype;\n }\n\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get: function get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n }\n });\n})();\n\nvar FrameLoadingStyle;\n\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\n\nvar FrameElement = /*#__PURE__*/function (_HTMLElement) {\n _inherits(FrameElement, _HTMLElement);\n\n var _super = _createSuper(FrameElement);\n\n function FrameElement() {\n var _this;\n\n _classCallCheck(this, FrameElement);\n\n _this = _super.call(this);\n _this.loaded = Promise.resolve();\n _this.delegate = new FrameElement.delegateConstructor(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(FrameElement, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n this.delegate.connect();\n }\n }, {\n key: \"disconnectedCallback\",\n value: function disconnectedCallback() {\n this.delegate.disconnect();\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var src = this.src;\n this.src = null;\n this.src = src;\n }\n }, {\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else {\n this.delegate.disabledChanged();\n }\n }\n }, {\n key: \"src\",\n get: function get() {\n return this.getAttribute(\"src\");\n },\n set: function set(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n }, {\n key: \"loading\",\n get: function get() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n },\n set: function set(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n }, {\n key: \"disabled\",\n get: function get() {\n return this.hasAttribute(\"disabled\");\n },\n set: function set(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n }, {\n key: \"autoscroll\",\n get: function get() {\n return this.hasAttribute(\"autoscroll\");\n },\n set: function set(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n }, {\n key: \"complete\",\n get: function get() {\n return !this.delegate.isLoading;\n }\n }, {\n key: \"isActive\",\n get: function get() {\n return this.ownerDocument === document && !this.isPreview;\n }\n }, {\n key: \"isPreview\",\n get: function get() {\n var _a, _b;\n\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n }], [{\n key: \"observedAttributes\",\n get: function get() {\n return [\"disabled\", \"loading\", \"src\"];\n }\n }]);\n\n return FrameElement;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy;\n\n default:\n return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\n\nfunction getAnchor(url) {\n var anchorMatch;\n\n if (url.hash) {\n return url.hash.slice(1);\n } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n return anchorMatch[1];\n }\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\n\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/);\n}\n\nfunction isPrefixedBy(baseURL, url) {\n var prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\n\nfunction getRequestURL(url) {\n var anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nvar FetchResponse = /*#__PURE__*/function () {\n function FetchResponse(response) {\n _classCallCheck(this, FetchResponse);\n\n this.response = response;\n }\n\n _createClass(FetchResponse, [{\n key: \"succeeded\",\n get: function get() {\n return this.response.ok;\n }\n }, {\n key: \"failed\",\n get: function get() {\n return !this.succeeded;\n }\n }, {\n key: \"clientError\",\n get: function get() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n }, {\n key: \"serverError\",\n get: function get() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n }, {\n key: \"redirected\",\n get: function get() {\n return this.response.redirected;\n }\n }, {\n key: \"location\",\n get: function get() {\n return expandURL(this.response.url);\n }\n }, {\n key: \"isHTML\",\n get: function get() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n }, {\n key: \"statusCode\",\n get: function get() {\n return this.response.status;\n }\n }, {\n key: \"contentType\",\n get: function get() {\n return this.header(\"Content-Type\");\n }\n }, {\n key: \"responseText\",\n get: function get() {\n return this.response.clone().text();\n }\n }, {\n key: \"responseHTML\",\n get: function get() {\n if (this.isHTML) {\n return this.response.clone().text();\n } else {\n return Promise.resolve(undefined);\n }\n }\n }, {\n key: \"header\",\n value: function header(name) {\n return this.response.headers.get(name);\n }\n }]);\n\n return FetchResponse;\n}();\n\nfunction dispatch(eventName) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n cancelable = _ref.cancelable,\n detail = _ref.detail;\n\n var event = new CustomEvent(eventName, {\n cancelable: cancelable,\n bubbles: true,\n detail: detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event;\n}\n\nfunction nextAnimationFrame() {\n return new Promise(function (resolve) {\n return requestAnimationFrame(function () {\n return resolve();\n });\n });\n}\n\nfunction nextEventLoopTick() {\n return new Promise(function (resolve) {\n return setTimeout(function () {\n return resolve();\n }, 0);\n });\n}\n\nfunction nextMicrotask() {\n return Promise.resolve();\n}\n\nfunction parseHTMLDocument() {\n var html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n return new DOMParser().parseFromString(html, \"text/html\");\n}\n\nfunction unindent(strings) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n var lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n var match = lines[0].match(/^\\s+/);\n var indent = match ? match[0].length : 0;\n return lines.map(function (line) {\n return line.slice(indent);\n }).join(\"\\n\");\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce(function (result, string, i) {\n var value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\n\nfunction uuid() {\n return Array.apply(null, {\n length: 36\n }).map(function (_, i) {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n } else if (i == 14) {\n return \"4\";\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n } else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n }).join(\"\");\n}\n\nvar FetchMethod;\n\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get;\n\n case \"post\":\n return FetchMethod.post;\n\n case \"put\":\n return FetchMethod.put;\n\n case \"patch\":\n return FetchMethod.patch;\n\n case \"delete\":\n return FetchMethod.delete;\n }\n}\n\nvar FetchRequest = /*#__PURE__*/function () {\n function FetchRequest(delegate, method, location) {\n var body = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new URLSearchParams();\n var target = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n\n _classCallCheck(this, FetchRequest);\n\n this.abortController = new AbortController();\n\n this.resolveRequestPromise = function (value) {};\n\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n\n if (this.isIdempotent) {\n this.url = mergeFormDataEntries(location, _toConsumableArray(body.entries()));\n } else {\n this.body = body;\n this.url = location;\n }\n\n this.target = target;\n }\n\n _createClass(FetchRequest, [{\n key: \"location\",\n get: function get() {\n return this.url;\n }\n }, {\n key: \"params\",\n get: function get() {\n return this.url.searchParams;\n }\n }, {\n key: \"entries\",\n get: function get() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n this.abortController.abort();\n }\n }, {\n key: \"perform\",\n value: function () {\n var _perform = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n var _a, _b, fetchOptions, response;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n fetchOptions = this.fetchOptions;\n (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n _context.next = 4;\n return this.allowRequestToBeIntercepted(fetchOptions);\n\n case 4:\n _context.prev = 4;\n this.delegate.requestStarted(this);\n _context.next = 8;\n return fetch(this.url.href, fetchOptions);\n\n case 8:\n response = _context.sent;\n _context.next = 11;\n return this.receive(response);\n\n case 11:\n return _context.abrupt(\"return\", _context.sent);\n\n case 14:\n _context.prev = 14;\n _context.t0 = _context[\"catch\"](4);\n\n if (!(_context.t0.name !== 'AbortError')) {\n _context.next = 19;\n break;\n }\n\n this.delegate.requestErrored(this, _context.t0);\n throw _context.t0;\n\n case 19:\n _context.prev = 19;\n this.delegate.requestFinished(this);\n return _context.finish(19);\n\n case 22:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[4, 14, 19, 22]]);\n }));\n\n function perform() {\n return _perform.apply(this, arguments);\n }\n\n return perform;\n }()\n }, {\n key: \"receive\",\n value: function () {\n var _receive = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(response) {\n var fetchResponse, event;\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n fetchResponse = new FetchResponse(response);\n event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: {\n fetchResponse: fetchResponse\n },\n target: this.target\n });\n\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n\n return _context2.abrupt(\"return\", fetchResponse);\n\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function receive(_x) {\n return _receive.apply(this, arguments);\n }\n\n return receive;\n }()\n }, {\n key: \"fetchOptions\",\n get: function get() {\n var _a;\n\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n };\n }\n }, {\n key: \"defaultHeaders\",\n get: function get() {\n return {\n \"Accept\": \"text/html, application/xhtml+xml\"\n };\n }\n }, {\n key: \"isIdempotent\",\n get: function get() {\n return this.method == FetchMethod.get;\n }\n }, {\n key: \"abortSignal\",\n get: function get() {\n return this.abortController.signal;\n }\n }, {\n key: \"allowRequestToBeIntercepted\",\n value: function () {\n var _allowRequestToBeIntercepted = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(fetchOptions) {\n var _this2 = this;\n\n var requestInterception, event;\n return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n requestInterception = new Promise(function (resolve) {\n return _this2.resolveRequestPromise = resolve;\n });\n event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions: fetchOptions,\n url: this.url.href,\n resume: this.resolveRequestPromise\n },\n target: this.target\n });\n\n if (!event.defaultPrevented) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 5;\n return requestInterception;\n\n case 5:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function allowRequestToBeIntercepted(_x2) {\n return _allowRequestToBeIntercepted.apply(this, arguments);\n }\n\n return allowRequestToBeIntercepted;\n }()\n }]);\n\n return FetchRequest;\n}();\n\nfunction mergeFormDataEntries(url, entries) {\n var currentSearchParams = new URLSearchParams(url.search);\n\n var _iterator = _createForOfIteratorHelper(entries),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _ref4 = _step.value;\n\n var _ref3 = _slicedToArray(_ref4, 2);\n\n var name = _ref3[0];\n var value = _ref3[1];\n if (value instanceof File) continue;\n\n if (currentSearchParams.has(name)) {\n currentSearchParams.delete(name);\n url.searchParams.set(name, value);\n } else {\n url.searchParams.append(name, value);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return url;\n}\n\nvar AppearanceObserver = /*#__PURE__*/function () {\n function AppearanceObserver(delegate, element) {\n var _this3 = this;\n\n _classCallCheck(this, AppearanceObserver);\n\n this.started = false;\n\n this.intersect = function (entries) {\n var lastEntry = entries.slice(-1)[0];\n\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n _this3.delegate.elementAppearedInViewport(_this3.element);\n }\n };\n\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n _createClass(AppearanceObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n }]);\n\n return AppearanceObserver;\n}();\n\nvar StreamMessage = /*#__PURE__*/function () {\n function StreamMessage(html) {\n _classCallCheck(this, StreamMessage);\n\n this.templateElement = document.createElement(\"template\");\n this.templateElement.innerHTML = html;\n }\n\n _createClass(StreamMessage, [{\n key: \"fragment\",\n get: function get() {\n var fragment = document.createDocumentFragment();\n\n var _iterator2 = _createForOfIteratorHelper(this.foreignElements),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var element = _step2.value;\n fragment.appendChild(document.importNode(element, true));\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return fragment;\n }\n }, {\n key: \"foreignElements\",\n get: function get() {\n return this.templateChildren.reduce(function (streamElements, child) {\n if (child.tagName.toLowerCase() == \"turbo-stream\") {\n return [].concat(_toConsumableArray(streamElements), [child]);\n } else {\n return streamElements;\n }\n }, []);\n }\n }, {\n key: \"templateChildren\",\n get: function get() {\n return Array.from(this.templateElement.content.children);\n }\n }], [{\n key: \"wrap\",\n value: function wrap(message) {\n if (typeof message == \"string\") {\n return new this(message);\n } else {\n return message;\n }\n }\n }]);\n\n return StreamMessage;\n}();\n\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nvar FormSubmissionState;\n\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\n\nvar FormEnctype;\n\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\n\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n\n case FormEnctype.plain:\n return FormEnctype.plain;\n\n default:\n return FormEnctype.urlEncoded;\n }\n}\n\nvar FormSubmission = /*#__PURE__*/function () {\n function FormSubmission(delegate, formElement, submitter) {\n var mustRedirect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n _classCallCheck(this, FormSubmission);\n\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n\n _createClass(FormSubmission, [{\n key: \"method\",\n get: function get() {\n var _a;\n\n var method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n }, {\n key: \"action\",\n get: function get() {\n var _a;\n\n var formElementAction = typeof this.formElement.action === 'string' ? this.formElement.action : null;\n return ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formaction\")) || this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n }, {\n key: \"location\",\n get: function get() {\n return expandURL(this.action);\n }\n }, {\n key: \"body\",\n get: function get() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n } else {\n return this.formData;\n }\n }\n }, {\n key: \"enctype\",\n get: function get() {\n var _a;\n\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n }, {\n key: \"isIdempotent\",\n get: function get() {\n return this.fetchRequest.isIdempotent;\n }\n }, {\n key: \"stringFormData\",\n get: function get() {\n return _toConsumableArray(this.formData).reduce(function (entries, _ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n name = _ref6[0],\n value = _ref6[1];\n\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n }, {\n key: \"start\",\n value: function () {\n var _start = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {\n var _FormSubmissionState, initialized, requesting;\n\n return _regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _FormSubmissionState = FormSubmissionState, initialized = _FormSubmissionState.initialized, requesting = _FormSubmissionState.requesting;\n\n if (!(this.state == initialized)) {\n _context4.next = 4;\n break;\n }\n\n this.state = requesting;\n return _context4.abrupt(\"return\", this.fetchRequest.perform());\n\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function start() {\n return _start.apply(this, arguments);\n }\n\n return start;\n }()\n }, {\n key: \"stop\",\n value: function stop() {\n var _FormSubmissionState2 = FormSubmissionState,\n stopping = _FormSubmissionState2.stopping,\n stopped = _FormSubmissionState2.stopped;\n\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n }, {\n key: \"prepareHeadersForRequest\",\n value: function prepareHeadersForRequest(headers, request) {\n if (!request.isIdempotent) {\n var token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n\n if (token) {\n headers[\"X-CSRF-Token\"] = token;\n }\n\n headers[\"Accept\"] = [StreamMessage.contentType, headers[\"Accept\"]].join(\", \");\n }\n }\n }, {\n key: \"requestStarted\",\n value: function requestStarted(request) {\n this.state = FormSubmissionState.waiting;\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: {\n formSubmission: this\n }\n });\n this.delegate.formSubmissionStarted(this);\n }\n }, {\n key: \"requestPreventedHandlingResponse\",\n value: function requestPreventedHandlingResponse(request, response) {\n this.result = {\n success: response.succeeded,\n fetchResponse: response\n };\n }\n }, {\n key: \"requestSucceededWithResponse\",\n value: function requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n var error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = {\n success: true,\n fetchResponse: response\n };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n }, {\n key: \"requestFailedWithResponse\",\n value: function requestFailedWithResponse(request, response) {\n this.result = {\n success: false,\n fetchResponse: response\n };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n }, {\n key: \"requestErrored\",\n value: function requestErrored(request, error) {\n this.result = {\n success: false,\n error: error\n };\n this.delegate.formSubmissionErrored(this, error);\n }\n }, {\n key: \"requestFinished\",\n value: function requestFinished(request) {\n this.state = FormSubmissionState.stopped;\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({\n formSubmission: this\n }, this.result)\n });\n this.delegate.formSubmissionFinished(this);\n }\n }, {\n key: \"requestMustRedirect\",\n value: function requestMustRedirect(request) {\n return !request.isIdempotent && this.mustRedirect;\n }\n }]);\n\n return FormSubmission;\n}();\n\nfunction buildFormData(formElement, submitter) {\n var formData = new FormData(formElement);\n var name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n var value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n\n if (name && value != null && formData.get(name) != value) {\n formData.append(name, value);\n }\n\n return formData;\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n var cookies = document.cookie ? document.cookie.split(\"; \") : [];\n var cookie = cookies.find(function (cookie) {\n return cookie.startsWith(cookieName);\n });\n\n if (cookie) {\n var value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\n\nfunction getMetaContent(name) {\n var element = document.querySelector(\"meta[name=\\\"\".concat(name, \"\\\"]\"));\n return element && element.content;\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\n\nvar Snapshot = /*#__PURE__*/function () {\n function Snapshot(element) {\n _classCallCheck(this, Snapshot);\n\n this.element = element;\n }\n\n _createClass(Snapshot, [{\n key: \"children\",\n get: function get() {\n return _toConsumableArray(this.element.children);\n }\n }, {\n key: \"hasAnchor\",\n value: function hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n }, {\n key: \"getElementForAnchor\",\n value: function getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(\"[id='\".concat(anchor, \"'], a[name='\").concat(anchor, \"']\")) : null;\n }\n }, {\n key: \"isConnected\",\n get: function get() {\n return this.element.isConnected;\n }\n }, {\n key: \"firstAutofocusableElement\",\n get: function get() {\n return this.element.querySelector(\"[autofocus]\");\n }\n }, {\n key: \"permanentElements\",\n get: function get() {\n return _toConsumableArray(this.element.querySelectorAll(\"[id][data-turbo-permanent]\"));\n }\n }, {\n key: \"getPermanentElementById\",\n value: function getPermanentElementById(id) {\n return this.element.querySelector(\"#\".concat(id, \"[data-turbo-permanent]\"));\n }\n }, {\n key: \"getPermanentElementMapForSnapshot\",\n value: function getPermanentElementMapForSnapshot(snapshot) {\n var permanentElementMap = {};\n\n var _iterator3 = _createForOfIteratorHelper(this.permanentElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var currentPermanentElement = _step3.value;\n var id = currentPermanentElement.id;\n var newPermanentElement = snapshot.getPermanentElementById(id);\n\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n return permanentElementMap;\n }\n }]);\n\n return Snapshot;\n}();\n\nvar FormInterceptor = /*#__PURE__*/function () {\n function FormInterceptor(delegate, element) {\n var _this4 = this;\n\n _classCallCheck(this, FormInterceptor);\n\n this.submitBubbled = function (event) {\n var form = event.target;\n\n if (form instanceof HTMLFormElement && form.closest(\"turbo-frame, html\") == _this4.element) {\n var submitter = event.submitter || undefined;\n\n if (_this4.delegate.shouldInterceptFormSubmission(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n\n _this4.delegate.formSubmissionIntercepted(form, submitter);\n }\n }\n };\n\n this.delegate = delegate;\n this.element = element;\n }\n\n _createClass(FormInterceptor, [{\n key: \"start\",\n value: function start() {\n this.element.addEventListener(\"submit\", this.submitBubbled);\n }\n }, {\n key: \"stop\",\n value: function stop() {\n this.element.removeEventListener(\"submit\", this.submitBubbled);\n }\n }]);\n\n return FormInterceptor;\n}();\n\nvar View = /*#__PURE__*/function () {\n function View(delegate, element) {\n _classCallCheck(this, View);\n\n this.resolveRenderPromise = function (value) {};\n\n this.resolveInterceptionPromise = function (value) {};\n\n this.delegate = delegate;\n this.element = element;\n }\n\n _createClass(View, [{\n key: \"scrollToAnchor\",\n value: function scrollToAnchor(anchor) {\n var element = this.snapshot.getElementForAnchor(anchor);\n\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({\n x: 0,\n y: 0\n });\n }\n }\n }, {\n key: \"scrollToAnchorFromLocation\",\n value: function scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n }, {\n key: \"scrollToElement\",\n value: function scrollToElement(element) {\n element.scrollIntoView();\n }\n }, {\n key: \"focusElement\",\n value: function focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n }, {\n key: \"scrollToPosition\",\n value: function scrollToPosition(_ref7) {\n var x = _ref7.x,\n y = _ref7.y;\n this.scrollRoot.scrollTo(x, y);\n }\n }, {\n key: \"scrollToTop\",\n value: function scrollToTop() {\n this.scrollToPosition({\n x: 0,\n y: 0\n });\n }\n }, {\n key: \"scrollRoot\",\n get: function get() {\n return window;\n }\n }, {\n key: \"render\",\n value: function () {\n var _render = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(renderer) {\n var _this5 = this;\n\n var isPreview, shouldRender, snapshot, renderInterception, immediateRender;\n return _regeneratorRuntime.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n isPreview = renderer.isPreview, shouldRender = renderer.shouldRender, snapshot = renderer.newSnapshot;\n\n if (!shouldRender) {\n _context5.next = 22;\n break;\n }\n\n _context5.prev = 2;\n this.renderPromise = new Promise(function (resolve) {\n return _this5.resolveRenderPromise = resolve;\n });\n this.renderer = renderer;\n this.prepareToRenderSnapshot(renderer);\n renderInterception = new Promise(function (resolve) {\n return _this5.resolveInterceptionPromise = resolve;\n });\n immediateRender = this.delegate.allowsImmediateRender(snapshot, this.resolveInterceptionPromise);\n\n if (immediateRender) {\n _context5.next = 11;\n break;\n }\n\n _context5.next = 11;\n return renderInterception;\n\n case 11:\n _context5.next = 13;\n return this.renderSnapshot(renderer);\n\n case 13:\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.finishRenderingSnapshot(renderer);\n\n case 15:\n _context5.prev = 15;\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n return _context5.finish(15);\n\n case 20:\n _context5.next = 23;\n break;\n\n case 22:\n this.invalidate();\n\n case 23:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this, [[2,, 15, 20]]);\n }));\n\n function render(_x3) {\n return _render.apply(this, arguments);\n }\n\n return render;\n }()\n }, {\n key: \"invalidate\",\n value: function invalidate() {\n this.delegate.viewInvalidated();\n }\n }, {\n key: \"prepareToRenderSnapshot\",\n value: function prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n renderer.prepareToRender();\n }\n }, {\n key: \"markAsPreview\",\n value: function markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n }, {\n key: \"renderSnapshot\",\n value: function () {\n var _renderSnapshot = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(renderer) {\n return _regeneratorRuntime.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return renderer.render();\n\n case 2:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }));\n\n function renderSnapshot(_x4) {\n return _renderSnapshot.apply(this, arguments);\n }\n\n return renderSnapshot;\n }()\n }, {\n key: \"finishRenderingSnapshot\",\n value: function finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n }]);\n\n return View;\n}();\n\nvar FrameView = /*#__PURE__*/function (_View) {\n _inherits(FrameView, _View);\n\n var _super2 = _createSuper(FrameView);\n\n function FrameView() {\n _classCallCheck(this, FrameView);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(FrameView, [{\n key: \"invalidate\",\n value: function invalidate() {\n this.element.innerHTML = \"\";\n }\n }, {\n key: \"snapshot\",\n get: function get() {\n return new Snapshot(this.element);\n }\n }]);\n\n return FrameView;\n}(View);\n\nvar LinkInterceptor = /*#__PURE__*/function () {\n function LinkInterceptor(delegate, element) {\n var _this6 = this;\n\n _classCallCheck(this, LinkInterceptor);\n\n this.clickBubbled = function (event) {\n if (_this6.respondsToEventTarget(event.target)) {\n _this6.clickEvent = event;\n } else {\n delete _this6.clickEvent;\n }\n };\n\n this.linkClicked = function (event) {\n if (_this6.clickEvent && _this6.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (_this6.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n _this6.clickEvent.preventDefault();\n\n event.preventDefault();\n\n _this6.delegate.linkClickIntercepted(event.target, event.detail.url);\n }\n }\n\n delete _this6.clickEvent;\n };\n\n this.willVisit = function () {\n delete _this6.clickEvent;\n };\n\n this.delegate = delegate;\n this.element = element;\n }\n\n _createClass(LinkInterceptor, [{\n key: \"start\",\n value: function start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n }, {\n key: \"stop\",\n value: function stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n }, {\n key: \"respondsToEventTarget\",\n value: function respondsToEventTarget(target) {\n var element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n }]);\n\n return LinkInterceptor;\n}();\n\nvar Bardo = /*#__PURE__*/function () {\n function Bardo(permanentElementMap) {\n _classCallCheck(this, Bardo);\n\n this.permanentElementMap = permanentElementMap;\n }\n\n _createClass(Bardo, [{\n key: \"enter\",\n value: function enter() {\n for (var id in this.permanentElementMap) {\n var _this$permanentElemen = _slicedToArray(this.permanentElementMap[id], 2),\n newPermanentElement = _this$permanentElemen[1];\n\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n }, {\n key: \"leave\",\n value: function leave() {\n for (var id in this.permanentElementMap) {\n var _this$permanentElemen2 = _slicedToArray(this.permanentElementMap[id], 1),\n currentPermanentElement = _this$permanentElemen2[0];\n\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n }\n }\n }, {\n key: \"replaceNewPermanentElementWithPlaceholder\",\n value: function replaceNewPermanentElementWithPlaceholder(permanentElement) {\n var placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n }, {\n key: \"replaceCurrentPermanentElementWithClone\",\n value: function replaceCurrentPermanentElementWithClone(permanentElement) {\n var clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n }, {\n key: \"replacePlaceholderWithPermanentElement\",\n value: function replacePlaceholderWithPermanentElement(permanentElement) {\n var placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n }, {\n key: \"getPlaceholderById\",\n value: function getPlaceholderById(id) {\n return this.placeholders.find(function (element) {\n return element.content == id;\n });\n }\n }, {\n key: \"placeholders\",\n get: function get() {\n return _toConsumableArray(document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\"));\n }\n }], [{\n key: \"preservingPermanentElements\",\n value: function preservingPermanentElements(permanentElementMap, callback) {\n var bardo = new this(permanentElementMap);\n bardo.enter();\n callback();\n bardo.leave();\n }\n }]);\n\n return Bardo;\n}();\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n var element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nvar Renderer = /*#__PURE__*/function () {\n function Renderer(currentSnapshot, newSnapshot, isPreview) {\n var _this7 = this;\n\n _classCallCheck(this, Renderer);\n\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.promise = new Promise(function (resolve, reject) {\n return _this7.resolvingFunctions = {\n resolve: resolve,\n reject: reject\n };\n });\n }\n\n _createClass(Renderer, [{\n key: \"shouldRender\",\n get: function get() {\n return true;\n }\n }, {\n key: \"prepareToRender\",\n value: function prepareToRender() {\n return;\n }\n }, {\n key: \"finishRendering\",\n value: function finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n }, {\n key: \"createScriptElement\",\n value: function createScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n } else {\n var createdScriptElement = document.createElement(\"script\");\n\n if (this.cspNonce) {\n createdScriptElement.nonce = this.cspNonce;\n }\n\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n }\n }, {\n key: \"preservingPermanentElements\",\n value: function preservingPermanentElements(callback) {\n Bardo.preservingPermanentElements(this.permanentElementMap, callback);\n }\n }, {\n key: \"focusFirstAutofocusableElement\",\n value: function focusFirstAutofocusableElement() {\n var element = this.connectedSnapshot.firstAutofocusableElement;\n\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n }, {\n key: \"connectedSnapshot\",\n get: function get() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n }, {\n key: \"currentElement\",\n get: function get() {\n return this.currentSnapshot.element;\n }\n }, {\n key: \"newElement\",\n get: function get() {\n return this.newSnapshot.element;\n }\n }, {\n key: \"permanentElementMap\",\n get: function get() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n }, {\n key: \"cspNonce\",\n get: function get() {\n var _a;\n\n return (_a = document.head.querySelector('meta[name=\"csp-nonce\"]')) === null || _a === void 0 ? void 0 : _a.getAttribute(\"content\");\n }\n }]);\n\n return Renderer;\n}();\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (var _i2 = 0, _arr2 = _toConsumableArray(sourceElement.attributes); _i2 < _arr2.length; _i2++) {\n var _ref9 = _arr2[_i2];\n var name = _ref9.name;\n var value = _ref9.value;\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nvar FrameRenderer = /*#__PURE__*/function (_Renderer) {\n _inherits(FrameRenderer, _Renderer);\n\n var _super3 = _createSuper(FrameRenderer);\n\n function FrameRenderer() {\n _classCallCheck(this, FrameRenderer);\n\n return _super3.apply(this, arguments);\n }\n\n _createClass(FrameRenderer, [{\n key: \"shouldRender\",\n get: function get() {\n return true;\n }\n }, {\n key: \"render\",\n value: function () {\n var _render2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {\n var _this8 = this;\n\n return _regeneratorRuntime.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _context7.next = 2;\n return nextAnimationFrame();\n\n case 2:\n this.preservingPermanentElements(function () {\n _this8.loadFrameElement();\n });\n this.scrollFrameIntoView();\n _context7.next = 6;\n return nextAnimationFrame();\n\n case 6:\n this.focusFirstAutofocusableElement();\n _context7.next = 9;\n return nextAnimationFrame();\n\n case 9:\n this.activateScriptElements();\n\n case 10:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n function render() {\n return _render2.apply(this, arguments);\n }\n\n return render;\n }()\n }, {\n key: \"loadFrameElement\",\n value: function loadFrameElement() {\n var _a;\n\n var destinationRange = document.createRange();\n destinationRange.selectNodeContents(this.currentElement);\n destinationRange.deleteContents();\n var frameElement = this.newElement;\n var sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n this.currentElement.appendChild(sourceRange.extractContents());\n }\n }\n }, {\n key: \"scrollFrameIntoView\",\n value: function scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n var element = this.currentElement.firstElementChild;\n var block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n\n if (element) {\n element.scrollIntoView({\n block: block\n });\n return true;\n }\n }\n\n return false;\n }\n }, {\n key: \"activateScriptElements\",\n value: function activateScriptElements() {\n var _iterator4 = _createForOfIteratorHelper(this.newScriptElements),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var inertScriptElement = _step4.value;\n var activatedScriptElement = this.createScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n }, {\n key: \"newScriptElements\",\n get: function get() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n }]);\n\n return FrameRenderer;\n}(Renderer);\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n } else {\n return defaultValue;\n }\n}\n\nvar ProgressBar = /*#__PURE__*/function () {\n function ProgressBar() {\n var _this9 = this;\n\n _classCallCheck(this, ProgressBar);\n\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n\n this.trickle = function () {\n _this9.setValue(_this9.value + Math.random() / 100);\n };\n\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n _createClass(ProgressBar, [{\n key: \"show\",\n value: function show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n }, {\n key: \"hide\",\n value: function hide() {\n var _this10 = this;\n\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(function () {\n _this10.uninstallProgressElement();\n\n _this10.stopTrickling();\n\n _this10.visible = false;\n _this10.hiding = false;\n });\n }\n }\n }, {\n key: \"setValue\",\n value: function setValue(value) {\n this.value = value;\n this.refresh();\n }\n }, {\n key: \"installStylesheetElement\",\n value: function installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n }, {\n key: \"installProgressElement\",\n value: function installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n }, {\n key: \"fadeProgressElement\",\n value: function fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n }, {\n key: \"uninstallProgressElement\",\n value: function uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n }, {\n key: \"startTrickling\",\n value: function startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n }, {\n key: \"stopTrickling\",\n value: function stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n }, {\n key: \"refresh\",\n value: function refresh() {\n var _this11 = this;\n\n requestAnimationFrame(function () {\n _this11.progressElement.style.width = \"\".concat(10 + _this11.value * 90, \"%\");\n });\n }\n }, {\n key: \"createStylesheetElement\",\n value: function createStylesheetElement() {\n var element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n return element;\n }\n }, {\n key: \"createProgressElement\",\n value: function createProgressElement() {\n var element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n }], [{\n key: \"defaultCSS\",\n get: function get() {\n return unindent(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n .turbo-progress-bar {\\n position: fixed;\\n display: block;\\n top: 0;\\n left: 0;\\n height: 3px;\\n background: #0076ff;\\n z-index: 9999;\\n transition:\\n width \", \"ms ease-out,\\n opacity \", \"ms \", \"ms ease-in;\\n transform: translate3d(0, 0, 0);\\n }\\n \"])), ProgressBar.animationDuration, ProgressBar.animationDuration / 2, ProgressBar.animationDuration / 2);\n }\n }]);\n\n return ProgressBar;\n}();\n\nProgressBar.animationDuration = 300;\n\nvar HeadSnapshot = /*#__PURE__*/function (_Snapshot) {\n _inherits(HeadSnapshot, _Snapshot);\n\n var _super4 = _createSuper(HeadSnapshot);\n\n function HeadSnapshot() {\n var _this12;\n\n _classCallCheck(this, HeadSnapshot);\n\n _this12 = _super4.apply(this, arguments);\n _this12.detailsByOuterHTML = _this12.children.filter(function (element) {\n return !elementIsNoscript(element);\n }).map(function (element) {\n return elementWithoutNonce(element);\n }).reduce(function (result, element) {\n var outerHTML = element.outerHTML;\n var details = outerHTML in result ? result[outerHTML] : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return Object.assign(Object.assign({}, result), _defineProperty({}, outerHTML, Object.assign(Object.assign({}, details), {\n elements: [].concat(_toConsumableArray(details.elements), [element])\n })));\n }, {});\n return _this12;\n }\n\n _createClass(HeadSnapshot, [{\n key: \"trackedElementSignature\",\n get: function get() {\n var _this13 = this;\n\n return Object.keys(this.detailsByOuterHTML).filter(function (outerHTML) {\n return _this13.detailsByOuterHTML[outerHTML].tracked;\n }).join(\"\");\n }\n }, {\n key: \"getScriptElementsNotInSnapshot\",\n value: function getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n }, {\n key: \"getStylesheetElementsNotInSnapshot\",\n value: function getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n }, {\n key: \"getElementsMatchingTypeNotInSnapshot\",\n value: function getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n var _this14 = this;\n\n return Object.keys(this.detailsByOuterHTML).filter(function (outerHTML) {\n return !(outerHTML in snapshot.detailsByOuterHTML);\n }).map(function (outerHTML) {\n return _this14.detailsByOuterHTML[outerHTML];\n }).filter(function (_ref10) {\n var type = _ref10.type;\n return type == matchedType;\n }).map(function (_ref11) {\n var _ref11$elements = _slicedToArray(_ref11.elements, 1),\n element = _ref11$elements[0];\n\n return element;\n });\n }\n }, {\n key: \"provisionalElements\",\n get: function get() {\n var _this15 = this;\n\n return Object.keys(this.detailsByOuterHTML).reduce(function (result, outerHTML) {\n var _this15$detailsByOute = _this15.detailsByOuterHTML[outerHTML],\n type = _this15$detailsByOute.type,\n tracked = _this15$detailsByOute.tracked,\n elements = _this15$detailsByOute.elements;\n\n if (type == null && !tracked) {\n return [].concat(_toConsumableArray(result), _toConsumableArray(elements));\n } else if (elements.length > 1) {\n return [].concat(_toConsumableArray(result), _toConsumableArray(elements.slice(1)));\n } else {\n return result;\n }\n }, []);\n }\n }, {\n key: \"getMetaValue\",\n value: function getMetaValue(name) {\n var element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n }, {\n key: \"findMetaElementByName\",\n value: function findMetaElementByName(name) {\n var _this16 = this;\n\n return Object.keys(this.detailsByOuterHTML).reduce(function (result, outerHTML) {\n var _this16$detailsByOute = _slicedToArray(_this16.detailsByOuterHTML[outerHTML].elements, 1),\n element = _this16$detailsByOute[0];\n\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n }]);\n\n return HeadSnapshot;\n}(Snapshot);\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\n\nfunction elementIsScript(element) {\n var tagName = element.tagName.toLowerCase();\n return tagName == \"script\";\n}\n\nfunction elementIsNoscript(element) {\n var tagName = element.tagName.toLowerCase();\n return tagName == \"noscript\";\n}\n\nfunction elementIsStylesheet(element) {\n var tagName = element.tagName.toLowerCase();\n return tagName == \"style\" || tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\";\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n var tagName = element.tagName.toLowerCase();\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element;\n}\n\nvar PageSnapshot = /*#__PURE__*/function (_Snapshot2) {\n _inherits(PageSnapshot, _Snapshot2);\n\n var _super5 = _createSuper(PageSnapshot);\n\n function PageSnapshot(element, headSnapshot) {\n var _this17;\n\n _classCallCheck(this, PageSnapshot);\n\n _this17 = _super5.call(this, element);\n _this17.headSnapshot = headSnapshot;\n return _this17;\n }\n\n _createClass(PageSnapshot, [{\n key: \"clone\",\n value: function clone() {\n return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot);\n }\n }, {\n key: \"headElement\",\n get: function get() {\n return this.headSnapshot.element;\n }\n }, {\n key: \"rootLocation\",\n get: function get() {\n var _a;\n\n var root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n }, {\n key: \"cacheControlValue\",\n get: function get() {\n return this.getSetting(\"cache-control\");\n }\n }, {\n key: \"isPreviewable\",\n get: function get() {\n return this.cacheControlValue != \"no-preview\";\n }\n }, {\n key: \"isCacheable\",\n get: function get() {\n return this.cacheControlValue != \"no-cache\";\n }\n }, {\n key: \"isVisitable\",\n get: function get() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n }, {\n key: \"getSetting\",\n value: function getSetting(name) {\n return this.headSnapshot.getMetaValue(\"turbo-\".concat(name));\n }\n }], [{\n key: \"fromHTMLString\",\n value: function fromHTMLString() {\n var html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n return this.fromDocument(parseHTMLDocument(html));\n }\n }, {\n key: \"fromElement\",\n value: function fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n }, {\n key: \"fromDocument\",\n value: function fromDocument(_ref12) {\n var head = _ref12.head,\n body = _ref12.body;\n return new this(body, new HeadSnapshot(head));\n }\n }]);\n\n return PageSnapshot;\n}(Snapshot);\n\nvar TimingMetric;\n\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\n\nvar VisitState;\n\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\n\nvar defaultOptions = {\n action: \"advance\",\n historyChanged: false\n};\nvar SystemStatusCode;\n\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\n\nvar Visit = /*#__PURE__*/function () {\n function Visit(delegate, location, restorationIdentifier) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Visit);\n\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n var _Object$assign2 = Object.assign(Object.assign({}, defaultOptions), options),\n action = _Object$assign2.action,\n historyChanged = _Object$assign2.historyChanged,\n referrer = _Object$assign2.referrer,\n snapshotHTML = _Object$assign2.snapshotHTML,\n response = _Object$assign2.response;\n\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n }\n\n _createClass(Visit, [{\n key: \"adapter\",\n get: function get() {\n return this.delegate.adapter;\n }\n }, {\n key: \"view\",\n get: function get() {\n return this.delegate.view;\n }\n }, {\n key: \"history\",\n get: function get() {\n return this.delegate.history;\n }\n }, {\n key: \"restorationData\",\n get: function get() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n }, {\n key: \"silent\",\n get: function get() {\n return this.isSamePage;\n }\n }, {\n key: \"start\",\n value: function start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n }, {\n key: \"complete\",\n value: function complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n this.followRedirect();\n }\n }\n }, {\n key: \"fail\",\n value: function fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n }, {\n key: \"changeHistory\",\n value: function changeHistory() {\n var _a;\n\n if (!this.historyChanged) {\n var actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n var method = this.getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n }, {\n key: \"issueRequest\",\n value: function issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n }, {\n key: \"simulateRequest\",\n value: function simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n }, {\n key: \"startRequest\",\n value: function startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n }, {\n key: \"recordResponse\",\n value: function recordResponse() {\n var response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.response;\n this.response = response;\n\n if (response) {\n var statusCode = response.statusCode;\n\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n }, {\n key: \"finishRequest\",\n value: function finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n }, {\n key: \"loadResponse\",\n value: function loadResponse() {\n var _this18 = this;\n\n if (this.response) {\n var _this$response = this.response,\n statusCode = _this$response.statusCode,\n responseHTML = _this$response.responseHTML;\n this.render( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8() {\n return _regeneratorRuntime.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n _this18.cacheSnapshot();\n\n if (!_this18.view.renderPromise) {\n _context8.next = 4;\n break;\n }\n\n _context8.next = 4;\n return _this18.view.renderPromise;\n\n case 4:\n if (!(isSuccessful(statusCode) && responseHTML != null)) {\n _context8.next = 11;\n break;\n }\n\n _context8.next = 7;\n return _this18.view.renderPage(PageSnapshot.fromHTMLString(responseHTML));\n\n case 7:\n _this18.adapter.visitRendered(_this18);\n\n _this18.complete();\n\n _context8.next = 15;\n break;\n\n case 11:\n _context8.next = 13;\n return _this18.view.renderError(PageSnapshot.fromHTMLString(responseHTML));\n\n case 13:\n _this18.adapter.visitRendered(_this18);\n\n _this18.fail();\n\n case 15:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n })));\n }\n }\n }, {\n key: \"getCachedSnapshot\",\n value: function getCachedSnapshot() {\n var snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n }, {\n key: \"getPreloadedSnapshot\",\n value: function getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n }, {\n key: \"hasCachedSnapshot\",\n value: function hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n }, {\n key: \"loadCachedSnapshot\",\n value: function loadCachedSnapshot() {\n var _this19 = this;\n\n var snapshot = this.getCachedSnapshot();\n\n if (snapshot) {\n var isPreview = this.shouldIssueRequest();\n this.render( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {\n return _regeneratorRuntime.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n _this19.cacheSnapshot();\n\n if (!_this19.isSamePage) {\n _context9.next = 5;\n break;\n }\n\n _this19.adapter.visitRendered(_this19);\n\n _context9.next = 12;\n break;\n\n case 5:\n if (!_this19.view.renderPromise) {\n _context9.next = 8;\n break;\n }\n\n _context9.next = 8;\n return _this19.view.renderPromise;\n\n case 8:\n _context9.next = 10;\n return _this19.view.renderPage(snapshot, isPreview);\n\n case 10:\n _this19.adapter.visitRendered(_this19);\n\n if (!isPreview) {\n _this19.complete();\n }\n\n case 12:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9);\n })));\n }\n }\n }, {\n key: \"followRedirect\",\n value: function followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: 'replace',\n response: this.response\n });\n this.followedRedirect = true;\n }\n }\n }, {\n key: \"goToSamePageAnchor\",\n value: function goToSamePageAnchor() {\n var _this20 = this;\n\n if (this.isSamePage) {\n this.render( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {\n return _regeneratorRuntime.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n _this20.cacheSnapshot();\n\n _this20.adapter.visitRendered(_this20);\n\n case 2:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10);\n })));\n }\n }\n }, {\n key: \"requestStarted\",\n value: function requestStarted() {\n this.startRequest();\n }\n }, {\n key: \"requestPreventedHandlingResponse\",\n value: function requestPreventedHandlingResponse(request, response) {}\n }, {\n key: \"requestSucceededWithResponse\",\n value: function () {\n var _requestSucceededWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11(request, response) {\n var responseHTML;\n return _regeneratorRuntime.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n _context11.next = 2;\n return response.responseHTML;\n\n case 2:\n responseHTML = _context11.sent;\n\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({\n statusCode: response.statusCode,\n responseHTML: responseHTML\n });\n }\n\n case 4:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n function requestSucceededWithResponse(_x5, _x6) {\n return _requestSucceededWithResponse.apply(this, arguments);\n }\n\n return requestSucceededWithResponse;\n }()\n }, {\n key: \"requestFailedWithResponse\",\n value: function () {\n var _requestFailedWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12(request, response) {\n var responseHTML;\n return _regeneratorRuntime.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n _context12.next = 2;\n return response.responseHTML;\n\n case 2:\n responseHTML = _context12.sent;\n\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch\n });\n } else {\n this.recordResponse({\n statusCode: response.statusCode,\n responseHTML: responseHTML\n });\n }\n\n case 4:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12, this);\n }));\n\n function requestFailedWithResponse(_x7, _x8) {\n return _requestFailedWithResponse.apply(this, arguments);\n }\n\n return requestFailedWithResponse;\n }()\n }, {\n key: \"requestErrored\",\n value: function requestErrored(request, error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure\n });\n }\n }, {\n key: \"requestFinished\",\n value: function requestFinished() {\n this.finishRequest();\n }\n }, {\n key: \"performScroll\",\n value: function performScroll() {\n if (!this.scrolled) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n }, {\n key: \"scrollToRestoredPosition\",\n value: function scrollToRestoredPosition() {\n var scrollPosition = this.restorationData.scrollPosition;\n\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n }, {\n key: \"scrollToAnchor\",\n value: function scrollToAnchor() {\n var anchor = getAnchor(this.location);\n\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n }, {\n key: \"recordTimingMetric\",\n value: function recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n }, {\n key: \"getTimingMetrics\",\n value: function getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n }, {\n key: \"getHistoryMethodForAction\",\n value: function getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n }\n }, {\n key: \"hasPreloadedResponse\",\n value: function hasPreloadedResponse() {\n return _typeof(this.response) == \"object\";\n }\n }, {\n key: \"shouldIssueRequest\",\n value: function shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n } else {\n return true;\n }\n }\n }, {\n key: \"cacheSnapshot\",\n value: function cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot();\n this.snapshotCached = true;\n }\n }\n }, {\n key: \"render\",\n value: function () {\n var _render3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(callback) {\n var _this21 = this;\n\n return _regeneratorRuntime.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n this.cancelRender();\n _context13.next = 3;\n return new Promise(function (resolve) {\n _this21.frame = requestAnimationFrame(function () {\n return resolve();\n });\n });\n\n case 3:\n _context13.next = 5;\n return callback();\n\n case 5:\n delete this.frame;\n this.performScroll();\n\n case 7:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13, this);\n }));\n\n function render(_x9) {\n return _render3.apply(this, arguments);\n }\n\n return render;\n }()\n }, {\n key: \"cancelRender\",\n value: function cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n }]);\n\n return Visit;\n}();\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nvar BrowserAdapter = /*#__PURE__*/function () {\n function BrowserAdapter(session) {\n var _this22 = this;\n\n _classCallCheck(this, BrowserAdapter);\n\n this.progressBar = new ProgressBar();\n\n this.showProgressBar = function () {\n _this22.progressBar.show();\n };\n\n this.session = session;\n }\n\n _createClass(BrowserAdapter, [{\n key: \"visitProposedToLocation\",\n value: function visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, uuid(), options);\n }\n }, {\n key: \"visitStarted\",\n value: function visitStarted(visit) {\n visit.issueRequest();\n visit.changeHistory();\n visit.goToSamePageAnchor();\n visit.loadCachedSnapshot();\n }\n }, {\n key: \"visitRequestStarted\",\n value: function visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n }, {\n key: \"visitRequestCompleted\",\n value: function visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n }, {\n key: \"visitRequestFailedWithStatusCode\",\n value: function visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload();\n\n default:\n return visit.loadResponse();\n }\n }\n }, {\n key: \"visitRequestFinished\",\n value: function visitRequestFinished(visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n }, {\n key: \"visitCompleted\",\n value: function visitCompleted(visit) {}\n }, {\n key: \"pageInvalidated\",\n value: function pageInvalidated() {\n this.reload();\n }\n }, {\n key: \"visitFailed\",\n value: function visitFailed(visit) {}\n }, {\n key: \"visitRendered\",\n value: function visitRendered(visit) {}\n }, {\n key: \"formSubmissionStarted\",\n value: function formSubmissionStarted(formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n }, {\n key: \"formSubmissionFinished\",\n value: function formSubmissionFinished(formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n }, {\n key: \"showVisitProgressBarAfterDelay\",\n value: function showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }, {\n key: \"hideVisitProgressBar\",\n value: function hideVisitProgressBar() {\n this.progressBar.hide();\n\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n }, {\n key: \"showFormProgressBarAfterDelay\",\n value: function showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n }, {\n key: \"hideFormProgressBar\",\n value: function hideFormProgressBar() {\n this.progressBar.hide();\n\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n }, {\n key: \"reload\",\n value: function reload() {\n window.location.reload();\n }\n }, {\n key: \"navigator\",\n get: function get() {\n return this.session.navigator;\n }\n }]);\n\n return BrowserAdapter;\n}();\n\nvar CacheObserver = /*#__PURE__*/function () {\n function CacheObserver() {\n _classCallCheck(this, CacheObserver);\n\n this.started = false;\n }\n\n _createClass(CacheObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n }, {\n key: \"removeStaleElements\",\n value: function removeStaleElements() {\n var staleElements = _toConsumableArray(document.querySelectorAll('[data-turbo-cache=\"false\"]'));\n\n var _iterator5 = _createForOfIteratorHelper(staleElements),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var element = _step5.value;\n element.remove();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n }\n }]);\n\n return CacheObserver;\n}();\n\nvar FormSubmitObserver = /*#__PURE__*/function () {\n function FormSubmitObserver(delegate) {\n var _this23 = this;\n\n _classCallCheck(this, FormSubmitObserver);\n\n this.started = false;\n\n this.submitCaptured = function () {\n removeEventListener(\"submit\", _this23.submitBubbled, false);\n addEventListener(\"submit\", _this23.submitBubbled, false);\n };\n\n this.submitBubbled = function (event) {\n if (!event.defaultPrevented) {\n var form = event.target instanceof HTMLFormElement ? event.target : undefined;\n var submitter = event.submitter || undefined;\n\n if (form) {\n var method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.method;\n\n if (method != \"dialog\" && _this23.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n\n _this23.delegate.formSubmitted(form, submitter);\n }\n }\n }\n };\n\n this.delegate = delegate;\n }\n\n _createClass(FormSubmitObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n }]);\n\n return FormSubmitObserver;\n}();\n\nvar FrameRedirector = /*#__PURE__*/function () {\n function FrameRedirector(element) {\n _classCallCheck(this, FrameRedirector);\n\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formInterceptor = new FormInterceptor(this, element);\n }\n\n _createClass(FrameRedirector, [{\n key: \"start\",\n value: function start() {\n this.linkInterceptor.start();\n this.formInterceptor.start();\n }\n }, {\n key: \"stop\",\n value: function stop() {\n this.linkInterceptor.stop();\n this.formInterceptor.stop();\n }\n }, {\n key: \"shouldInterceptLinkClick\",\n value: function shouldInterceptLinkClick(element, url) {\n return this.shouldRedirect(element);\n }\n }, {\n key: \"linkClickIntercepted\",\n value: function linkClickIntercepted(element, url) {\n var frame = this.findFrameElement(element);\n\n if (frame) {\n frame.setAttribute(\"reloadable\", \"\");\n frame.src = url;\n }\n }\n }, {\n key: \"shouldInterceptFormSubmission\",\n value: function shouldInterceptFormSubmission(element, submitter) {\n return this.shouldRedirect(element, submitter);\n }\n }, {\n key: \"formSubmissionIntercepted\",\n value: function formSubmissionIntercepted(element, submitter) {\n var frame = this.findFrameElement(element, submitter);\n\n if (frame) {\n frame.removeAttribute(\"reloadable\");\n frame.delegate.formSubmissionIntercepted(element, submitter);\n }\n }\n }, {\n key: \"shouldRedirect\",\n value: function shouldRedirect(element, submitter) {\n var frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n }, {\n key: \"findFrameElement\",\n value: function findFrameElement(element, submitter) {\n var id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n\n if (id && id != \"_top\") {\n var frame = this.element.querySelector(\"#\".concat(id, \":not([disabled])\"));\n\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n }]);\n\n return FrameRedirector;\n}();\n\nvar History = /*#__PURE__*/function () {\n function History(delegate) {\n var _this24 = this;\n\n _classCallCheck(this, History);\n\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n\n this.onPopState = function (event) {\n if (_this24.shouldHandlePopState()) {\n var _ref16 = event.state || {},\n turbo = _ref16.turbo;\n\n if (turbo) {\n _this24.location = new URL(window.location.href);\n var restorationIdentifier = turbo.restorationIdentifier;\n _this24.restorationIdentifier = restorationIdentifier;\n\n _this24.delegate.historyPoppedToLocationWithRestorationIdentifier(_this24.location, restorationIdentifier);\n }\n }\n };\n\n this.onPageLoad = /*#__PURE__*/function () {\n var _ref17 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(event) {\n return _regeneratorRuntime.wrap(function _callee14$(_context14) {\n while (1) {\n switch (_context14.prev = _context14.next) {\n case 0:\n _context14.next = 2;\n return nextMicrotask();\n\n case 2:\n _this24.pageLoaded = true;\n\n case 3:\n case \"end\":\n return _context14.stop();\n }\n }\n }, _callee14);\n }));\n\n return function (_x10) {\n return _ref17.apply(this, arguments);\n };\n }();\n\n this.delegate = delegate;\n }\n\n _createClass(History, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n }, {\n key: \"push\",\n value: function push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n }, {\n key: \"replace\",\n value: function replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n }, {\n key: \"update\",\n value: function update(method, location) {\n var restorationIdentifier = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : uuid();\n var state = {\n turbo: {\n restorationIdentifier: restorationIdentifier\n }\n };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n }, {\n key: \"getRestorationDataForIdentifier\",\n value: function getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n }, {\n key: \"updateRestorationData\",\n value: function updateRestorationData(additionalData) {\n var restorationIdentifier = this.restorationIdentifier;\n var restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n }, {\n key: \"assumeControlOfScrollRestoration\",\n value: function assumeControlOfScrollRestoration() {\n var _a;\n\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n }, {\n key: \"relinquishControlOfScrollRestoration\",\n value: function relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n }, {\n key: \"shouldHandlePopState\",\n value: function shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n }, {\n key: \"pageIsLoaded\",\n value: function pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n }]);\n\n return History;\n}();\n\nvar LinkClickObserver = /*#__PURE__*/function () {\n function LinkClickObserver(delegate) {\n var _this25 = this;\n\n _classCallCheck(this, LinkClickObserver);\n\n this.started = false;\n\n this.clickCaptured = function () {\n removeEventListener(\"click\", _this25.clickBubbled, false);\n addEventListener(\"click\", _this25.clickBubbled, false);\n };\n\n this.clickBubbled = function (event) {\n if (_this25.clickEventIsSignificant(event)) {\n var target = event.composedPath && event.composedPath()[0] || event.target;\n\n var link = _this25.findLinkFromClickTarget(target);\n\n if (link) {\n var _location = _this25.getLocationForLink(link);\n\n if (_this25.delegate.willFollowLinkToLocation(link, _location)) {\n event.preventDefault();\n\n _this25.delegate.followedLinkToLocation(link, _location);\n }\n }\n }\n };\n\n this.delegate = delegate;\n }\n\n _createClass(LinkClickObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n }, {\n key: \"clickEventIsSignificant\",\n value: function clickEventIsSignificant(event) {\n return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n }\n }, {\n key: \"findLinkFromClickTarget\",\n value: function findLinkFromClickTarget(target) {\n if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\");\n }\n }\n }, {\n key: \"getLocationForLink\",\n value: function getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n }]);\n\n return LinkClickObserver;\n}();\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nvar Navigator = /*#__PURE__*/function () {\n function Navigator(delegate) {\n _classCallCheck(this, Navigator);\n\n this.delegate = delegate;\n }\n\n _createClass(Navigator, [{\n key: \"proposeVisit\",\n value: function proposeVisit(location) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n }, {\n key: \"startVisit\",\n value: function startVisit(locatable, restorationIdentifier) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({\n referrer: this.location\n }, options));\n this.currentVisit.start();\n }\n }, {\n key: \"submitForm\",\n value: function submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n if (this.formSubmission.isIdempotent) {\n this.proposeVisit(this.formSubmission.fetchRequest.url, {\n action: this.getActionForFormSubmission(this.formSubmission)\n });\n } else {\n this.formSubmission.start();\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n }, {\n key: \"adapter\",\n get: function get() {\n return this.delegate.adapter;\n }\n }, {\n key: \"view\",\n get: function get() {\n return this.delegate.view;\n }\n }, {\n key: \"history\",\n get: function get() {\n return this.delegate.history;\n }\n }, {\n key: \"formSubmissionStarted\",\n value: function formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === 'function') {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n }, {\n key: \"formSubmissionSucceededWithResponse\",\n value: function () {\n var _formSubmissionSucceededWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(formSubmission, fetchResponse) {\n var responseHTML, statusCode, visitOptions;\n return _regeneratorRuntime.wrap(function _callee15$(_context15) {\n while (1) {\n switch (_context15.prev = _context15.next) {\n case 0:\n if (!(formSubmission == this.formSubmission)) {\n _context15.next = 5;\n break;\n }\n\n _context15.next = 3;\n return fetchResponse.responseHTML;\n\n case 3:\n responseHTML = _context15.sent;\n\n if (responseHTML) {\n if (formSubmission.method != FetchMethod.get) {\n this.view.clearSnapshotCache();\n }\n\n statusCode = fetchResponse.statusCode;\n visitOptions = {\n response: {\n statusCode: statusCode,\n responseHTML: responseHTML\n }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n\n case 5:\n case \"end\":\n return _context15.stop();\n }\n }\n }, _callee15, this);\n }));\n\n function formSubmissionSucceededWithResponse(_x11, _x12) {\n return _formSubmissionSucceededWithResponse.apply(this, arguments);\n }\n\n return formSubmissionSucceededWithResponse;\n }()\n }, {\n key: \"formSubmissionFailedWithResponse\",\n value: function () {\n var _formSubmissionFailedWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(formSubmission, fetchResponse) {\n var responseHTML, snapshot;\n return _regeneratorRuntime.wrap(function _callee16$(_context16) {\n while (1) {\n switch (_context16.prev = _context16.next) {\n case 0:\n _context16.next = 2;\n return fetchResponse.responseHTML;\n\n case 2:\n responseHTML = _context16.sent;\n\n if (!responseHTML) {\n _context16.next = 14;\n break;\n }\n\n snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n if (!fetchResponse.serverError) {\n _context16.next = 10;\n break;\n }\n\n _context16.next = 8;\n return this.view.renderError(snapshot);\n\n case 8:\n _context16.next = 12;\n break;\n\n case 10:\n _context16.next = 12;\n return this.view.renderPage(snapshot);\n\n case 12:\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n\n case 14:\n case \"end\":\n return _context16.stop();\n }\n }\n }, _callee16, this);\n }));\n\n function formSubmissionFailedWithResponse(_x13, _x14) {\n return _formSubmissionFailedWithResponse.apply(this, arguments);\n }\n\n return formSubmissionFailedWithResponse;\n }()\n }, {\n key: \"formSubmissionErrored\",\n value: function formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n }, {\n key: \"formSubmissionFinished\",\n value: function formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === 'function') {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n }, {\n key: \"visitStarted\",\n value: function visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n }, {\n key: \"visitCompleted\",\n value: function visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n }, {\n key: \"locationWithActionIsSamePage\",\n value: function locationWithActionIsSamePage(location, action) {\n var anchor = getAnchor(location);\n var currentAnchor = getAnchor(this.view.lastRenderedLocation);\n var isRestorationToTop = action === 'restore' && typeof anchor === 'undefined';\n return action !== \"replace\" && getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) && (isRestorationToTop || anchor != null && anchor !== currentAnchor);\n }\n }, {\n key: \"visitScrolledToSamePageLocation\",\n value: function visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n }, {\n key: \"location\",\n get: function get() {\n return this.history.location;\n }\n }, {\n key: \"restorationIdentifier\",\n get: function get() {\n return this.history.restorationIdentifier;\n }\n }, {\n key: \"getActionForFormSubmission\",\n value: function getActionForFormSubmission(formSubmission) {\n var formElement = formSubmission.formElement,\n submitter = formSubmission.submitter;\n var action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-action\")) || formElement.getAttribute(\"data-turbo-action\");\n return isAction(action) ? action : \"advance\";\n }\n }]);\n\n return Navigator;\n}();\n\nvar PageStage;\n\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\n\nvar PageObserver = /*#__PURE__*/function () {\n function PageObserver(delegate) {\n var _this26 = this;\n\n _classCallCheck(this, PageObserver);\n\n this.stage = PageStage.initial;\n this.started = false;\n\n this.interpretReadyState = function () {\n var readyState = _this26.readyState;\n\n if (readyState == \"interactive\") {\n _this26.pageIsInteractive();\n } else if (readyState == \"complete\") {\n _this26.pageIsComplete();\n }\n };\n\n this.pageWillUnload = function () {\n _this26.delegate.pageWillUnload();\n };\n\n this.delegate = delegate;\n }\n\n _createClass(PageObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n }, {\n key: \"pageIsInteractive\",\n value: function pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n }, {\n key: \"pageIsComplete\",\n value: function pageIsComplete() {\n this.pageIsInteractive();\n\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n }, {\n key: \"readyState\",\n get: function get() {\n return document.readyState;\n }\n }]);\n\n return PageObserver;\n}();\n\nvar ScrollObserver = /*#__PURE__*/function () {\n function ScrollObserver(delegate) {\n var _this27 = this;\n\n _classCallCheck(this, ScrollObserver);\n\n this.started = false;\n\n this.onScroll = function () {\n _this27.updatePosition({\n x: window.pageXOffset,\n y: window.pageYOffset\n });\n };\n\n this.delegate = delegate;\n }\n\n _createClass(ScrollObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n }, {\n key: \"updatePosition\",\n value: function updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n }]);\n\n return ScrollObserver;\n}();\n\nvar StreamObserver = /*#__PURE__*/function () {\n function StreamObserver(delegate) {\n var _this28 = this;\n\n _classCallCheck(this, StreamObserver);\n\n this.sources = new Set();\n this.started = false;\n\n this.inspectFetchResponse = function (event) {\n var response = fetchResponseFromEvent(event);\n\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n\n _this28.receiveMessageResponse(response);\n }\n };\n\n this.receiveMessageEvent = function (event) {\n if (_this28.started && typeof event.data == \"string\") {\n _this28.receiveMessageHTML(event.data);\n }\n };\n\n this.delegate = delegate;\n }\n\n _createClass(StreamObserver, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n }, {\n key: \"connectStreamSource\",\n value: function connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n }, {\n key: \"disconnectStreamSource\",\n value: function disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n }, {\n key: \"streamSourceIsConnected\",\n value: function streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n }, {\n key: \"receiveMessageResponse\",\n value: function () {\n var _receiveMessageResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(response) {\n var html;\n return _regeneratorRuntime.wrap(function _callee17$(_context17) {\n while (1) {\n switch (_context17.prev = _context17.next) {\n case 0:\n _context17.next = 2;\n return response.responseHTML;\n\n case 2:\n html = _context17.sent;\n\n if (html) {\n this.receiveMessageHTML(html);\n }\n\n case 4:\n case \"end\":\n return _context17.stop();\n }\n }\n }, _callee17, this);\n }));\n\n function receiveMessageResponse(_x15) {\n return _receiveMessageResponse.apply(this, arguments);\n }\n\n return receiveMessageResponse;\n }()\n }, {\n key: \"receiveMessageHTML\",\n value: function receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(new StreamMessage(html));\n }\n }]);\n\n return StreamObserver;\n}();\n\nfunction fetchResponseFromEvent(event) {\n var _a;\n\n var fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\n\nfunction fetchResponseIsStream(response) {\n var _a;\n\n var contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nvar ErrorRenderer = /*#__PURE__*/function (_Renderer2) {\n _inherits(ErrorRenderer, _Renderer2);\n\n var _super6 = _createSuper(ErrorRenderer);\n\n function ErrorRenderer() {\n _classCallCheck(this, ErrorRenderer);\n\n return _super6.apply(this, arguments);\n }\n\n _createClass(ErrorRenderer, [{\n key: \"render\",\n value: function () {\n var _render4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18() {\n return _regeneratorRuntime.wrap(function _callee18$(_context18) {\n while (1) {\n switch (_context18.prev = _context18.next) {\n case 0:\n this.replaceHeadAndBody();\n this.activateScriptElements();\n\n case 2:\n case \"end\":\n return _context18.stop();\n }\n }\n }, _callee18, this);\n }));\n\n function render() {\n return _render4.apply(this, arguments);\n }\n\n return render;\n }()\n }, {\n key: \"replaceHeadAndBody\",\n value: function replaceHeadAndBody() {\n var _document = document,\n documentElement = _document.documentElement,\n head = _document.head,\n body = _document.body;\n documentElement.replaceChild(this.newHead, head);\n documentElement.replaceChild(this.newElement, body);\n }\n }, {\n key: \"activateScriptElements\",\n value: function activateScriptElements() {\n var _iterator6 = _createForOfIteratorHelper(this.scriptElements),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var replaceableElement = _step6.value;\n var parentNode = replaceableElement.parentNode;\n\n if (parentNode) {\n var element = this.createScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n }\n }, {\n key: \"newHead\",\n get: function get() {\n return this.newSnapshot.headSnapshot.element;\n }\n }, {\n key: \"scriptElements\",\n get: function get() {\n return _toConsumableArray(document.documentElement.querySelectorAll(\"script\"));\n }\n }]);\n\n return ErrorRenderer;\n}(Renderer);\n\nvar PageRenderer = /*#__PURE__*/function (_Renderer3) {\n _inherits(PageRenderer, _Renderer3);\n\n var _super7 = _createSuper(PageRenderer);\n\n function PageRenderer() {\n _classCallCheck(this, PageRenderer);\n\n return _super7.apply(this, arguments);\n }\n\n _createClass(PageRenderer, [{\n key: \"shouldRender\",\n get: function get() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n }, {\n key: \"prepareToRender\",\n value: function prepareToRender() {\n this.mergeHead();\n }\n }, {\n key: \"render\",\n value: function () {\n var _render5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19() {\n return _regeneratorRuntime.wrap(function _callee19$(_context19) {\n while (1) {\n switch (_context19.prev = _context19.next) {\n case 0:\n this.replaceBody();\n\n case 1:\n case \"end\":\n return _context19.stop();\n }\n }\n }, _callee19, this);\n }));\n\n function render() {\n return _render5.apply(this, arguments);\n }\n\n return render;\n }()\n }, {\n key: \"finishRendering\",\n value: function finishRendering() {\n _get(_getPrototypeOf(PageRenderer.prototype), \"finishRendering\", this).call(this);\n\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n }, {\n key: \"currentHeadSnapshot\",\n get: function get() {\n return this.currentSnapshot.headSnapshot;\n }\n }, {\n key: \"newHeadSnapshot\",\n get: function get() {\n return this.newSnapshot.headSnapshot;\n }\n }, {\n key: \"newElement\",\n get: function get() {\n return this.newSnapshot.element;\n }\n }, {\n key: \"mergeHead\",\n value: function mergeHead() {\n this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n this.removeCurrentHeadProvisionalElements();\n this.copyNewHeadProvisionalElements();\n }\n }, {\n key: \"replaceBody\",\n value: function replaceBody() {\n var _this29 = this;\n\n this.preservingPermanentElements(function () {\n _this29.activateNewBody();\n\n _this29.assignNewBody();\n });\n }\n }, {\n key: \"trackedElementsAreIdentical\",\n get: function get() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n }, {\n key: \"copyNewHeadStylesheetElements\",\n value: function copyNewHeadStylesheetElements() {\n var _iterator7 = _createForOfIteratorHelper(this.newHeadStylesheetElements),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var element = _step7.value;\n document.head.appendChild(element);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n }\n }, {\n key: \"copyNewHeadScriptElements\",\n value: function copyNewHeadScriptElements() {\n var _iterator8 = _createForOfIteratorHelper(this.newHeadScriptElements),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var element = _step8.value;\n document.head.appendChild(this.createScriptElement(element));\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n }\n }, {\n key: \"removeCurrentHeadProvisionalElements\",\n value: function removeCurrentHeadProvisionalElements() {\n var _iterator9 = _createForOfIteratorHelper(this.currentHeadProvisionalElements),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var element = _step9.value;\n document.head.removeChild(element);\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n }\n }, {\n key: \"copyNewHeadProvisionalElements\",\n value: function copyNewHeadProvisionalElements() {\n var _iterator10 = _createForOfIteratorHelper(this.newHeadProvisionalElements),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var element = _step10.value;\n document.head.appendChild(element);\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n }\n }, {\n key: \"activateNewBody\",\n value: function activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n }, {\n key: \"activateNewBodyScriptElements\",\n value: function activateNewBodyScriptElements() {\n var _iterator11 = _createForOfIteratorHelper(this.newBodyScriptElements),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var inertScriptElement = _step11.value;\n var activatedScriptElement = this.createScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n }, {\n key: \"assignNewBody\",\n value: function assignNewBody() {\n if (document.body && this.newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(this.newElement);\n } else {\n document.documentElement.appendChild(this.newElement);\n }\n }\n }, {\n key: \"newHeadStylesheetElements\",\n get: function get() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n }, {\n key: \"newHeadScriptElements\",\n get: function get() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n }, {\n key: \"currentHeadProvisionalElements\",\n get: function get() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n }, {\n key: \"newHeadProvisionalElements\",\n get: function get() {\n return this.newHeadSnapshot.provisionalElements;\n }\n }, {\n key: \"newBodyScriptElements\",\n get: function get() {\n return this.newElement.querySelectorAll(\"script\");\n }\n }]);\n\n return PageRenderer;\n}(Renderer);\n\nvar SnapshotCache = /*#__PURE__*/function () {\n function SnapshotCache(size) {\n _classCallCheck(this, SnapshotCache);\n\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n\n _createClass(SnapshotCache, [{\n key: \"has\",\n value: function has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n }, {\n key: \"get\",\n value: function get(location) {\n if (this.has(location)) {\n var snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n }, {\n key: \"put\",\n value: function put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.snapshots = {};\n }\n }, {\n key: \"read\",\n value: function read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n }, {\n key: \"write\",\n value: function write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n }, {\n key: \"touch\",\n value: function touch(location) {\n var key = toCacheKey(location);\n var index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n }, {\n key: \"trim\",\n value: function trim() {\n var _iterator12 = _createForOfIteratorHelper(this.keys.splice(this.size)),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var key = _step12.value;\n delete this.snapshots[key];\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n }\n }]);\n\n return SnapshotCache;\n}();\n\nvar PageView = /*#__PURE__*/function (_View2) {\n _inherits(PageView, _View2);\n\n var _super8 = _createSuper(PageView);\n\n function PageView() {\n var _this30;\n\n _classCallCheck(this, PageView);\n\n _this30 = _super8.apply(this, arguments);\n _this30.snapshotCache = new SnapshotCache(10);\n _this30.lastRenderedLocation = new URL(location.href);\n return _this30;\n }\n\n _createClass(PageView, [{\n key: \"renderPage\",\n value: function renderPage(snapshot) {\n var isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var renderer = new PageRenderer(this.snapshot, snapshot, isPreview);\n return this.render(renderer);\n }\n }, {\n key: \"renderError\",\n value: function renderError(snapshot) {\n var renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer);\n }\n }, {\n key: \"clearSnapshotCache\",\n value: function clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n }, {\n key: \"cacheSnapshot\",\n value: function () {\n var _cacheSnapshot = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20() {\n var snapshot, _location2;\n\n return _regeneratorRuntime.wrap(function _callee20$(_context20) {\n while (1) {\n switch (_context20.prev = _context20.next) {\n case 0:\n if (!this.shouldCacheSnapshot) {\n _context20.next = 6;\n break;\n }\n\n this.delegate.viewWillCacheSnapshot();\n snapshot = this.snapshot, _location2 = this.lastRenderedLocation;\n _context20.next = 5;\n return nextEventLoopTick();\n\n case 5:\n this.snapshotCache.put(_location2, snapshot.clone());\n\n case 6:\n case \"end\":\n return _context20.stop();\n }\n }\n }, _callee20, this);\n }));\n\n function cacheSnapshot() {\n return _cacheSnapshot.apply(this, arguments);\n }\n\n return cacheSnapshot;\n }()\n }, {\n key: \"getCachedSnapshotForLocation\",\n value: function getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n }, {\n key: \"snapshot\",\n get: function get() {\n return PageSnapshot.fromElement(this.element);\n }\n }, {\n key: \"shouldCacheSnapshot\",\n get: function get() {\n return this.snapshot.isCacheable;\n }\n }]);\n\n return PageView;\n}(View);\n\nvar Session = /*#__PURE__*/function () {\n function Session() {\n _classCallCheck(this, Session);\n\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this);\n this.formSubmitObserver = new FormSubmitObserver(this);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.frameRedirector = new FrameRedirector(document.documentElement);\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n }\n\n _createClass(Session, [{\n key: \"start\",\n value: function start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.started = true;\n this.enabled = true;\n }\n }\n }, {\n key: \"disable\",\n value: function disable() {\n this.enabled = false;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n }, {\n key: \"registerAdapter\",\n value: function registerAdapter(adapter) {\n this.adapter = adapter;\n }\n }, {\n key: \"visit\",\n value: function visit(location) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }, {\n key: \"connectStreamSource\",\n value: function connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n }, {\n key: \"disconnectStreamSource\",\n value: function disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n }, {\n key: \"renderStreamMessage\",\n value: function renderStreamMessage(message) {\n document.documentElement.appendChild(StreamMessage.wrap(message).fragment);\n }\n }, {\n key: \"clearCache\",\n value: function clearCache() {\n this.view.clearSnapshotCache();\n }\n }, {\n key: \"setProgressBarDelay\",\n value: function setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n }, {\n key: \"location\",\n get: function get() {\n return this.history.location;\n }\n }, {\n key: \"restorationIdentifier\",\n get: function get() {\n return this.history.restorationIdentifier;\n }\n }, {\n key: \"historyPoppedToLocationWithRestorationIdentifier\",\n value: function historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true\n });\n } else {\n this.adapter.pageInvalidated();\n }\n }\n }, {\n key: \"scrollPositionChanged\",\n value: function scrollPositionChanged(position) {\n this.history.updateRestorationData({\n scrollPosition: position\n });\n }\n }, {\n key: \"willFollowLinkToLocation\",\n value: function willFollowLinkToLocation(link, location) {\n return this.elementDriveEnabled(link) && this.locationIsVisitable(location) && this.applicationAllowsFollowingLinkToLocation(link, location);\n }\n }, {\n key: \"followedLinkToLocation\",\n value: function followedLinkToLocation(link, location) {\n var action = this.getActionForLink(link);\n this.convertLinkWithMethodClickToFormSubmission(link) || this.visit(location.href, {\n action: action\n });\n }\n }, {\n key: \"convertLinkWithMethodClickToFormSubmission\",\n value: function convertLinkWithMethodClickToFormSubmission(link) {\n var _a;\n\n var linkMethod = link.getAttribute(\"data-turbo-method\");\n\n if (linkMethod) {\n var form = document.createElement(\"form\");\n form.method = linkMethod;\n form.action = link.getAttribute(\"href\") || \"undefined\";\n form.hidden = true;\n (_a = link.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(form, link);\n return dispatch(\"submit\", {\n cancelable: true,\n target: form\n });\n } else {\n return false;\n }\n }\n }, {\n key: \"allowsVisitingLocationWithAction\",\n value: function allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n }, {\n key: \"visitProposedToLocation\",\n value: function visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n }, {\n key: \"visitStarted\",\n value: function visitStarted(visit) {\n extendURLWithDeprecatedProperties(visit.location);\n\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n }, {\n key: \"visitCompleted\",\n value: function visitCompleted(visit) {\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n }, {\n key: \"locationWithActionIsSamePage\",\n value: function locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n }, {\n key: \"visitScrolledToSamePageLocation\",\n value: function visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n }, {\n key: \"willSubmitForm\",\n value: function willSubmitForm(form, submitter) {\n return this.elementDriveEnabled(form) && (!submitter || this.elementDriveEnabled(submitter));\n }\n }, {\n key: \"formSubmitted\",\n value: function formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n }, {\n key: \"pageBecameInteractive\",\n value: function pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n }, {\n key: \"pageLoaded\",\n value: function pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n }, {\n key: \"pageWillUnload\",\n value: function pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n }, {\n key: \"receivedMessageFromStream\",\n value: function receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n }, {\n key: \"viewWillCacheSnapshot\",\n value: function viewWillCacheSnapshot() {\n var _a;\n\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n }, {\n key: \"allowsImmediateRender\",\n value: function allowsImmediateRender(_ref18, resume) {\n var element = _ref18.element;\n var event = this.notifyApplicationBeforeRender(element, resume);\n return !event.defaultPrevented;\n }\n }, {\n key: \"viewRenderedSnapshot\",\n value: function viewRenderedSnapshot(snapshot, isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n }, {\n key: \"viewInvalidated\",\n value: function viewInvalidated() {\n this.adapter.pageInvalidated();\n }\n }, {\n key: \"frameLoaded\",\n value: function frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n }, {\n key: \"frameRendered\",\n value: function frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n }, {\n key: \"applicationAllowsFollowingLinkToLocation\",\n value: function applicationAllowsFollowingLinkToLocation(link, location) {\n var event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n return !event.defaultPrevented;\n }\n }, {\n key: \"applicationAllowsVisitingLocation\",\n value: function applicationAllowsVisitingLocation(location) {\n var event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n }, {\n key: \"notifyApplicationAfterClickingLinkToLocation\",\n value: function notifyApplicationAfterClickingLinkToLocation(link, location) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: {\n url: location.href\n },\n cancelable: true\n });\n }\n }, {\n key: \"notifyApplicationBeforeVisitingLocation\",\n value: function notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: {\n url: location.href\n },\n cancelable: true\n });\n }\n }, {\n key: \"notifyApplicationAfterVisitingLocation\",\n value: function notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", {\n detail: {\n url: location.href,\n action: action\n }\n });\n }\n }, {\n key: \"notifyApplicationBeforeCachingSnapshot\",\n value: function notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n }, {\n key: \"notifyApplicationBeforeRender\",\n value: function notifyApplicationBeforeRender(newBody, resume) {\n return dispatch(\"turbo:before-render\", {\n detail: {\n newBody: newBody,\n resume: resume\n },\n cancelable: true\n });\n }\n }, {\n key: \"notifyApplicationAfterRender\",\n value: function notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n }, {\n key: \"notifyApplicationAfterPageLoad\",\n value: function notifyApplicationAfterPageLoad() {\n var timing = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return dispatch(\"turbo:load\", {\n detail: {\n url: this.location.href,\n timing: timing\n }\n });\n }\n }, {\n key: \"notifyApplicationAfterVisitingSamePageLocation\",\n value: function notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n }));\n }\n }, {\n key: \"notifyApplicationAfterFrameLoad\",\n value: function notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", {\n target: frame\n });\n }\n }, {\n key: \"notifyApplicationAfterFrameRender\",\n value: function notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: {\n fetchResponse: fetchResponse\n },\n target: frame,\n cancelable: true\n });\n }\n }, {\n key: \"elementDriveEnabled\",\n value: function elementDriveEnabled(element) {\n var container = element === null || element === void 0 ? void 0 : element.closest(\"[data-turbo]\");\n\n if (this.drive) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n } else {\n return true;\n }\n } else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n } else {\n return false;\n }\n }\n }\n }, {\n key: \"getActionForLink\",\n value: function getActionForLink(link) {\n var action = link.getAttribute(\"data-turbo-action\");\n return isAction(action) ? action : \"advance\";\n }\n }, {\n key: \"locationIsVisitable\",\n value: function locationIsVisitable(location) {\n return isPrefixedBy(location, this.snapshot.rootLocation) && isHTML(location);\n }\n }, {\n key: \"snapshot\",\n get: function get() {\n return this.view.snapshot;\n }\n }]);\n\n return Session;\n}();\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nvar deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get: function get() {\n return this.toString();\n }\n }\n};\nvar session = new Session();\nvar navigator$1 = session.navigator;\n\nfunction start() {\n session.start();\n}\n\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\nfunction clearCache() {\n session.clearCache();\n}\n\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay\n});\n\nvar FrameController = /*#__PURE__*/function () {\n function FrameController(element) {\n _classCallCheck(this, FrameController);\n\n this.resolveVisitPromise = function () {};\n\n this.connected = false;\n this.hasBeenLoaded = false;\n this.settingSourceURL = false;\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.formInterceptor = new FormInterceptor(this, this.element);\n }\n\n _createClass(FrameController, [{\n key: \"connect\",\n value: function connect() {\n if (!this.connected) {\n this.connected = true;\n this.reloadable = false;\n\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n\n this.linkInterceptor.start();\n this.formInterceptor.start();\n this.sourceURLChanged();\n }\n }\n }, {\n key: \"disconnect\",\n value: function disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.linkInterceptor.stop();\n this.formInterceptor.stop();\n }\n }\n }, {\n key: \"disabledChanged\",\n value: function disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n }, {\n key: \"sourceURLChanged\",\n value: function sourceURLChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n }, {\n key: \"loadingStyleChanged\",\n value: function loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n }, {\n key: \"loadSourceURL\",\n value: function () {\n var _loadSourceURL = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21() {\n var previousURL;\n return _regeneratorRuntime.wrap(function _callee21$(_context21) {\n while (1) {\n switch (_context21.prev = _context21.next) {\n case 0:\n if (!(!this.settingSourceURL && this.enabled && this.isActive && (this.reloadable || this.sourceURL != this.currentURL))) {\n _context21.next = 17;\n break;\n }\n\n previousURL = this.currentURL;\n this.currentURL = this.sourceURL;\n\n if (!this.sourceURL) {\n _context21.next = 17;\n break;\n }\n\n _context21.prev = 4;\n this.element.loaded = this.visit(this.sourceURL);\n this.appearanceObserver.stop();\n _context21.next = 9;\n return this.element.loaded;\n\n case 9:\n this.hasBeenLoaded = true;\n session.frameLoaded(this.element);\n _context21.next = 17;\n break;\n\n case 13:\n _context21.prev = 13;\n _context21.t0 = _context21[\"catch\"](4);\n this.currentURL = previousURL;\n throw _context21.t0;\n\n case 17:\n case \"end\":\n return _context21.stop();\n }\n }\n }, _callee21, this, [[4, 13]]);\n }));\n\n function loadSourceURL() {\n return _loadSourceURL.apply(this, arguments);\n }\n\n return loadSourceURL;\n }()\n }, {\n key: \"loadResponse\",\n value: function () {\n var _loadResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22(fetchResponse) {\n var html, _parseHTMLDocument, body, snapshot, renderer;\n\n return _regeneratorRuntime.wrap(function _callee22$(_context22) {\n while (1) {\n switch (_context22.prev = _context22.next) {\n case 0:\n if (fetchResponse.redirected) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n _context22.prev = 1;\n _context22.next = 4;\n return fetchResponse.responseHTML;\n\n case 4:\n html = _context22.sent;\n\n if (!html) {\n _context22.next = 19;\n break;\n }\n\n _parseHTMLDocument = parseHTMLDocument(html), body = _parseHTMLDocument.body;\n _context22.t0 = Snapshot;\n _context22.next = 10;\n return this.extractForeignFrameElement(body);\n\n case 10:\n _context22.t1 = _context22.sent;\n snapshot = new _context22.t0(_context22.t1);\n renderer = new FrameRenderer(this.view.snapshot, snapshot, false);\n\n if (!this.view.renderPromise) {\n _context22.next = 16;\n break;\n }\n\n _context22.next = 16;\n return this.view.renderPromise;\n\n case 16:\n _context22.next = 18;\n return this.view.render(renderer);\n\n case 18:\n session.frameRendered(fetchResponse, this.element);\n\n case 19:\n _context22.next = 25;\n break;\n\n case 21:\n _context22.prev = 21;\n _context22.t2 = _context22[\"catch\"](1);\n console.error(_context22.t2);\n this.view.invalidate();\n\n case 25:\n case \"end\":\n return _context22.stop();\n }\n }\n }, _callee22, this, [[1, 21]]);\n }));\n\n function loadResponse(_x16) {\n return _loadResponse.apply(this, arguments);\n }\n\n return loadResponse;\n }()\n }, {\n key: \"elementAppearedInViewport\",\n value: function elementAppearedInViewport(element) {\n this.loadSourceURL();\n }\n }, {\n key: \"shouldInterceptLinkClick\",\n value: function shouldInterceptLinkClick(element, url) {\n if (element.hasAttribute(\"data-turbo-method\")) {\n return false;\n } else {\n return this.shouldInterceptNavigation(element);\n }\n }\n }, {\n key: \"linkClickIntercepted\",\n value: function linkClickIntercepted(element, url) {\n this.reloadable = true;\n this.navigateFrame(element, url);\n }\n }, {\n key: \"shouldInterceptFormSubmission\",\n value: function shouldInterceptFormSubmission(element, submitter) {\n return this.shouldInterceptNavigation(element, submitter);\n }\n }, {\n key: \"formSubmissionIntercepted\",\n value: function formSubmissionIntercepted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.reloadable = false;\n this.formSubmission = new FormSubmission(this, element, submitter);\n\n if (this.formSubmission.fetchRequest.isIdempotent) {\n this.navigateFrame(element, this.formSubmission.fetchRequest.url.href, submitter);\n } else {\n var fetchRequest = this.formSubmission.fetchRequest;\n this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n this.formSubmission.start();\n }\n }\n }, {\n key: \"prepareHeadersForRequest\",\n value: function prepareHeadersForRequest(headers, request) {\n headers[\"Turbo-Frame\"] = this.id;\n }\n }, {\n key: \"requestStarted\",\n value: function requestStarted(request) {\n this.element.setAttribute(\"busy\", \"\");\n }\n }, {\n key: \"requestPreventedHandlingResponse\",\n value: function requestPreventedHandlingResponse(request, response) {\n this.resolveVisitPromise();\n }\n }, {\n key: \"requestSucceededWithResponse\",\n value: function () {\n var _requestSucceededWithResponse2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(request, response) {\n return _regeneratorRuntime.wrap(function _callee23$(_context23) {\n while (1) {\n switch (_context23.prev = _context23.next) {\n case 0:\n _context23.next = 2;\n return this.loadResponse(response);\n\n case 2:\n this.resolveVisitPromise();\n\n case 3:\n case \"end\":\n return _context23.stop();\n }\n }\n }, _callee23, this);\n }));\n\n function requestSucceededWithResponse(_x17, _x18) {\n return _requestSucceededWithResponse2.apply(this, arguments);\n }\n\n return requestSucceededWithResponse;\n }()\n }, {\n key: \"requestFailedWithResponse\",\n value: function requestFailedWithResponse(request, response) {\n console.error(response);\n this.resolveVisitPromise();\n }\n }, {\n key: \"requestErrored\",\n value: function requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n }, {\n key: \"requestFinished\",\n value: function requestFinished(request) {\n this.element.removeAttribute(\"busy\");\n }\n }, {\n key: \"formSubmissionStarted\",\n value: function formSubmissionStarted(formSubmission) {\n var frame = this.findFrameElement(formSubmission.formElement);\n frame.setAttribute(\"busy\", \"\");\n }\n }, {\n key: \"formSubmissionSucceededWithResponse\",\n value: function formSubmissionSucceededWithResponse(formSubmission, response) {\n var frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n }\n }, {\n key: \"formSubmissionFailedWithResponse\",\n value: function formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n }\n }, {\n key: \"formSubmissionErrored\",\n value: function formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n }, {\n key: \"formSubmissionFinished\",\n value: function formSubmissionFinished(formSubmission) {\n var frame = this.findFrameElement(formSubmission.formElement);\n frame.removeAttribute(\"busy\");\n }\n }, {\n key: \"allowsImmediateRender\",\n value: function allowsImmediateRender(snapshot, resume) {\n return true;\n }\n }, {\n key: \"viewRenderedSnapshot\",\n value: function viewRenderedSnapshot(snapshot, isPreview) {}\n }, {\n key: \"viewInvalidated\",\n value: function viewInvalidated() {}\n }, {\n key: \"visit\",\n value: function () {\n var _visit = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(url) {\n var _this31 = this;\n\n var request;\n return _regeneratorRuntime.wrap(function _callee24$(_context24) {\n while (1) {\n switch (_context24.prev = _context24.next) {\n case 0:\n request = new FetchRequest(this, FetchMethod.get, expandURL(url), undefined, this.element);\n return _context24.abrupt(\"return\", new Promise(function (resolve) {\n _this31.resolveVisitPromise = function () {\n _this31.resolveVisitPromise = function () {};\n\n resolve();\n };\n\n request.perform();\n }));\n\n case 2:\n case \"end\":\n return _context24.stop();\n }\n }\n }, _callee24, this);\n }));\n\n function visit(_x19) {\n return _visit.apply(this, arguments);\n }\n\n return visit;\n }()\n }, {\n key: \"navigateFrame\",\n value: function navigateFrame(element, url, submitter) {\n var frame = this.findFrameElement(element, submitter);\n frame.setAttribute(\"reloadable\", \"\");\n frame.src = url;\n }\n }, {\n key: \"findFrameElement\",\n value: function findFrameElement(element, submitter) {\n var _a;\n\n var id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\") || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n }, {\n key: \"extractForeignFrameElement\",\n value: function () {\n var _extractForeignFrameElement = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(container) {\n var element, id;\n return _regeneratorRuntime.wrap(function _callee25$(_context25) {\n while (1) {\n switch (_context25.prev = _context25.next) {\n case 0:\n id = CSS.escape(this.id);\n _context25.prev = 1;\n\n if (!(element = activateElement(container.querySelector(\"turbo-frame#\".concat(id)), this.currentURL))) {\n _context25.next = 4;\n break;\n }\n\n return _context25.abrupt(\"return\", element);\n\n case 4:\n if (!(element = activateElement(container.querySelector(\"turbo-frame[src][recurse~=\".concat(id, \"]\")), this.currentURL))) {\n _context25.next = 10;\n break;\n }\n\n _context25.next = 7;\n return element.loaded;\n\n case 7:\n _context25.next = 9;\n return this.extractForeignFrameElement(element);\n\n case 9:\n return _context25.abrupt(\"return\", _context25.sent);\n\n case 10:\n console.error(\"Response has no matching element\"));\n _context25.next = 16;\n break;\n\n case 13:\n _context25.prev = 13;\n _context25.t0 = _context25[\"catch\"](1);\n console.error(_context25.t0);\n\n case 16:\n return _context25.abrupt(\"return\", new FrameElement());\n\n case 17:\n case \"end\":\n return _context25.stop();\n }\n }\n }, _callee25, this, [[1, 13]]);\n }));\n\n function extractForeignFrameElement(_x20) {\n return _extractForeignFrameElement.apply(this, arguments);\n }\n\n return extractForeignFrameElement;\n }()\n }, {\n key: \"shouldInterceptNavigation\",\n value: function shouldInterceptNavigation(element, submitter) {\n var id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\") || this.element.getAttribute(\"target\");\n\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n\n if (id) {\n var frameElement = getFrameElementById(id);\n\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n\n if (!session.elementDriveEnabled(element)) {\n return false;\n }\n\n if (submitter && !session.elementDriveEnabled(submitter)) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"id\",\n get: function get() {\n return this.element.id;\n }\n }, {\n key: \"enabled\",\n get: function get() {\n return !this.element.disabled;\n }\n }, {\n key: \"sourceURL\",\n get: function get() {\n if (this.element.src) {\n return this.element.src;\n }\n },\n set: function set(sourceURL) {\n this.settingSourceURL = true;\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n this.currentURL = this.element.src;\n this.settingSourceURL = false;\n }\n }, {\n key: \"reloadable\",\n get: function get() {\n var frame = this.findFrameElement(this.element);\n return frame.hasAttribute(\"reloadable\");\n },\n set: function set(value) {\n var frame = this.findFrameElement(this.element);\n\n if (value) {\n frame.setAttribute(\"reloadable\", \"\");\n } else {\n frame.removeAttribute(\"reloadable\");\n }\n }\n }, {\n key: \"loadingStyle\",\n get: function get() {\n return this.element.loading;\n }\n }, {\n key: \"isLoading\",\n get: function get() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n }, {\n key: \"isActive\",\n get: function get() {\n return this.element.isActive && this.connected;\n }\n }]);\n\n return FrameController;\n}();\n\nfunction getFrameElementById(id) {\n if (id != null) {\n var element = document.getElementById(id);\n\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n var src = element.getAttribute(\"src\");\n\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(\"Matching element has a source URL which references itself\"));\n }\n\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n return element;\n }\n }\n}\n\nvar StreamActions = {\n after: function after() {\n var _this32 = this;\n\n this.targetElements.forEach(function (e) {\n var _a;\n\n return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(_this32.templateContent, e.nextSibling);\n });\n },\n append: function append() {\n var _this33 = this;\n\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach(function (e) {\n return e.append(_this33.templateContent);\n });\n },\n before: function before() {\n var _this34 = this;\n\n this.targetElements.forEach(function (e) {\n var _a;\n\n return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(_this34.templateContent, e);\n });\n },\n prepend: function prepend() {\n var _this35 = this;\n\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach(function (e) {\n return e.prepend(_this35.templateContent);\n });\n },\n remove: function remove() {\n this.targetElements.forEach(function (e) {\n return e.remove();\n });\n },\n replace: function replace() {\n var _this36 = this;\n\n this.targetElements.forEach(function (e) {\n return e.replaceWith(_this36.templateContent);\n });\n },\n update: function update() {\n var _this37 = this;\n\n this.targetElements.forEach(function (e) {\n e.innerHTML = \"\";\n e.append(_this37.templateContent);\n });\n }\n};\n\nvar StreamElement = /*#__PURE__*/function (_HTMLElement2) {\n _inherits(StreamElement, _HTMLElement2);\n\n var _super9 = _createSuper(StreamElement);\n\n function StreamElement() {\n _classCallCheck(this, StreamElement);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(StreamElement, [{\n key: \"connectedCallback\",\n value: function () {\n var _connectedCallback = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26() {\n return _regeneratorRuntime.wrap(function _callee26$(_context26) {\n while (1) {\n switch (_context26.prev = _context26.next) {\n case 0:\n _context26.prev = 0;\n _context26.next = 3;\n return this.render();\n\n case 3:\n _context26.next = 8;\n break;\n\n case 5:\n _context26.prev = 5;\n _context26.t0 = _context26[\"catch\"](0);\n console.error(_context26.t0);\n\n case 8:\n _context26.prev = 8;\n this.disconnect();\n return _context26.finish(8);\n\n case 11:\n case \"end\":\n return _context26.stop();\n }\n }\n }, _callee26, this, [[0, 5, 8, 11]]);\n }));\n\n function connectedCallback() {\n return _connectedCallback.apply(this, arguments);\n }\n\n return connectedCallback;\n }()\n }, {\n key: \"render\",\n value: function () {\n var _render6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28() {\n var _this38 = this;\n\n var _a;\n\n return _regeneratorRuntime.wrap(function _callee28$(_context28) {\n while (1) {\n switch (_context28.prev = _context28.next) {\n case 0:\n return _context28.abrupt(\"return\", (_a = this.renderPromise) !== null && _a !== void 0 ? _a : this.renderPromise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27() {\n return _regeneratorRuntime.wrap(function _callee27$(_context27) {\n while (1) {\n switch (_context27.prev = _context27.next) {\n case 0:\n if (!_this38.dispatchEvent(_this38.beforeRenderEvent)) {\n _context27.next = 4;\n break;\n }\n\n _context27.next = 3;\n return nextAnimationFrame();\n\n case 3:\n _this38.performAction();\n\n case 4:\n case \"end\":\n return _context27.stop();\n }\n }\n }, _callee27);\n }))());\n\n case 1:\n case \"end\":\n return _context28.stop();\n }\n }\n }, _callee28, this);\n }));\n\n function render() {\n return _render6.apply(this, arguments);\n }\n\n return render;\n }()\n }, {\n key: \"disconnect\",\n value: function disconnect() {\n try {\n this.remove();\n } catch (_a) {}\n }\n }, {\n key: \"removeDuplicateTargetChildren\",\n value: function removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach(function (c) {\n return c.remove();\n });\n }\n }, {\n key: \"duplicateChildren\",\n get: function get() {\n var _a;\n\n var existingChildren = this.targetElements.flatMap(function (e) {\n return _toConsumableArray(e.children);\n }).filter(function (c) {\n return !!c.id;\n });\n\n var newChildrenIds = _toConsumableArray((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children).filter(function (c) {\n return !!c.id;\n }).map(function (c) {\n return c.id;\n });\n\n return existingChildren.filter(function (c) {\n return newChildrenIds.includes(c.id);\n });\n }\n }, {\n key: \"performAction\",\n get: function get() {\n if (this.action) {\n var actionFunction = StreamActions[this.action];\n\n if (actionFunction) {\n return actionFunction;\n }\n\n this.raise(\"unknown action\");\n }\n\n this.raise(\"action attribute is missing\");\n }\n }, {\n key: \"targetElements\",\n get: function get() {\n if (this.target) {\n return this.targetElementsById;\n } else if (this.targets) {\n return this.targetElementsByQuery;\n } else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n }, {\n key: \"templateContent\",\n get: function get() {\n return this.templateElement.content.cloneNode(true);\n }\n }, {\n key: \"templateElement\",\n get: function get() {\n if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n\n this.raise(\"first child element must be a