mirror of
https://github.com/flarum/framework.git
synced 2025-02-23 19:59:39 +08:00
1 line
1.0 MiB
1 line
1.0 MiB
{"version":3,"sources":["webpack://@flarum/core/webpack/bootstrap","webpack://@flarum/core/./forum.ts","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/core/./node_modules/bootstrap/js/dropdown.js","webpack://@flarum/core/./node_modules/bootstrap/js/transition.js","webpack://@flarum/core/./node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/core/./node_modules/dayjs/plugin/relativeTime.js","webpack://@flarum/core/./node_modules/colorthief/dist/color-thief.umd.js-exposed","webpack://@flarum/core/./node_modules/mousetrap/mousetrap.js-exposed","webpack://@flarum/core/./node_modules/classnames/index.js-exposed","webpack://@flarum/core/./node_modules/dayjs/dayjs.min.js-exposed","webpack://@flarum/core/./node_modules/zepto/dist/zepto.js-exposed","webpack://@flarum/core/./node_modules/mithril/index.js-exposed","webpack://@flarum/core/./node_modules/m.attrs.bidi/bidi.js-exposed","webpack://@flarum/core/./node_modules/dayjs/dayjs.min.js-exposed?a6f5","webpack://@flarum/core/./node_modules/hc-sticky/dist/hc-sticky.js","webpack://@flarum/core/./node_modules/zepto/dist/zepto.js","webpack://@flarum/core/./node_modules/jump.js/dist/jump.module.js","webpack://@flarum/core/./node_modules/lodash/_Symbol.js","webpack://@flarum/core/./node_modules/lodash/_arrayPush.js","webpack://@flarum/core/./node_modules/lodash/_baseFlatten.js","webpack://@flarum/core/./node_modules/lodash/_baseGetTag.js","webpack://@flarum/core/./node_modules/lodash/_baseIsArguments.js","webpack://@flarum/core/./node_modules/lodash/_freeGlobal.js","webpack://@flarum/core/./node_modules/lodash/_getRawTag.js","webpack://@flarum/core/./node_modules/lodash/_isFlattenable.js","webpack://@flarum/core/./node_modules/lodash/_objectToString.js","webpack://@flarum/core/./node_modules/lodash/_root.js","webpack://@flarum/core/./node_modules/lodash/flattenDeep.js","webpack://@flarum/core/./node_modules/lodash/isArguments.js","webpack://@flarum/core/./node_modules/lodash/isArray.js","webpack://@flarum/core/./node_modules/lodash/isObjectLike.js","webpack://@flarum/core/./node_modules/micromodal/dist/micromodal.es.js","webpack://@flarum/core/./node_modules/mithril/api/mount-redraw.js","webpack://@flarum/core/./node_modules/mithril/api/router.js","webpack://@flarum/core/./node_modules/mithril/hyperscript.js","webpack://@flarum/core/./node_modules/mithril/mount-redraw.js","webpack://@flarum/core/./node_modules/mithril/pathname/assign.js","webpack://@flarum/core/./node_modules/mithril/pathname/build.js","webpack://@flarum/core/./node_modules/mithril/pathname/compileTemplate.js","webpack://@flarum/core/./node_modules/mithril/pathname/parse.js","webpack://@flarum/core/./node_modules/mithril/promise/polyfill.js","webpack://@flarum/core/./node_modules/mithril/promise/promise.js","webpack://@flarum/core/./node_modules/mithril/querystring/build.js","webpack://@flarum/core/./node_modules/mithril/querystring/parse.js","webpack://@flarum/core/./node_modules/mithril/render.js","webpack://@flarum/core/./node_modules/mithril/render/fragment.js","webpack://@flarum/core/./node_modules/mithril/render/hyperscript.js","webpack://@flarum/core/./node_modules/mithril/render/hyperscriptVnode.js","webpack://@flarum/core/./node_modules/mithril/render/render.js","webpack://@flarum/core/./node_modules/mithril/render/trust.js","webpack://@flarum/core/./node_modules/mithril/render/vnode.js","webpack://@flarum/core/./node_modules/mithril/request.js","webpack://@flarum/core/./node_modules/mithril/request/request.js","webpack://@flarum/core/./node_modules/mithril/route.js","webpack://@flarum/core/./node_modules/mithril/stream.js","webpack://@flarum/core/./node_modules/mithril/stream/stream.js","webpack://@flarum/core/../../src/utils/isBrowser.js","webpack://@flarum/core/../../src/utils/debounce.js","webpack://@flarum/core/../../src/utils/isFunction.js","webpack://@flarum/core/../../src/utils/getStyleComputedProperty.js","webpack://@flarum/core/../../src/utils/getParentNode.js","webpack://@flarum/core/../../src/utils/getScrollParent.js","webpack://@flarum/core/../../src/utils/getReferenceNode.js","webpack://@flarum/core/../../src/utils/isIE.js","webpack://@flarum/core/../../src/utils/getOffsetParent.js","webpack://@flarum/core/../../src/utils/isOffsetContainer.js","webpack://@flarum/core/../../src/utils/getRoot.js","webpack://@flarum/core/../../src/utils/findCommonOffsetParent.js","webpack://@flarum/core/../../src/utils/getScroll.js","webpack://@flarum/core/../../src/utils/includeScroll.js","webpack://@flarum/core/../../src/utils/getBordersSize.js","webpack://@flarum/core/../../src/utils/getWindowSizes.js","webpack://@flarum/core/../../src/utils/getClientRect.js","webpack://@flarum/core/../../src/utils/getBoundingClientRect.js","webpack://@flarum/core/../../src/utils/getOffsetRectRelativeToArbitraryNode.js","webpack://@flarum/core/../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","webpack://@flarum/core/../../src/utils/isFixed.js","webpack://@flarum/core/../../src/utils/getFixedPositionOffsetParent.js","webpack://@flarum/core/../../src/utils/getBoundaries.js","webpack://@flarum/core/../../src/utils/computeAutoPlacement.js","webpack://@flarum/core/../../src/utils/getReferenceOffsets.js","webpack://@flarum/core/../../src/utils/getOuterSizes.js","webpack://@flarum/core/../../src/utils/getOppositePlacement.js","webpack://@flarum/core/../../src/utils/getPopperOffsets.js","webpack://@flarum/core/../../src/utils/find.js","webpack://@flarum/core/../../src/utils/findIndex.js","webpack://@flarum/core/../../src/utils/runModifiers.js","webpack://@flarum/core/../../src/methods/update.js","webpack://@flarum/core/../../src/utils/isModifierEnabled.js","webpack://@flarum/core/../../src/utils/getSupportedPropertyName.js","webpack://@flarum/core/../../src/methods/destroy.js","webpack://@flarum/core/../../src/utils/getWindow.js","webpack://@flarum/core/../../src/utils/setupEventListeners.js","webpack://@flarum/core/../../src/methods/enableEventListeners.js","webpack://@flarum/core/../../src/utils/removeEventListeners.js","webpack://@flarum/core/../../src/methods/disableEventListeners.js","webpack://@flarum/core/../../src/utils/isNumeric.js","webpack://@flarum/core/../../src/utils/setStyles.js","webpack://@flarum/core/../../src/utils/setAttributes.js","webpack://@flarum/core/../../src/modifiers/applyStyle.js","webpack://@flarum/core/../../src/utils/getRoundedOffsets.js","webpack://@flarum/core/../../src/modifiers/computeStyle.js","webpack://@flarum/core/../../src/utils/isModifierRequired.js","webpack://@flarum/core/../../src/modifiers/arrow.js","webpack://@flarum/core/../../src/utils/getOppositeVariation.js","webpack://@flarum/core/../../src/methods/placements.js","webpack://@flarum/core/../../src/utils/clockwise.js","webpack://@flarum/core/../../src/modifiers/flip.js","webpack://@flarum/core/../../src/modifiers/keepTogether.js","webpack://@flarum/core/../../src/modifiers/offset.js","webpack://@flarum/core/../../src/modifiers/preventOverflow.js","webpack://@flarum/core/../../src/modifiers/shift.js","webpack://@flarum/core/../../src/modifiers/hide.js","webpack://@flarum/core/../../src/modifiers/inner.js","webpack://@flarum/core/../../src/modifiers/index.js","webpack://@flarum/core/../../src/methods/defaults.js","webpack://@flarum/core/../../src/index.js","webpack://@flarum/core/./node_modules/process/browser.js","webpack://@flarum/core/./node_modules/setimmediate/setImmediate.js","webpack://@flarum/core/./node_modules/classnames/index.js","webpack://@flarum/core/./node_modules/colorthief/dist/color-thief.umd.js","webpack://@flarum/core/./node_modules/dayjs/dayjs.min.js","webpack://@flarum/core/./node_modules/m.attrs.bidi/bidi.js","webpack://@flarum/core/./node_modules/mithril/index.js","webpack://@flarum/core/./node_modules/mousetrap/mousetrap.js","webpack://@flarum/core/./node_modules/spin.js/spin.js","webpack://@flarum/core/./node_modules/timers-browserify/main.js","webpack://@flarum/core/../../../popper/src/utils/isFunction.js","webpack://@flarum/core/(webpack)/buildin/global.js","webpack://@flarum/core/./node_modules/zepto/src/data.js","webpack://@flarum/core/./node_modules/zepto/src/fx.js","webpack://@flarum/core/./node_modules/zepto/src/fx_methods.js","webpack://@flarum/core/./node_modules/zepto/src/selector.js","webpack://@flarum/core/./src/common/Application.ts","webpack://@flarum/core/./src/common/Component.ts","webpack://@flarum/core/./src/common/Model.ts","webpack://@flarum/core/./src/common/Session.ts","webpack://@flarum/core/./src/common/Store.ts","webpack://@flarum/core/./src/common/Translator.ts","webpack://@flarum/core/./src/common/compat.ts","webpack://@flarum/core/./src/common/components/Alert.tsx","webpack://@flarum/core/./src/common/components/AlertManager.tsx","webpack://@flarum/core/./src/common/components/Badge.tsx","webpack://@flarum/core/./src/common/components/Button.tsx","webpack://@flarum/core/./src/common/components/Checkbox.tsx","webpack://@flarum/core/./src/common/components/Dropdown.tsx","webpack://@flarum/core/./src/common/components/FieldSet.tsx","webpack://@flarum/core/./src/common/components/GroupBadge.ts","webpack://@flarum/core/./src/common/components/LinkButton.tsx","webpack://@flarum/core/./src/common/components/LoadingIndicator.tsx","webpack://@flarum/core/./src/common/components/Modal.tsx","webpack://@flarum/core/./src/common/components/ModalManager.tsx","webpack://@flarum/core/./src/common/components/Navigation.tsx","webpack://@flarum/core/./src/common/components/Placeholder.tsx","webpack://@flarum/core/./src/common/components/RequestErrorModal.tsx","webpack://@flarum/core/./src/common/components/Select.tsx","webpack://@flarum/core/./src/common/components/SelectDropdown.tsx","webpack://@flarum/core/./src/common/components/Separator.tsx","webpack://@flarum/core/./src/common/components/SplitDropdown.tsx","webpack://@flarum/core/./src/common/components/Switch.tsx","webpack://@flarum/core/./src/common/extend.ts","webpack://@flarum/core/./src/common/helpers/avatar.tsx","webpack://@flarum/core/./src/common/helpers/fullTime.tsx","webpack://@flarum/core/./src/common/helpers/highlight.ts","webpack://@flarum/core/./src/common/helpers/humanTime.tsx","webpack://@flarum/core/./src/common/helpers/icon.tsx","webpack://@flarum/core/./src/common/helpers/listItems.tsx","webpack://@flarum/core/./src/common/helpers/userOnline.tsx","webpack://@flarum/core/./src/common/helpers/username.tsx","webpack://@flarum/core/./src/common/index.ts","webpack://@flarum/core/./src/common/models/Discussion.tsx","webpack://@flarum/core/./src/common/models/Forum.ts","webpack://@flarum/core/./src/common/models/Group.ts","webpack://@flarum/core/./src/common/models/Notification.ts","webpack://@flarum/core/./src/common/models/Post.ts","webpack://@flarum/core/./src/common/models/User.ts","webpack://@flarum/core/./src/common/utils/Drawer.ts","webpack://@flarum/core/./src/common/utils/Evented.ts","webpack://@flarum/core/./src/common/utils/ItemList.ts","webpack://@flarum/core/./src/common/utils/RequestError.ts","webpack://@flarum/core/./src/common/utils/ScrollListener.ts","webpack://@flarum/core/./src/common/utils/SubtreeRetainer.ts","webpack://@flarum/core/./src/common/utils/abbreviateNumber.tsx","webpack://@flarum/core/./src/common/utils/anchorScroll.ts","webpack://@flarum/core/./src/common/utils/computed.ts","webpack://@flarum/core/./src/common/utils/extract.ts","webpack://@flarum/core/./src/common/utils/extractText.ts","webpack://@flarum/core/./src/common/utils/formatNumber.ts","webpack://@flarum/core/./src/common/utils/humanTime.ts","webpack://@flarum/core/./src/common/utils/mapRoutes.ts","webpack://@flarum/core/./src/common/utils/patchMithril.ts","webpack://@flarum/core/./src/common/utils/patchZepto.ts","webpack://@flarum/core/./src/common/utils/string.ts","webpack://@flarum/core/./src/common/utils/stringToColor.ts","webpack://@flarum/core/./src/forum/Forum.ts","webpack://@flarum/core/./src/forum/app.ts","webpack://@flarum/core/./src/forum/compat.ts","webpack://@flarum/core/./src/forum/components/AvatarEditor.tsx","webpack://@flarum/core/./src/forum/components/ChangeEmailModal.tsx","webpack://@flarum/core/./src/forum/components/ChangePasswordModal.tsx","webpack://@flarum/core/./src/forum/components/CommentPost.tsx","webpack://@flarum/core/./src/forum/components/DiscussionHero.tsx","webpack://@flarum/core/./src/forum/components/DiscussionList.tsx","webpack://@flarum/core/./src/forum/components/DiscussionListItem.tsx","webpack://@flarum/core/./src/forum/components/DiscussionPage.tsx","webpack://@flarum/core/./src/forum/components/DiscussionRenamedPost.tsx","webpack://@flarum/core/./src/forum/components/DiscussionsSearchSource.tsx","webpack://@flarum/core/./src/forum/components/DiscussionsUserPage.tsx","webpack://@flarum/core/./src/forum/components/EditUserModal.tsx","webpack://@flarum/core/./src/forum/components/EventPost.tsx","webpack://@flarum/core/./src/forum/components/HeaderPrimary.tsx","webpack://@flarum/core/./src/forum/components/HeaderSecondary.tsx","webpack://@flarum/core/./src/forum/components/IndexPage.tsx","webpack://@flarum/core/./src/forum/components/LoadingPost.tsx","webpack://@flarum/core/./src/forum/components/LogInButtons.tsx","webpack://@flarum/core/./src/forum/components/LogInModal.tsx","webpack://@flarum/core/./src/forum/components/NotificationGrid.tsx","webpack://@flarum/core/./src/forum/components/NotificationList.tsx","webpack://@flarum/core/./src/forum/components/NotificationsDropdown.tsx","webpack://@flarum/core/./src/forum/components/NotificationsPage.tsx","webpack://@flarum/core/./src/forum/components/Page.tsx","webpack://@flarum/core/./src/forum/components/Post.tsx","webpack://@flarum/core/./src/forum/components/PostEdited.tsx","webpack://@flarum/core/./src/forum/components/PostMeta.tsx","webpack://@flarum/core/./src/forum/components/PostStream.tsx","webpack://@flarum/core/./src/forum/components/PostStreamScrubber.tsx","webpack://@flarum/core/./src/forum/components/PostUser.tsx","webpack://@flarum/core/./src/forum/components/PostsUserPage.tsx","webpack://@flarum/core/./src/forum/components/RenameDiscussionModal.tsx","webpack://@flarum/core/./src/forum/components/ReplyPlaceholder.tsx","webpack://@flarum/core/./src/forum/components/Search.tsx","webpack://@flarum/core/./src/forum/components/SearchSource.ts","webpack://@flarum/core/./src/forum/components/SessionDropdown.tsx","webpack://@flarum/core/./src/forum/components/SettingsPage.tsx","webpack://@flarum/core/./src/forum/components/SignUpModal.tsx","webpack://@flarum/core/./src/forum/components/TerminalPost.tsx","webpack://@flarum/core/./src/forum/components/UserCard.tsx","webpack://@flarum/core/./src/forum/components/UserPage.tsx","webpack://@flarum/core/./src/forum/components/UsersSearchSource.tsx","webpack://@flarum/core/./src/forum/components/WelcomeHero.tsx","webpack://@flarum/core/./src/forum/index.ts","webpack://@flarum/core/./src/forum/routes.ts","webpack://@flarum/core/./src/forum/utils/DiscussionControls.tsx","webpack://@flarum/core/./src/forum/utils/History.ts","webpack://@flarum/core/./src/forum/utils/KeyboardNavigatable.ts","webpack://@flarum/core/./src/forum/utils/Pane.ts","webpack://@flarum/core/./src/forum/utils/PostControls.tsx","webpack://@flarum/core/./src/forum/utils/UserControls.ts","webpack://@flarum/core/./src/forum/utils/affixSidebar.ts","webpack://@flarum/core/external \"m\""],"names":["window","document","navigator","timeoutDuration","longerTimeoutBrowsers","i","length","isBrowser","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","ownerDocument","defaultView","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","overflow","overflowX","overflowY","test","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","parseInt","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","isPaddingNumber","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","Object","keys","map","key","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","getRoundedOffsets","shouldRound","round","floor","noRound","v","referenceWidth","popperWidth","isVertical","isVariation","sameWidthParity","bothOddWidth","horizontalToInteger","verticalToInteger","isFirefox","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","devicePixelRatio","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","transformProp","popperStyles","transform","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils","DEFAULT_OPTIONS","Tooltip","events","trigger","_isOpen","_popperOptions","_setEventListeners","template","title","allowHtml","tooltipGenerator","createElement","innerHTML","tooltipNode","childNodes","id","random","substr","titleNode","innerSelector","_addTitleContent","appendChild","textContent","_isOpening","_tooltipNode","visibility","popperInstance","getAttribute","_create","container","_findContainer","_append","popperOptions","arrowSelector","_events","func","_hide","directEvents","oppositeEvents","usedByTooltip","_scheduleShow","delay","evt","_scheduleHide","closeOnClickOutside","computedDelay","show","_showTimeout","setTimeout","_show","clearTimeout","type","isSet","_setTooltipNodeEvent","_clearTitleContent","lastTitle","dispose","_dispose","toggle","updateTitleContent","_updateTitleContent","relatedreference","toElement","relatedTarget","relatedreference2","evt2","Application","forum","routes","initializers","ItemList","session","translator","Translator","store","Store","forums","Forum","users","User","discussions","Discussion","posts","Post","groups","Group","notifications","Notification","cache","booted","requestError","titleCount","drawer","Drawer","modal","alerts","load","payload","locale","boot","toArray","initializer","pushPayload","resources","getById","Session","userId","csrfToken","mount","bootExtensions","extensions","extension","extenders","flattenDeep","extend","extender","exports","basePath","$modal","getElementById","$alerts","$content","m","ModalManager","AlertManager","oninit","vnode","route","mapRoutes","ScrollListener","$app","$","toggleClass","addClass","preloadedApiDocument","apiDocument","results","setTitle","updateTitle","setTitleCount","count","attribute","params","Error","url","path","extract","hasOwnProperty","queryString","buildQueryString","request","originalOptions","background","xhr","setRequestHeader","method","deserialize","responseText","errorHandler","error","original","status","RequestError","getResponseHeader","app","JSON","parse","dismiss","alert","res","response","errors","detail","trans","isDebug","Alert","component","controls","Button","className","onclick","showDebug","console","reject","RequestErrorModal","Component","props","tag","view","setProps","oncreate","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","selector","$element","render","constructor","componentProps","initProps","attrs","Model","freshness","exists","Date","pushData","innerKey","getIdentifier","pushAttributes","save","relationships","model","oldData","copyData","meta","apiEndpoint","redraw","delete","remove","stringify","hasOne","relationship","isArray","hasMany","transformDate","user","login","logout","location","href","models","included","pushObject","createRecord","query","join","getBy","all","records","translations","addTranslations","parameters","translation","apply","transText","extractText","transChoice","number","pluralize","input","username","parts","RegExp","hydrated","open","part","unshift","text","sPluralRegex","cPluralRegex","iPluralRegex","standardRules","explicitRules","matches","rule","ns","leftNumber","convertNumber","rightNumber","pluralPosition","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","Evented","humanTime","computed","anchorScroll","abbreviateNumber","string","SubtreeRetainer","stringToColor","patchMithril","formatNumber","Switch","Badge","LoadingIndicator","Placeholder","Separator","Dropdown","SplitDropdown","FieldSet","Select","Navigation","LinkButton","Checkbox","SelectDropdown","Modal","GroupBadge","fullTime","avatar","icon","humanTimeHelper","highlight","userOnline","listItems","dismissible","ondismiss","dismissControl","components","splice","clear","iconName","trust","label","tooltip","loading","disabled","classNames","getButtonContent","withAttr","onchange","getDisplay","checked","showing","buttonClassName","menuClassName","caretIcon","items","getButton","getMenu","dropdown","onshow","$menu","isRight","hasClass","removeClass","onhide","group","backgroundColor","color","nameSingular","active","isActive","vdom","Link","String","get","zIndex","sizeOptions","lines","radius","Spinner","spin","isDismissible","onsubmit","content","onready","first","focus","select","close","loaded","onerror","source","pointer","hideTimeout","modalProps","appendTo","MicroModal","awaitCloseAnimation","awaitOpenAnimation","disableFocus","onShow","onClose","backdrop","fadeOut","one","history","pane","onmouseleave","canGoBack","getBackButton","getPaneButton","getDrawerButton","previous","getPrevious","backUrl","shiftKey","ctrlKey","metaKey","which","preventDefault","back","pinned","togglePinned","newNotificationCount","stopPropagation","statusText","activeChild","child","defaultLabel","isListItem","firstChild","getFirstChild","buttonProps","object","args","override","newMethod","hasTitle","displayName","avatarUrl","time","mo","dayjs","datetime","format","full","phrase","regexp","highlighted","truncate","ago","humanTimeUtil","fontClass","isSeparator","item","withoutUnnecessarySeparators","newItems","prevItem","itemClassName","itemName","lastSeenAt","isOnline","relativeTime","localizedFormat","slug","createdAt","firstPost","lastPostedAt","lastPostedUser","lastPost","lastPostNumber","commentCount","replyCount","mostRelevantPost","lastReadAt","lastReadPostNumber","isUnread","unreadCount","isRead","hiddenAt","hiddenUser","isHidden","canReply","canRename","canHide","canDelete","removePost","markedAllAsReadAt","badges","add","postIds","link","namePlural","ADMINISTRATOR_ID","GUEST_ID","MEMBER_ID","contentType","fromUser","subject","discussion","contentHtml","contentPlain","getPlainContent","editedAt","editedUser","isEdited","canEdit","email","isEmailConfirmed","password","preferences","joinTime","unreadNotificationCount","discussionCount","avatarColor","calculateAvatarColor","toDate","image","Image","onload","colorThief","ColorThief","getColor","crossOrigin","src","savePreferences","newPreferences","$backdrop","click","isOpen","handlers","getHandlers","handler","on","wrapper","from","arguments","off","Item","isEmpty","has","later","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","ticking","loop","pageYOffset","stop","callbacks","$window","$el","relativeScroll","dependentKeys","compute","dependentValues","computedValue","recompute","config","maximumSignificantDigits","toLocaleString","now","isAfter","day","diff","year","fromNow","routeName","_m","comp","defineProperty","writable","bidi","cb","option","each","$this","attr","removeAttr","includes","dimension","Dimension","margin","elem","sides","expr","tagName","hover","leave","animateScrollTop","to","duration","fx","speeds","_default","scrollY","jump","slideUp","easing","animate","special","bindBeforeSpecialEvents","eventName","specialEvent","_init","originalHandler","handle","$target","setup","substring","removeSelectors","ucfirst","hsvToRgb","h","s","r","g","f","p","q","t","num","charCodeAt","hue","rgb","History","postComponents","comment","CommentPost","discussionRenamed","DiscussionRenamedPost","current","defaultRoute","defaultAction","HeaderPrimary","HeaderSecondary","Pane","home","compat","IndexPage","AvatarEditor","isDraggedOver","quickUpload","enableDragover","disableDragover","dropUpload","controlItems","openPicker","upload","dataTransfer","files","$input","file","FormData","append","serialize","raw","success","failure","ChangeEmailModal","catch","ChangePasswordModal","revealContent","postUser","post","subtree","cardVisible","isEditing","headerItems","configPreview","eval","isInitialized","context","preview","updatePreview","composer","s9e","TextFormatter","updateInterval","setInterval","onunload","clearInterval","toggleContent","DiscussionHero","DiscussionList","moreResults","refresh","loadMore","DiscussionListItem","requestParams","include","sortMap","relevance","latest","newest","oldest","loadResults","parseResults","preloadedDiscussions","page","links","next","removeDiscussion","addDiscussion","highlightRegExp","getTime","showUnread","showRepliesCount","jumpTo","DiscussionControls","markAsRead","infoItems","slidableInstance","slidable","reset","idParam","param","showFirstPost","excerpt","TerminalPost","DiscussionPage","near","stream","scrubber","includedPosts","discussionList","bodyClass","goToNumber","postStream","positionChanged","oncreatePane","is","sidebarItems","preloadedDiscussion","discussionId","record","$list","$discussion","listTop","listBottom","outerHeight","discussionTop","discussionBottom","startNumber","endNumber","set","Page","description","renamed","oldName","descriptionData","oldTitle","newTitle","old","new","EventPost","DiscussionsSearchSource","limit","SearchSource","DiscussionsUserPage","loadUser","UserPage","EditUserModal","setPassword","fields","activate","usernameHelper","descriptionKey","Search","locales","reload","cookie","SignUpModal","LogInModal","lastDiscussion","hero","viewItems","actionItems","oldHeroHeight","heroHeight","scroll","indexTop","indexBottom","canStartDiscussion","newDiscussionAction","navItems","stickyParams","sortOptions","changeSort","markAllAsRead","searching","clearSearch","confirmation","confirm","LoadingPost","LogInButtons","identification","remember","footer","forgotPassword","signUp","ForgotPasswordModal","NotificationGrid","methods","notificationMethods","inputs","types","notificationTypes","preferenceKey","preference","toggleMethod","toggleType","parents","control","NotificationList","$scrollParent","scrollHandler","pages","notification","NotificationComponent","notificationComponents","$notifications","viewportHeight","contentTop","contentHeight","scrollHeight","NotificationsDropdown","list","newNotifications","getNewCount","unread","getUnreadCount","menuClick","goToRoute","NotificationsPage","controlsOpen","PostControls","classes","footerItems","$actions","$controls","existing","PostEdited","shouldUpdateTooltip","oldEditedInfo","editedInfo","PostMeta","permalink","getPermalink","touch","selectPermalink","ipAddress","origin","PostStream","paused","scrollListener","onscroll","loadPageTimeouts","pagesLoading","calculatePositionTimeout","visibleStart","visibleEnd","viewingEnd","noAnimation","goToLast","flashItem","promise","loadNearNumber","scrollToNumber","unpause","goToIndex","backwards","loadNearIndex","sync","scrollToIndex","goToFirst","loadRange","sanitizeIndex","loadCount","fadeIn","fadedIn","lastTime","PostComponent","toISOString","dt","valueOf","period","loadNext","ReplyPlaceholder","getMarginTop","viewportTop","loadAheadDistance","$item","loadPrevious","calculatePosition","twoPagesAway","loadPage","anchorIndex","loadIds","scrollToItem","force","$container","itemTop","itemBottom","scrollBottom","PostStreamScrubber","visible","dragging","mouseStart","indexStart","unreadPercent","viewing","ceil","styleUnread","newStyle","display","oldStyle","renderScrollbar","streamWasUnpaused","$items","visibleTop","visibleBottom","visiblePost","ondestroy","onresize","resize","cursor","onmousedown","onmousemove","onmouseup","percentPerPost","$scrubber","heights","before","after","$part","minPercentVisible","percentPerVisiblePost","scrollbar","TouchEvent","touches","clientY","deltaPixels","deltaPercent","deltaIndex","newIndex","intIndex","$scrollbar","offsetPixels","originalEvent","offsetPercent","offsetIndex","PostUser","card","UserCard","controlsButtonClassName","timeout","showCard","hideCard","PostsUserPage","loadLimit","RenameDiscussionModal","currentTitle","reply","replyAction","oncreatePreview","anchorToBottom","hasFocus","sources","loadingSources","searched","KeyboardNavigatable","searchTimeout","currentSearch","getCurrentSearch","sourceItems","setIndex","getCurrentNumericIndex","blur","selectableItems","onUp","onDown","onSelect","selectResult","onCancel","bindTo","getItem","UsersSearchSource","eq","$dropdown","fixedIndex","dropdownScroll","dropdownTop","dropdownBottom","SessionDropdown","SettingsPage","settingsItems","accountItems","notificationsItems","privacyItems","preferenceSaver","discloseOnline","isProvided","field","provided","token","logIn","submitData","UserControls","editable","online","affixSidebar","lassName","lowercaseUsername","lastIndexOf","localeCompare","WelcomeHero","hidden","localStorage","setItem","settings","hasNear","section","moderation","renameAction","destructive","hideAction","restoreAction","deleteAction","forceRefresh","composingReplyTo","ReplyComposer","viewingDiscussion","isFullScreen","stack","getCurrent","secondTop","pop","whenCallback","onRemove","selectionStart","selectionEnd","when","navigate","keyCallback","pinnedKey","enable","disable","editAction","EditPostComposer","showDeletionAlert","message","$sidebar","$header","$affixElement","hcSticky","stickTo"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB;AACnB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,0CAA0C,sBAAsB;AAC3F,2BAA2B;AAC3B,2BAA2B,oDAAoD,sCAAsC;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAA+C,oCAAoC;;AAE5G;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C,sCAAsC;AACrF;;AAEA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,YAAY;AACZ;;AAEA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,2CAA2C,4BAA4B;AACvE,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,oEAAoE,cAAc;AAClF;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,wBAAwB,oBAAoB;AAC5C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,wCAAwC,mCAAmC;AAC3E;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,0CAA0C,wBAAwB;AAClE,KAAK;AACL;AACA,kCAAkC,6DAA6D;AAC/F,KAAK;AACL;AACA;AACA,oEAAoE,oBAAoB;AACxF,OAAO;AACP,KAAK;AACL;AACA,kCAAkC,sBAAsB;AACxD,KAAK;AACL;AACA;AACA,sCAAsC,sBAAsB;AAC5D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA,iCAAiC,8BAA8B;AAC/D,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,6BAA6B,yEAAyE;AACtG,6BAA6B,qEAAqE;AAClG;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,kCAAkC;AAClC;AACA,OAAO,QAAQ;AACf,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,kCAAkC,oBAAoB;AACtD,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,uDAAuD,uBAAuB;AAC9E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,OAAO;AACP;AACA;AACA,iCAAiC,4CAA4C;AAC7E;AACA,6EAA6E;AAC7E;;AAEA,kCAAkC,yBAAyB,SAAS;AACpE,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C,mBAAmB,qCAAqC;AACxD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C,mBAAmB,qCAAqC;AACxD,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kBAAkB;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;AACA,yCAAyC,4BAA4B;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA,iDAAiD,SAAS;AAC1D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA,+BAA+B,gCAAgC;AAC/D,mBAAmB;AACnB,sBAAsB;AACtB;AACA,eAAe,qCAAqC;AACpD,eAAe;;AAEf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA,aAAa;;AAEb;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,YAAY;AAC1C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C,yCAAyC;AACnF;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,aAAa,eAAe;;AAE5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,IAAI;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,EAAE;AACrB,2CAA2C,8CAA8C;AACzF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;;AAEzB;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;AACD;AACA;AACA;AACA;AACA,qBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;AAED,CAAC,e;;;;;;;;;;;;ACtnDD;AAAA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;;AAEvB,qBAAqB;AACrB,oBAAoB;;AAEpB,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;;AAEpB,wBAAwB;AACxB,wBAAwB;;AAExB,yBAAyB;AACzB,2BAA2B;;AAE3B,oBAAoB;;AAEpB,wBAAwB;;AAExB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEe,wEAAS,EAAC;;;;;;;;;;;;ACtKzB,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrCA,aAAa,mBAAO,CAAC,mDAAW;AAChC,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,qBAAqB,mBAAO,CAAC,mEAAmB;;AAEhD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC3BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA;AACA;;AAEA;;;;;;;;;;;;;ACHA,aAAa,mBAAO,CAAC,mDAAW;;AAEhC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7CA,aAAa,mBAAO,CAAC,mDAAW;AAChC,kBAAkB,mBAAO,CAAC,2DAAe;AACzC,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,kBAAkB,mBAAO,CAAC,6DAAgB;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,sBAAsB,mBAAO,CAAC,qEAAoB;AAClD,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,6BAA6B,kBAAkB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA,8CAA8C,kBAAkB,EAAE;AAClE;AACA;AACA;;AAEA;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC5BA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;;AAEjD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER,+FAA+F;;AAE/F;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB,gBAAgB;AAChB;;;AAGA;AACA;AACA;AACA;;AAEA,+EAA+E,aAAa;AAC5F;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,yDAAyD;;AAEzD,yDAAyD;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA,sDAAsD;;AAEtD,gDAAgD;AAChD;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sDAAsD;;AAEtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,EAAE;;AAEX;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB,cAAc,OAAO;AACrB,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc;AACd;;;AAGA;AACA;AACA,kHAAkH,eAAe,kBAAkB;AACnJ,4DAA4D,eAAe,kBAAkB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB,cAAc;AACd;;;AAGA;AACA;AACA,sHAAsH,eAAe,kBAAkB;AACvJ,4DAA4D,eAAe,kBAAkB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB,cAAc,MAAM;AACpB,cAAc;AACd;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;;;AAGA;AACA;AACA,kCAAkC;AAClC;AACA,KAAK,UAAU;;AAEf,uGAAuG;;;AAGvG,uEAAuE;;AAEvE,2FAA2F;;AAE3F;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc;AACd;;;AAGA;AACA;AACA,sCAAsC;;AAEtC,2FAA2F;;AAE3F,wDAAwD;;AAExD,qCAAqC;;AAErC;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc;AACd;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEe,yEAAU,EAAC;;;;;;;;;;;;;ACxbd;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;;AAErC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C,QAAQ;AACR,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;;;;;;;;;;;;;ACjDA,oDAAY;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;AACrC,QAAQ,mBAAO,CAAC,2EAAuB;AACvC,cAAc,mBAAO,CAAC,qEAAoB;;AAE1C,oBAAoB,mBAAO,CAAC,mEAAmB;AAC/C,oBAAoB,mBAAO,CAAC,mEAAmB;AAC/C,sBAAsB,mBAAO,CAAC,uFAA6B;AAC3D,aAAa,mBAAO,CAAC,qEAAoB;;AAEzC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,iCAAiC,cAAc;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU,qBAAqB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACrQY;;AAEZ,kBAAkB,mBAAO,CAAC,0EAAsB;;AAEhD,oBAAoB,mBAAO,CAAC,8DAAgB;AAC5C,uBAAuB,mBAAO,CAAC,oEAAmB;;AAElD;;;;;;;;;;;;;ACPY;;AAEZ,aAAa,mBAAO,CAAC,kDAAU;;AAE/B,iBAAiB,mBAAO,CAAC,sEAAoB;;;;;;;;;;;;;ACJjC;;AAEZ;AACA,uDAAuD,4BAA4B;AACnF;;;;;;;;;;;;;ACJY;;AAEZ,uBAAuB,mBAAO,CAAC,yEAAsB;AACrD,aAAa,mBAAO,CAAC,2DAAU;;AAE/B;AACA;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1CY;;AAEZ,oBAAoB,mBAAO,CAAC,yDAAS;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,EAAE,+BAA+B;AACnD;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1CY;;AAEZ,uBAAuB,mBAAO,CAAC,yEAAsB;;AAErD,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA,8CAA8C,GAAG;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvBA,oDAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA,mCAAmC;AACnC,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,mCAAmC,YAAY;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6BAA6B,YAAY;AACtD,GAAG;AACH;AACA;AACA;AACA,8DAA8D,2CAA2C;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAe;AAC9D;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,EAAE;AACF;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA,EAAE;AACF;;AAEA;;;;;;;;;;;;;;AC/GA,8CAAY;;AAEZ,sBAAsB,mBAAO,CAAC,8DAAY;;AAE1C;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,CAAC;AACD;AACA;;;;;;;;;;;;;;ACpBY;;AAEZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzBY;;AAEZ;AACA;AACA;;AAEA,+CAA+C;AAC/C,gBAAgB,oBAAoB;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1CY;;AAEZ,iBAAiB,mBAAO,CAAC,gEAAiB;;;;;;;;;;;;;ACF9B;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;AACrC,uBAAuB,mBAAO,CAAC,6EAAoB;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACXY;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;AACrC,uBAAuB,mBAAO,CAAC,6EAAoB;;AAEnD;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACpGY;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACpDY;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,yDAAyD;AACzD,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uCAAuC,OAAO;AAC9C,iCAAiC,OAAO;AACxC;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,iBAAiB;AAC7B,YAAY,eAAe;AAC3B;AACA,YAAY,eAAe;AAC3B,YAAY,WAAW;AACvB,YAAY,eAAe;AAC3B;AACA;AACA,YAAY,+BAA+B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,sBAAsB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,+DAA+D;AAC/D,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,aAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,mBAAmB;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,mBAAmB,2BAA2B;AAC9C;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,eAAe;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;;;;;;;;;;;;;AC58BY;;AAEZ,YAAY,mBAAO,CAAC,+DAAiB;;AAErC;AACA;AACA;AACA;;;;;;;;;;;;;ACPY;;AAEZ;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC9BY;;AAEZ,sBAAsB,mBAAO,CAAC,oEAAmB;AACjD,kBAAkB,mBAAO,CAAC,8DAAgB;;AAE1C,iBAAiB,mBAAO,CAAC,oEAAmB;;;;;;;;;;;;;ACLhC;;AAEZ,oBAAoB,mBAAO,CAAC,mEAAmB;;AAE/C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,YAAY;AACZ,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;ACjMY;;AAEZ,kBAAkB,mBAAO,CAAC,8DAAgB;;AAE1C,iBAAiB,mBAAO,CAAC,0DAAc;;;;;;;;;;;;;ACJ3B;;AAEZ,iBAAiB,mBAAO,CAAC,gEAAiB;;;;;;;;;;;;ACF1C;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,4BAA4B;AACzE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2BAA2B;AACrE;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,6BAA6B;;AAE7B;AACA,0CAA0C,kCAAkC,oBAAoB;;AAEhG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2CAA2C,gCAAgC;AAC3E;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA,qCAAqC,mBAAmB;AACxD;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA,4BAA4B,iCAAiC,aAAa,GAAG;AAC7E;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA,2CAA2C,kBAAkB;;AAE7D;AACA;AAC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CAA2B,IAA3B,CAAP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1FiB4V,OAoHZO,QAAQ,CAAC,OAAO1X,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyC2X,MAA1C,EAAkDC;AApH9CT,OAsHZ1D,aAAaA;AAtHD0D,OAwHZI,WAAWA;;;;;;;;;;;;;;;ACpIpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;ACvLtC;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C,sBAAsB,EAAE;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;;;;;;;;;;;ACzLD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB;;AAEhB;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAK,KAA6B;AAClC;AACA;AACA,EAAE,UAAU,IAA4E;AACxF;AACA,EAAE,iCAAqB,EAAE,mCAAE;AAC3B;AACA,GAAG;AAAA,oGAAC;AACJ,EAAE,MAAM,EAEN;AACF,CAAC;;;;;;;;;;;;ACnDD,eAAe,KAAoD,oBAAoB,SAAgE,CAAC,iBAAiB,aAAa,kBAAkB,SAAS,6BAA6B,6BAA6B,YAAY,4BAA4B,sBAAsB,mBAAmB,SAAS,kCAAkC,+BAA+B,eAAe,WAAW,IAAI,mBAAmB,6CAA6C,iBAAiB,oBAAoB,kBAAkB,wBAAwB,cAAc,cAAc,aAAa,eAAe,OAAO,iBAAiB,eAAe,kBAAkB,8CAA8C,gBAAgB,sBAAsB,iBAAiB,gBAAgB,iBAAiB,gBAAgB,kBAAkB,kBAAkB,0BAA0B,yEAAyE,aAAa,gCAAgC,qFAAqF,EAAE,gBAAgB,cAAc,2DAA2D,iCAAiC,0BAA0B,mBAAmB,QAAQ,KAAK,eAAe,QAAQ,eAAe,QAAQ,sBAAsB,UAAU,wBAAwB,QAAQ,KAAK,eAAe,QAAQ,eAAe,QAAQ,sBAAsB,UAAU,gBAAgB,QAAQ,KAAK,eAAe,QAAQ,eAAe,QAAQ,sBAAsB,UAAU,+BAA+B,SAAS,cAAc,kCAAkC,WAAW,QAAQ,iBAAiB,yGAAyG,MAAM,KAAK,WAAW,WAAW,UAAU,iCAAiC,yBAAyB,oBAAoB,mBAAmB,iHAAiH,mBAAmB,iBAAiB,wBAAwB,cAAc,cAAc,WAAW,kBAAkB,WAAW,kBAAkB,WAAW,sBAAsB,iCAAiC,mBAAmB,iBAAiB,yEAAyE,iBAAiB,iBAAiB,kBAAkB,qCAAqC,cAAc,WAAW,kBAAkB,WAAW,kBAAkB,WAAW,kEAAkE,4HAA4H,iBAAiB,sBAAsB,cAAc,qHAAqH,cAAc,iBAAiB,kBAAkB,qBAAqB,EAAE,oBAAoB,mCAAmC,eAAe,EAAE,iBAAiB,0BAA0B,iBAAiB,0BAA0B,WAAW,yDAAyD,uBAAuB,qBAAqB,gCAAgC,WAAW,wKAAwK,SAAS,oBAAoB,kBAAkB,qBAAqB,qDAAqD,EAAE,iBAAiB,6CAA6C,8BAA8B,0DAA0D,EAAE,uBAAuB,kCAAkC,kBAAkB,0BAA0B,6BAA6B,8CAA8C,IAAI,IAAI,sBAAsB,EAAE,oBAAoB,wCAAwC,6BAA6B,uFAAuF,uBAAuB,4BAA4B,2CAA2C,EAAE,gBAAgB,yBAAyB,IAAI,EAAE,eAAe,gBAAgB,wBAAwB,2BAA2B,aAAa,6BAA6B,oBAAoB,qBAAqB,8BAA8B,iEAAiE,EAAE,SAAS,iBAAiB,OAAO,gBAAgB,SAAS,iBAAiB,WAAW,0BAA0B,0NAA0N,oCAAoC,8DAA8D,mBAAmB,0CAA0C,oDAAoD,wCAAwC,kBAAkB,+BAA+B,oCAAoC,6HAA6H,iCAAiC,UAAU,yDAAyD,wBAAwB,EAAE,uBAAuB,+BAA+B,kEAAkE,IAAI,4GAA4G,SAAS,uEAAuE,0BAA0B,6CAA6C,2CAA2C,qCAAqC,0BAA0B,UAAU,UAAU,wCAAwC,yBAAyB,oEAAoE,qBAAqB,oCAAoC,WAAW,2BAA2B,WAAW,mCAAmC,kCAAkC,kBAAkB,aAAa,UAAU,2CAA2C,WAAW,gCAAgC,oCAAoC,qCAAqC,0BAA0B,aAAa,UAAU,EAAE,GAAG;;;;;;;;;;;;ACAj5M,eAAe,KAAoD,oBAAoB,SAA2D,CAAC,iBAAiB,aAAa,2GAA2G,EAAE,OAAO,IAAI,OAAO,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,sBAAsB,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,yBAAyB,gBAAgB,yDAAyD,IAAI,kBAAkB,6DAA6D,+CAA+C,iBAAiB,8GAA8G,yCAAyC,eAAe,yCAAyC,eAAe,OAAO,8CAA8C,kDAAkD,eAAe,mBAAmB,IAAI,mMAAmM,aAAa,OAAO,kBAAkB,sBAAsB,mBAAmB,MAAM,eAAe,kDAAkD,KAAK,aAAa,WAAW,4BAA4B,mBAAmB,yBAAyB,4BAA4B,cAAc,MAAM,yBAAyB,KAAK,8BAA8B,YAAY,uCAAuC,GAAG,iBAAiB,cAAc,mDAAmD,kBAAkB,2BAA2B,oBAAoB,qBAAqB,iCAAiC,0BAA0B,wCAAwC,uCAAuC,iBAAiB,oJAAoJ,mBAAmB,gBAAgB,mBAAmB,cAAc,oLAAoL,qBAAqB,SAAS,sBAAsB,6CAA6C,wBAAwB,WAAW,4CAA4C,yBAAyB,4BAA4B,0BAA0B,0BAA0B,sBAAsB,oCAAoC,oBAAoB,yBAAyB,qBAAqB,yBAAyB,mBAAmB,yBAAyB,oBAAoB,8BAA8B,oBAAoB,yBAAyB,sBAAsB,yBAAyB,sBAAsB,yBAAyB,2BAA2B,0BAA0B,mBAAmB,sCAAsC,sBAAsB,yBAAyB,yBAAyB,kDAAkD,wDAAwD,sBAAsB,iBAAiB,oFAAoF,0DAA0D,UAAU,gCAAgC,gCAAgC,yDAAyD,0BAA0B,wCAAwC,+BAA+B,+BAA+B,oCAAoC,6BAA6B,qBAAqB,0BAA0B,sBAAsB,iDAAiD,2KAA2K,iBAAiB,iCAAiC,qFAAqF,sBAAsB,wBAAwB,qBAAqB,8BAA8B,mBAAmB,sBAAsB,qBAAqB,aAAa,YAAY,2BAA2B,WAAW,gDAAgD,sCAAsC,sCAAsC,qBAAqB,qBAAqB,WAAW,8DAA8D,mBAAmB,0BAA0B,wBAAwB,sBAAsB,WAAW,wCAAwC,uIAAuI,2CAA2C,eAAe,2BAA2B,+BAA+B,qBAAqB,2BAA2B,IAAI,2ZAA2Z,iCAAiC,kCAAkC,EAAE,wBAAwB,sDAAsD,wBAAwB,oFAAoF,cAAc,oHAAoH,0BAA0B,wBAAwB,sBAAsB,kBAAkB,wBAAwB,qBAAqB,+BAA+B,qBAAqB,oBAAoB,yBAAyB,qBAAqB,gCAAgC,qBAAqB,8CAA8C,0BAA0B,6BAA6B,uBAAuB,6BAA6B,GAAG,GAAG,sDAAsD,kBAAkB,2CAA2C,gBAAgB,oBAAoB;;;;;;;;;;;;ACAn7M;AACA,KAAK,IAA0C;AAC/C,EAAE,iCAAQ,EAAE,6CAAS,EAAE,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE;AAClC;AACA,MAAM,EAKJ;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACvEW;;AAEZ,kBAAkB,mBAAO,CAAC,4DAAe;AACzC,cAAc,mBAAO,CAAC,oDAAW;AACjC,kBAAkB,mBAAO,CAAC,8DAAgB;;AAE1C,sBAAsB;AACtB;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,gDAAS;AAC3B,WAAW,mBAAO,CAAC,kDAAU;AAC7B;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,wEAAqB;AAClD,qBAAqB,mBAAO,CAAC,wEAAqB;AAClD,kBAAkB,mBAAO,CAAC,kEAAkB;AAC5C,kBAAkB,mBAAO,CAAC,kEAAkB;AAC5C,UAAU,mBAAO,CAAC,8DAAgB;AAClC,oBAAoB,mBAAO,CAAC,sEAAoB;;AAEhD;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA,8CAA8C,EAAE;AAChD;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,QAAQ;AACxB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,MAAM;AACzB,mBAAmB,aAAa;AAChC,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,uCAAuC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,mBAAmB,MAAM;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,MAAM;AACzB,mBAAmB,MAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,sBAAsB;;AAE7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,MAAM;AACzB,mBAAmB,SAAS;AAC5B,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,MAAM;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,SAAS;AAC5B,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,mDAAmD,kBAAkB;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,mBAAmB,SAAS;AAC5B,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,uDAAuD;AACvD;;AAEA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAQ,KAA6B;AACrC;AACA;;AAEA;AACA,QAAQ,IAA0C;AAClD,QAAQ,mCAAO;AACf;AACA,SAAS;AAAA,oGAAC;AACV;AACA,CAAC;;;;;;;;;;;;;ACjiCD;AAAA;AAAA,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW;AACzC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB;AAC/D;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;A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;;;;ACxFD;AACA;AACA;;AAEA,CAAC;AACD;AACA,eAAe,oCAAoC;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,sCAAsC;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;;AAEA;AACA,2BAA2B,6BAA6B;AACxD,KAAK;;AAEL;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;AC1HD;AACA;AACA;;AAEA,CAAC;AACD;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;;;;;;;;;;;ACtED;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iCAAiC;AAC1D,yBAAyB,kCAAkC;AAC3D,yBAAyB,iCAAiC;AAC1D,yB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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\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\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 = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./forum.ts\");\n","export * from './src/common';\nexport * from './src/forum';\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _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}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.4.1'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector !== '#' ? $(document).find(selector) : null\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // https://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.dayjs_plugin_localizedFormat=t()}(this,function(){\"use strict\";return function(e,t,o){var n=t.prototype,r=n.format,M={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};o.en.formats=M;n.format=function(e){void 0===e&&(e=\"YYYY-MM-DDTHH:mm:ssZ\");var t=this.$locale().formats,o=void 0===t?{}:t,n=e.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(e,t,n){var r=n&&n.toUpperCase();return t||o[n]||M[n]||o[r].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,function(e,t,o){return t||o.slice(1)})});return r.call(this,n)}}});\n","!function(r,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):r.dayjs_plugin_relativeTime=t()}(this,function(){\"use strict\";return function(r,t,e){var n=t.prototype;e.en.relativeTime={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};var o=function(r,t,n,o){for(var d,i,u,a=n.$locale().relativeTime,f=[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],s=f.length,l=0;l<s;l+=1){var h=f[l];h.d&&(d=o?e(r).diff(n,h.d,!0):n.diff(r,h.d,!0));var m=Math.round(Math.abs(d));if(u=d>0,m<=h.r||!h.r){1===m&&l>0&&(h=f[l-1]);var c=a[h.l];i=\"string\"==typeof c?c.replace(\"%d\",m):c(m,t,h.l,u);break}}return t?i:(u?a.future:a.past).replace(\"%s\",i)};n.to=function(r,t){return o(r,t,this,!0)},n.from=function(r,t){return o(r,t,this)};var d=function(r){return r.$u?e.utc():e()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}});\n","module.exports = global[\"ColorThief\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./color-thief.umd.js\");","module.exports = global[\"Mousetrap\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./mousetrap.js\");","module.exports = global[\"classNames\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./index.js\");","module.exports = global[\"dayjs\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./dayjs.min.js\");","module.exports = global[\"jQuery\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/imports-loader/index.js?this=>window!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./zepto.js\");","module.exports = global[\"m\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./index.js\");","if(!global[\"m\"]) global[\"m\"] = {};\nmodule.exports = global[\"m\"][\"bidi\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./bidi.js\");","module.exports = global[\"moment\"] = require(\"-!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/expose-loader/index.js?dayjs!/data/Programming/Projects/flarum/dev_env/packages/core/js/node_modules/source-map-loader/index.js!./dayjs.min.js\");","/*!\n * HC-Sticky\n * =========\n * Version: 2.2.3\n * Author: Some Web Media\n * Author URL: http://somewebmedia.com\n * Plugin URL: https://github.com/somewebmedia/hc-sticky\n * Description: Cross-browser plugin that makes any element on your page visible while you scroll\n * License: MIT\n */\n!function(t,e){\"use strict\";if(\"object\"==typeof module&&\"object\"==typeof module.exports){if(!t.document)throw new Error(\"HC-Sticky requires a browser to run.\");module.exports=e(t)}else\"function\"==typeof define&&define.amd?define(\"hcSticky\",[],e(t)):e(t)}(\"undefined\"!=typeof window?window:this,function(U){\"use strict\";var Y={top:0,bottom:0,bottomEnd:0,innerTop:0,innerSticker:null,stickyClass:\"sticky\",stickTo:null,followScroll:!0,responsive:null,mobileFirst:!1,onStart:null,onStop:null,onBeforeResize:null,onResize:null,resizeDebounce:100,disable:!1,queries:null,queryFlow:\"down\"},$=function(t,e,o){console.log(\"%c! HC Sticky:%c \"+t+\"%c \"+o+\" is now deprecated and will be removed. Use%c \"+e+\"%c instead.\",\"color: red\",\"color: darkviolet\",\"color: black\",\"color: darkviolet\",\"color: black\")},Q=U.document,X=function(n,f){var o=this;if(\"string\"==typeof n&&(n=Q.querySelector(n)),!n)return!1;f.queries&&$(\"queries\",\"responsive\",\"option\"),f.queryFlow&&$(\"queryFlow\",\"mobileFirst\",\"option\");var p={},d=X.Helpers,s=n.parentNode;\"static\"===d.getStyle(s,\"position\")&&(s.style.position=\"relative\");var u=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};d.isEmptyObject(t)&&!d.isEmptyObject(p)||(p=Object.assign({},Y,p,t))},t=function(){return p.disable},e=function(){var t,e=p.responsive||p.queries;if(e){var o=U.innerWidth;if(t=f,(p=Object.assign({},Y,t||{})).mobileFirst)for(var i in e)i<=o&&!d.isEmptyObject(e[i])&&u(e[i]);else{var n=[];for(var s in e){var r={};r[s]=e[s],n.push(r)}for(var l=n.length-1;0<=l;l--){var a=n[l],c=Object.keys(a)[0];o<=c&&!d.isEmptyObject(a[c])&&u(a[c])}}}},r={css:{},position:null,stick:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};d.hasClass(n,p.stickyClass)||(!1===l.isAttached&&l.attach(),r.position=\"fixed\",n.style.position=\"fixed\",n.style.left=l.offsetLeft+\"px\",n.style.width=l.width,void 0===t.bottom?n.style.bottom=\"auto\":n.style.bottom=t.bottom+\"px\",void 0===t.top?n.style.top=\"auto\":n.style.top=t.top+\"px\",n.classList?n.classList.add(p.stickyClass):n.className+=\" \"+p.stickyClass,p.onStart&&p.onStart.call(n,Object.assign({},p)))},release:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(t.stop=t.stop||!1,!0===t.stop||\"fixed\"===r.position||null===r.position||!(void 0===t.top&&void 0===t.bottom||void 0!==t.top&&(parseInt(d.getStyle(n,\"top\"))||0)===t.top||void 0!==t.bottom&&(parseInt(d.getStyle(n,\"bottom\"))||0)===t.bottom)){!0===t.stop?!0===l.isAttached&&l.detach():!1===l.isAttached&&l.attach();var e=t.position||r.css.position;r.position=e,n.style.position=e,n.style.left=!0===t.stop?r.css.left:l.positionLeft+\"px\",n.style.width=\"absolute\"!==e?r.css.width:l.width,void 0===t.bottom?n.style.bottom=!0===t.stop?\"\":\"auto\":n.style.bottom=t.bottom+\"px\",void 0===t.top?n.style.top=!0===t.stop?\"\":\"auto\":n.style.top=t.top+\"px\",n.classList?n.classList.remove(p.stickyClass):n.className=n.className.replace(new RegExp(\"(^|\\\\b)\"+p.stickyClass.split(\" \").join(\"|\")+\"(\\\\b|$)\",\"gi\"),\" \"),p.onStop&&p.onStop.call(n,Object.assign({},p))}}},l={el:Q.createElement(\"div\"),offsetLeft:null,positionLeft:null,width:null,isAttached:!1,init:function(){for(var t in l.el.className=\"sticky-spacer\",r.css)l.el.style[t]=r.css[t];l.el.style[\"z-index\"]=\"-1\";var e=d.getStyle(n);l.offsetLeft=d.offset(n).left-(parseInt(e.marginLeft)||0),l.positionLeft=d.position(n).left,l.width=d.getStyle(n,\"width\")},attach:function(){s.insertBefore(l.el,n),l.isAttached=!0},detach:function(){l.el=s.removeChild(l.el),l.isAttached=!1}},a=void 0,c=void 0,g=void 0,m=void 0,h=void 0,v=void 0,y=void 0,b=void 0,S=void 0,w=void 0,k=void 0,E=void 0,x=void 0,L=void 0,T=void 0,j=void 0,O=void 0,C=void 0,i=function(){var t,e,o,i;r.css=(t=n,e=d.getCascadedStyle(t),o=d.getStyle(t),i={height:t.offsetHeight+\"px\",left:e.left,right:e.right,top:e.top,bottom:e.bottom,position:o.position,display:o.display,verticalAlign:o.verticalAlign,boxSizing:o.boxSizing,marginLeft:e.marginLeft,marginRight:e.marginRight,marginTop:e.marginTop,marginBottom:e.marginBottom,paddingLeft:e.paddingLeft,paddingRight:e.paddingRight},e.float&&(i.float=e.float||\"none\"),e.cssFloat&&(i.cssFloat=e.cssFloat||\"none\"),o.MozBoxSizing&&(i.MozBoxSizing=o.MozBoxSizing),i.width=\"auto\"!==e.width?e.width:\"border-box\"===i.boxSizing||\"border-box\"===i.MozBoxSizing?t.offsetWidth+\"px\":o.width,i),l.init(),a=!(!p.stickTo||!(\"document\"===p.stickTo||p.stickTo.nodeType&&9===p.stickTo.nodeType||\"object\"==typeof p.stickTo&&p.stickTo instanceof(\"undefined\"!=typeof HTMLDocument?HTMLDocument:Document))),c=p.stickTo?a?Q:\"string\"==typeof p.stickTo?Q.querySelector(p.stickTo):p.stickTo:s,T=(C=function(){var t=n.offsetHeight+(parseInt(r.css.marginTop)||0)+(parseInt(r.css.marginBottom)||0),e=(T||0)-t;return-1<=e&&e<=1?T:t})(),m=(O=function(){return a?Math.max(Q.documentElement.clientHeight,Q.body.scrollHeight,Q.documentElement.scrollHeight,Q.body.offsetHeight,Q.documentElement.offsetHeight):c.offsetHeight})(),h=a?0:d.offset(c).top,v=p.stickTo?a?0:d.offset(s).top:h,y=U.innerHeight,j=n.offsetTop-(parseInt(r.css.marginTop)||0),g=p.innerSticker?\"string\"==typeof p.innerSticker?Q.querySelector(p.innerSticker):p.innerSticker:null,b=isNaN(p.top)&&-1<p.top.indexOf(\"%\")?parseFloat(p.top)/100*y:p.top,S=isNaN(p.bottom)&&-1<p.bottom.indexOf(\"%\")?parseFloat(p.bottom)/100*y:p.bottom,w=g?g.offsetTop:p.innerTop?p.innerTop:0,k=isNaN(p.bottomEnd)&&-1<p.bottomEnd.indexOf(\"%\")?parseFloat(p.bottomEnd)/100*y:p.bottomEnd,E=h-b+w+j},z=U.pageYOffset||Q.documentElement.scrollTop,N=0,H=void 0,R=function(){T=C(),m=O(),x=h+m-b-k,L=y<T;var t=U.pageYOffset||Q.documentElement.scrollTop,e=d.offset(n).top,o=e-t,i=void 0;H=t<z?\"up\":\"down\",N=t-z,E<(z=t)?x+b+(L?S:0)-(p.followScroll&&L?0:b)<=t+T-w-(y-(E-w)<T-w&&p.followScroll&&0<(i=T-y-w)?i:0)?r.release({position:\"absolute\",bottom:v+s.offsetHeight-x-b}):L&&p.followScroll?\"down\"===H?o+T+S<=y+.9?r.stick({bottom:S}):\"fixed\"===r.position&&r.release({position:\"absolute\",top:e-b-E-N+w}):Math.ceil(o+w)<0&&\"fixed\"===r.position?r.release({position:\"absolute\",top:e-b-E+w-N}):t+b-w<=e&&r.stick({top:b-w}):r.stick({top:b-w}):r.release({stop:!0})},A=!1,B=!1,I=function(){A&&(d.event.unbind(U,\"scroll\",R),A=!1)},q=function(){null!==n.offsetParent&&\"none\"!==d.getStyle(n,\"display\")?(i(),m<=T?I():(R(),A||(d.event.bind(U,\"scroll\",R),A=!0))):I()},F=function(){n.style.position=\"\",n.style.left=\"\",n.style.top=\"\",n.style.bottom=\"\",n.style.width=\"\",n.classList?n.classList.remove(p.stickyClass):n.className=n.className.replace(new RegExp(\"(^|\\\\b)\"+p.stickyClass.split(\" \").join(\"|\")+\"(\\\\b|$)\",\"gi\"),\" \"),r.css={},!(r.position=null)===l.isAttached&&l.detach()},M=function(){F(),e(),t()?I():q()},D=function(){p.onBeforeResize&&p.onBeforeResize.call(n,Object.assign({},p)),M(),p.onResize&&p.onResize.call(n,Object.assign({},p))},P=p.resizeDebounce?d.debounce(D,p.resizeDebounce):D,W=function(){B&&(d.event.unbind(U,\"resize\",P),B=!1),I()},V=function(){B||(d.event.bind(U,\"resize\",P),B=!0),e(),t()?I():q()};this.options=function(t){return t?p[t]:Object.assign({},p)},this.refresh=M,this.update=function(t){u(t),f=Object.assign({},f,t||{}),M()},this.attach=V,this.detach=W,this.destroy=function(){W(),F()},this.triggerMethod=function(t,e){\"function\"==typeof o[t]&&o[t](e)},this.reinit=function(){$(\"reinit\",\"refresh\",\"method\"),M()},u(f),V(),d.event.bind(U,\"load\",M)};if(void 0!==U.jQuery){var i=U.jQuery,n=\"hcSticky\";i.fn.extend({hcSticky:function(e,o){return this.length?\"options\"===e?i.data(this.get(0),n).options():this.each(function(){var t=i.data(this,n);t?t.triggerMethod(e,o):(t=new X(this,e),i.data(this,n,t))}):this}})}return U.hcSticky=U.hcSticky||X,X}),function(c){\"use strict\";var t=c.hcSticky,f=c.document;\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(t,e){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0}),Array.prototype.forEach||(Array.prototype.forEach=function(t){var e,o;if(null==this)throw new TypeError(\"this is null or not defined\");var i=Object(this),n=i.length>>>0;if(\"function\"!=typeof t)throw new TypeError(t+\" is not a function\");for(1<arguments.length&&(e=arguments[1]),o=0;o<n;){var s;o in i&&(s=i[o],t.call(e,s,o,i)),o++}});var e=function(){var t=f.documentElement,e=function(){};function i(t){var e=c.event;return e.target=e.target||e.srcElement||t,e}t.addEventListener?e=function(t,e,o){t.addEventListener(e,o,!1)}:t.attachEvent&&(e=function(e,t,o){e[t+o]=o.handleEvent?function(){var t=i(e);o.handleEvent.call(o,t)}:function(){var t=i(e);o.call(e,t)},e.attachEvent(\"on\"+t,e[t+o])});var o=function(){};return t.removeEventListener?o=function(t,e,o){t.removeEventListener(e,o,!1)}:t.detachEvent&&(o=function(e,o,i){e.detachEvent(\"on\"+o,e[o+i]);try{delete e[o+i]}catch(t){e[o+i]=void 0}}),{bind:e,unbind:o}}(),r=function(t,e){return c.getComputedStyle?e?f.defaultView.getComputedStyle(t,null).getPropertyValue(e):f.defaultView.getComputedStyle(t,null):t.currentStyle?e?t.currentStyle[e.replace(/-\\w/g,function(t){return t.toUpperCase().replace(\"-\",\"\")})]:t.currentStyle:void 0},l=function(t){var e=t.getBoundingClientRect(),o=c.pageYOffset||f.documentElement.scrollTop,i=c.pageXOffset||f.documentElement.scrollLeft;return{top:e.top+o,left:e.left+i}};t.Helpers={isEmptyObject:function(t){for(var e in t)return!1;return!0},debounce:function(i,n,s){var r=void 0;return function(){var t=this,e=arguments,o=s&&!r;clearTimeout(r),r=setTimeout(function(){r=null,s||i.apply(t,e)},n),o&&i.apply(t,e)}},hasClass:function(t,e){return t.classList?t.classList.contains(e):new RegExp(\"(^| )\"+e+\"( |$)\",\"gi\").test(t.className)},offset:l,position:function(t){var e=t.offsetParent,o=l(e),i=l(t),n=r(e),s=r(t);return o.top+=parseInt(n.borderTopWidth)||0,o.left+=parseInt(n.borderLeftWidth)||0,{top:i.top-o.top-(parseInt(s.marginTop)||0),left:i.left-o.left-(parseInt(s.marginLeft)||0)}},getStyle:r,getCascadedStyle:function(t){var e=t.cloneNode(!0);e.style.display=\"none\",Array.prototype.slice.call(e.querySelectorAll('input[type=\"radio\"]')).forEach(function(t){t.removeAttribute(\"name\")}),t.parentNode.insertBefore(e,t.nextSibling);var o=void 0;e.currentStyle?o=e.currentStyle:c.getComputedStyle&&(o=f.defaultView.getComputedStyle(e,null));var i={};for(var n in o)!isNaN(n)||\"string\"!=typeof o[n]&&\"number\"!=typeof o[n]||(i[n]=o[n]);if(Object.keys(i).length<3)for(var s in i={},o)isNaN(s)||(i[o[s].replace(/-\\w/g,function(t){return t.toUpperCase().replace(\"-\",\"\")})]=o.getPropertyValue(o[s]));if(i.margin||\"auto\"!==i.marginLeft?i.margin||i.marginLeft!==i.marginRight||i.marginLeft!==i.marginTop||i.marginLeft!==i.marginBottom||(i.margin=i.marginLeft):i.margin=\"auto\",!i.margin&&\"0px\"===i.marginLeft&&\"0px\"===i.marginRight){var r=t.offsetLeft-t.parentNode.offsetLeft,l=r-(parseInt(i.left)||0)-(parseInt(i.right)||0),a=t.parentNode.offsetWidth-t.offsetWidth-r-(parseInt(i.right)||0)+(parseInt(i.left)||0)-l;0!==a&&1!==a||(i.margin=\"auto\")}return e.parentNode.removeChild(e),e=null,i},event:e}}(window);","/*** IMPORTS FROM imports-loader ***/\n(function() {\n\n/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n(function(global, factory) {\n if (typeof define === 'function' && define.amd)\n define(function() { return factory(global) })\n else\n factory(global)\n}(this, function(window) {\n var Zepto = (function() {\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\n document = window.document,\n elementDisplay = {}, classCache = {},\n cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n rootNodeRE = /^(?:body|html)$/i,\n capitalRE = /([A-Z])/g,\n\n // special attributes that should be get/set via method calls\n methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\n adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n table = document.createElement('table'),\n tableRow = document.createElement('tr'),\n containers = {\n 'tr': document.createElement('tbody'),\n 'tbody': table, 'thead': table, 'tfoot': table,\n 'td': tableRow, 'th': tableRow,\n '*': document.createElement('div')\n },\n readyRE = /complete|loaded|interactive/,\n simpleSelectorRE = /^[\\w-]*$/,\n class2type = {},\n toString = class2type.toString,\n zepto = {},\n camelize, uniq,\n tempParent = document.createElement('div'),\n propMap = {\n 'tabindex': 'tabIndex',\n 'readonly': 'readOnly',\n 'for': 'htmlFor',\n 'class': 'className',\n 'maxlength': 'maxLength',\n 'cellspacing': 'cellSpacing',\n 'cellpadding': 'cellPadding',\n 'rowspan': 'rowSpan',\n 'colspan': 'colSpan',\n 'usemap': 'useMap',\n 'frameborder': 'frameBorder',\n 'contenteditable': 'contentEditable'\n },\n isArray = Array.isArray ||\n function(object){ return object instanceof Array }\n\n zepto.matches = function(element, selector) {\n if (!selector || !element || element.nodeType !== 1) return false\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\n element.mozMatchesSelector || element.oMatchesSelector ||\n element.matchesSelector\n if (matchesSelector) return matchesSelector.call(element, selector)\n // fall back to performing a selector:\n var match, parent = element.parentNode, temp = !parent\n if (temp) (parent = tempParent).appendChild(element)\n match = ~zepto.qsa(parent, selector).indexOf(element)\n temp && tempParent.removeChild(element)\n return match\n }\n\n function type(obj) {\n return obj == null ? String(obj) :\n class2type[toString.call(obj)] || \"object\"\n }\n\n function isFunction(value) { return type(value) == \"function\" }\n function isWindow(obj) { return obj != null && obj == obj.window }\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n function isObject(obj) { return type(obj) == \"object\" }\n function isPlainObject(obj) {\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n }\n\n function likeArray(obj) {\n var length = !!obj && 'length' in obj && obj.length,\n type = $.type(obj)\n\n return 'function' != type && !isWindow(obj) && (\n 'array' == type || length === 0 ||\n (typeof length == 'number' && length > 0 && (length - 1) in obj)\n )\n }\n\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n function dasherize(str) {\n return str.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/_/g, '-')\n .toLowerCase()\n }\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n function classRE(name) {\n return name in classCache ?\n classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'))\n }\n\n function maybeAddPx(name, value) {\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\n }\n\n function defaultDisplay(nodeName) {\n var element, display\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName)\n document.body.appendChild(element)\n display = getComputedStyle(element, '').getPropertyValue(\"display\")\n element.parentNode.removeChild(element)\n display == \"none\" && (display = \"block\")\n elementDisplay[nodeName] = display\n }\n return elementDisplay[nodeName]\n }\n\n function children(element) {\n return 'children' in element ?\n slice.call(element.children) :\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n }\n\n function Z(dom, selector) {\n var i, len = dom ? dom.length : 0\n for (i = 0; i < len; i++) this[i] = dom[i]\n this.length = len\n this.selector = selector || ''\n }\n\n // `$.zepto.fragment` takes a html string and an optional tag name\n // to generate DOM nodes from the given html string.\n // The generated DOM nodes are returned as an array.\n // This function can be overridden in plugins for example to make\n // it compatible with browsers that don't support the DOM fully.\n zepto.fragment = function(html, name, properties) {\n var dom, nodes, container\n\n // A special case optimization for a single tag\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n if (!dom) {\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\")\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n if (!(name in containers)) name = '*'\n\n container = containers[name]\n container.innerHTML = '' + html\n dom = $.each(slice.call(container.childNodes), function(){\n container.removeChild(this)\n })\n }\n\n if (isPlainObject(properties)) {\n nodes = $(dom)\n $.each(properties, function(key, value) {\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n else nodes.attr(key, value)\n })\n }\n\n return dom\n }\n\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\n // of nodes with `$.fn` and thus supplying all the Zepto functions\n // to the array. This method can be overridden in plugins.\n zepto.Z = function(dom, selector) {\n return new Z(dom, selector)\n }\n\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\n // collection. This method can be overridden in plugins.\n zepto.isZ = function(object) {\n return object instanceof zepto.Z\n }\n\n // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n // takes a CSS selector and an optional context (and handles various\n // special cases).\n // This method can be overridden in plugins.\n zepto.init = function(selector, context) {\n var dom\n // If nothing given, return an empty Zepto collection\n if (!selector) return zepto.Z()\n // Optimize for string selectors\n else if (typeof selector == 'string') {\n selector = selector.trim()\n // If it's a html fragment, create nodes from it\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\n // is thrown if the fragment doesn't begin with <\n if (selector[0] == '<' && fragmentRE.test(selector))\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // If it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // If a function is given, call it when the DOM is ready\n else if (isFunction(selector)) return $(document).ready(selector)\n // If a Zepto collection is given, just return it\n else if (zepto.isZ(selector)) return selector\n else {\n // normalize array if an array of nodes is given\n if (isArray(selector)) dom = compact(selector)\n // Wrap DOM nodes.\n else if (isObject(selector))\n dom = [selector], selector = null\n // If it's a html fragment, create nodes from it\n else if (fragmentRE.test(selector))\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // And last but no least, if it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // create a new Zepto collection from the nodes found\n return zepto.Z(dom, selector)\n }\n\n // `$` will be the base `Zepto` object. When calling this\n // function just call `$.zepto.init, which makes the implementation\n // details of selecting nodes and creating Zepto collections\n // patchable in plugins.\n $ = function(selector, context){\n return zepto.init(selector, context)\n }\n\n function extend(target, source, deep) {\n for (key in source)\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n target[key] = {}\n if (isArray(source[key]) && !isArray(target[key]))\n target[key] = []\n extend(target[key], source[key], deep)\n }\n else if (source[key] !== undefined) target[key] = source[key]\n }\n\n // Copy all but undefined properties from one or more\n // objects to the `target` object.\n $.extend = function(target){\n var deep, args = slice.call(arguments, 1)\n if (typeof target == 'boolean') {\n deep = target\n target = args.shift()\n }\n args.forEach(function(arg){ extend(target, arg, deep) })\n return target\n }\n\n // `$.zepto.qsa` is Zepto's CSS selector implementation which\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n // This method can be overridden in plugins.\n zepto.qsa = function(element, selector){\n var found,\n maybeID = selector[0] == '#',\n maybeClass = !maybeID && selector[0] == '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n isSimple = simpleSelectorRE.test(nameOnly)\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\n slice.call(\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n element.getElementsByTagName(selector) : // Or a tag\n element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n )\n }\n\n function filtered(nodes, selector) {\n return selector == null ? $(nodes) : $(nodes).filter(selector)\n }\n\n $.contains = document.documentElement.contains ?\n function(parent, node) {\n return parent !== node && parent.contains(node)\n } :\n function(parent, node) {\n while (node && (node = node.parentNode))\n if (node === parent) return true\n return false\n }\n\n function funcArg(context, arg, idx, payload) {\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\n }\n\n function setAttribute(node, name, value) {\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n }\n\n // access className property while respecting SVGAnimatedString\n function className(node, value){\n var klass = node.className || '',\n svg = klass && klass.baseVal !== undefined\n\n if (value === undefined) return svg ? klass.baseVal : klass\n svg ? (klass.baseVal = value) : (node.className = value)\n }\n\n // \"true\" => true\n // \"false\" => false\n // \"null\" => null\n // \"42\" => 42\n // \"42.5\" => 42.5\n // \"08\" => \"08\"\n // JSON => parse if valid\n // String => self\n function deserializeValue(value) {\n try {\n return value ?\n value == \"true\" ||\n ( value == \"false\" ? false :\n value == \"null\" ? null :\n +value + \"\" == value ? +value :\n /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n value )\n : value\n } catch(e) {\n return value\n }\n }\n\n $.type = type\n $.isFunction = isFunction\n $.isWindow = isWindow\n $.isArray = isArray\n $.isPlainObject = isPlainObject\n\n $.isEmptyObject = function(obj) {\n var name\n for (name in obj) return false\n return true\n }\n\n $.isNumeric = function(val) {\n var num = Number(val), type = typeof val\n return val != null && type != 'boolean' &&\n (type != 'string' || val.length) &&\n !isNaN(num) && isFinite(num) || false\n }\n\n $.inArray = function(elem, array, i){\n return emptyArray.indexOf.call(array, elem, i)\n }\n\n $.camelCase = camelize\n $.trim = function(str) {\n return str == null ? \"\" : String.prototype.trim.call(str)\n }\n\n // plugin compatibility\n $.uuid = 0\n $.support = { }\n $.expr = { }\n $.noop = function() {}\n\n $.map = function(elements, callback){\n var value, values = [], i, key\n if (likeArray(elements))\n for (i = 0; i < elements.length; i++) {\n value = callback(elements[i], i)\n if (value != null) values.push(value)\n }\n else\n for (key in elements) {\n value = callback(elements[key], key)\n if (value != null) values.push(value)\n }\n return flatten(values)\n }\n\n $.each = function(elements, callback){\n var i, key\n if (likeArray(elements)) {\n for (i = 0; i < elements.length; i++)\n if (callback.call(elements[i], i, elements[i]) === false) return elements\n } else {\n for (key in elements)\n if (callback.call(elements[key], key, elements[key]) === false) return elements\n }\n\n return elements\n }\n\n $.grep = function(elements, callback){\n return filter.call(elements, callback)\n }\n\n if (window.JSON) $.parseJSON = JSON.parse\n\n // Populate the class2type map\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\n })\n\n // Define methods that will be available on all\n // Zepto collections\n $.fn = {\n constructor: zepto.Z,\n length: 0,\n\n // Because a collection acts like an array\n // copy over these useful array functions.\n forEach: emptyArray.forEach,\n reduce: emptyArray.reduce,\n push: emptyArray.push,\n sort: emptyArray.sort,\n splice: emptyArray.splice,\n indexOf: emptyArray.indexOf,\n concat: function(){\n var i, value, args = []\n for (i = 0; i < arguments.length; i++) {\n value = arguments[i]\n args[i] = zepto.isZ(value) ? value.toArray() : value\n }\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\n },\n\n // `map` and `slice` in the jQuery API work differently\n // from their array counterparts\n map: function(fn){\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n },\n slice: function(){\n return $(slice.apply(this, arguments))\n },\n\n ready: function(callback){\n // need to check if document.body exists for IE as that browser reports\n // document ready when it hasn't yet created the body element\n if (readyRE.test(document.readyState) && document.body) callback($)\n else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)\n return this\n },\n get: function(idx){\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n },\n toArray: function(){ return this.get() },\n size: function(){\n return this.length\n },\n remove: function(){\n return this.each(function(){\n if (this.parentNode != null)\n this.parentNode.removeChild(this)\n })\n },\n each: function(callback){\n emptyArray.every.call(this, function(el, idx){\n return callback.call(el, idx, el) !== false\n })\n return this\n },\n filter: function(selector){\n if (isFunction(selector)) return this.not(this.not(selector))\n return $(filter.call(this, function(element){\n return zepto.matches(element, selector)\n }))\n },\n add: function(selector,context){\n return $(uniq(this.concat($(selector,context))))\n },\n is: function(selector){\n return this.length > 0 && zepto.matches(this[0], selector)\n },\n not: function(selector){\n var nodes=[]\n if (isFunction(selector) && selector.call !== undefined)\n this.each(function(idx){\n if (!selector.call(this,idx)) nodes.push(this)\n })\n else {\n var excludes = typeof selector == 'string' ? this.filter(selector) :\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n this.forEach(function(el){\n if (excludes.indexOf(el) < 0) nodes.push(el)\n })\n }\n return $(nodes)\n },\n has: function(selector){\n return this.filter(function(){\n return isObject(selector) ?\n $.contains(this, selector) :\n $(this).find(selector).size()\n })\n },\n eq: function(idx){\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n },\n first: function(){\n var el = this[0]\n return el && !isObject(el) ? el : $(el)\n },\n last: function(){\n var el = this[this.length - 1]\n return el && !isObject(el) ? el : $(el)\n },\n find: function(selector){\n var result, $this = this\n if (!selector) result = $()\n else if (typeof selector == 'object')\n result = $(selector).filter(function(){\n var node = this\n return emptyArray.some.call($this, function(parent){\n return $.contains(parent, node)\n })\n })\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n else result = this.map(function(){ return zepto.qsa(this, selector) })\n return result\n },\n closest: function(selector, context){\n var nodes = [], collection = typeof selector == 'object' && $(selector)\n this.each(function(_, node){\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n node = node !== context && !isDocument(node) && node.parentNode\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\n })\n return $(nodes)\n },\n parents: function(selector){\n var ancestors = [], nodes = this\n while (nodes.length > 0)\n nodes = $.map(nodes, function(node){\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n ancestors.push(node)\n return node\n }\n })\n return filtered(ancestors, selector)\n },\n parent: function(selector){\n return filtered(uniq(this.pluck('parentNode')), selector)\n },\n children: function(selector){\n return filtered(this.map(function(){ return children(this) }), selector)\n },\n contents: function() {\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\n },\n siblings: function(selector){\n return filtered(this.map(function(i, el){\n return filter.call(children(el.parentNode), function(child){ return child!==el })\n }), selector)\n },\n empty: function(){\n return this.each(function(){ this.innerHTML = '' })\n },\n // `pluck` is borrowed from Prototype.js\n pluck: function(property){\n return $.map(this, function(el){ return el[property] })\n },\n show: function(){\n return this.each(function(){\n this.style.display == \"none\" && (this.style.display = '')\n if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\")\n this.style.display = defaultDisplay(this.nodeName)\n })\n },\n replaceWith: function(newContent){\n return this.before(newContent).remove()\n },\n wrap: function(structure){\n var func = isFunction(structure)\n if (this[0] && !func)\n var dom = $(structure).get(0),\n clone = dom.parentNode || this.length > 1\n\n return this.each(function(index){\n $(this).wrapAll(\n func ? structure.call(this, index) :\n clone ? dom.cloneNode(true) : dom\n )\n })\n },\n wrapAll: function(structure){\n if (this[0]) {\n $(this[0]).before(structure = $(structure))\n var children\n // drill down to the inmost element\n while ((children = structure.children()).length) structure = children.first()\n $(structure).append(this)\n }\n return this\n },\n wrapInner: function(structure){\n var func = isFunction(structure)\n return this.each(function(index){\n var self = $(this), contents = self.contents(),\n dom = func ? structure.call(this, index) : structure\n contents.length ? contents.wrapAll(dom) : self.append(dom)\n })\n },\n unwrap: function(){\n this.parent().each(function(){\n $(this).replaceWith($(this).children())\n })\n return this\n },\n clone: function(){\n return this.map(function(){ return this.cloneNode(true) })\n },\n hide: function(){\n return this.css(\"display\", \"none\")\n },\n toggle: function(setting){\n return this.each(function(){\n var el = $(this)\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\n })\n },\n prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },\n next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },\n html: function(html){\n return 0 in arguments ?\n this.each(function(idx){\n var originHtml = this.innerHTML\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\n }) :\n (0 in this ? this[0].innerHTML : null)\n },\n text: function(text){\n return 0 in arguments ?\n this.each(function(idx){\n var newText = funcArg(this, text, idx, this.textContent)\n this.textContent = newText == null ? '' : ''+newText\n }) :\n (0 in this ? this.pluck('textContent').join(\"\") : null)\n },\n attr: function(name, value){\n var result\n return (typeof name == 'string' && !(1 in arguments)) ?\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\n this.each(function(idx){\n if (this.nodeType !== 1) return\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n })\n },\n removeAttr: function(name){\n return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){\n setAttribute(this, attribute)\n }, this)})\n },\n prop: function(name, value){\n name = propMap[name] || name\n return (1 in arguments) ?\n this.each(function(idx){\n this[name] = funcArg(this, value, idx, this[name])\n }) :\n (this[0] && this[0][name])\n },\n removeProp: function(name){\n name = propMap[name] || name\n return this.each(function(){ delete this[name] })\n },\n data: function(name, value){\n var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()\n\n var data = (1 in arguments) ?\n this.attr(attrName, value) :\n this.attr(attrName)\n\n return data !== null ? deserializeValue(data) : undefined\n },\n val: function(value){\n if (0 in arguments) {\n if (value == null) value = \"\"\n return this.each(function(idx){\n this.value = funcArg(this, value, idx, this.value)\n })\n } else {\n return this[0] && (this[0].multiple ?\n $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :\n this[0].value)\n }\n },\n offset: function(coordinates){\n if (coordinates) return this.each(function(index){\n var $this = $(this),\n coords = funcArg(this, coordinates, index, $this.offset()),\n parentOffset = $this.offsetParent().offset(),\n props = {\n top: coords.top - parentOffset.top,\n left: coords.left - parentOffset.left\n }\n\n if ($this.css('position') == 'static') props['position'] = 'relative'\n $this.css(props)\n })\n if (!this.length) return null\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\n return {top: 0, left: 0}\n var obj = this[0].getBoundingClientRect()\n return {\n left: obj.left + window.pageXOffset,\n top: obj.top + window.pageYOffset,\n width: Math.round(obj.width),\n height: Math.round(obj.height)\n }\n },\n css: function(property, value){\n if (arguments.length < 2) {\n var element = this[0]\n if (typeof property == 'string') {\n if (!element) return\n return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)\n } else if (isArray(property)) {\n if (!element) return\n var props = {}\n var computedStyle = getComputedStyle(element, '')\n $.each(property, function(_, prop){\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n })\n return props\n }\n }\n\n var css = ''\n if (type(property) == 'string') {\n if (!value && value !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\n else\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\n } else {\n for (key in property)\n if (!property[key] && property[key] !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\n else\n css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'\n }\n\n return this.each(function(){ this.style.cssText += ';' + css })\n },\n index: function(element){\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n },\n hasClass: function(name){\n if (!name) return false\n return emptyArray.some.call(this, function(el){\n return this.test(className(el))\n }, classRE(name))\n },\n addClass: function(name){\n if (!name) return this\n return this.each(function(idx){\n if (!('className' in this)) return\n classList = []\n var cls = className(this), newName = funcArg(this, name, idx, cls)\n newName.split(/\\s+/g).forEach(function(klass){\n if (!$(this).hasClass(klass)) classList.push(klass)\n }, this)\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\n })\n },\n removeClass: function(name){\n return this.each(function(idx){\n if (!('className' in this)) return\n if (name === undefined) return className(this, '')\n classList = className(this)\n funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n classList = classList.replace(classRE(klass), \" \")\n })\n className(this, classList.trim())\n })\n },\n toggleClass: function(name, when){\n if (!name) return this\n return this.each(function(idx){\n var $this = $(this), names = funcArg(this, name, idx, className(this))\n names.split(/\\s+/g).forEach(function(klass){\n (when === undefined ? !$this.hasClass(klass) : when) ?\n $this.addClass(klass) : $this.removeClass(klass)\n })\n })\n },\n scrollTop: function(value){\n if (!this.length) return\n var hasScrollTop = 'scrollTop' in this[0]\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n return this.each(hasScrollTop ?\n function(){ this.scrollTop = value } :\n function(){ this.scrollTo(this.scrollX, value) })\n },\n scrollLeft: function(value){\n if (!this.length) return\n var hasScrollLeft = 'scrollLeft' in this[0]\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n return this.each(hasScrollLeft ?\n function(){ this.scrollLeft = value } :\n function(){ this.scrollTo(value, this.scrollY) })\n },\n position: function() {\n if (!this.length) return\n\n var elem = this[0],\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n offset.top -= parseFloat( $(elem).css('margin-top') ) || 0\n offset.left -= parseFloat( $(elem).css('margin-left') ) || 0\n\n // Add offsetParent borders\n parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0\n parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0\n\n // Subtract the two offsets\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n }\n },\n offsetParent: function() {\n return this.map(function(){\n var parent = this.offsetParent || document.body\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\n parent = parent.offsetParent\n return parent\n })\n }\n }\n\n // for now\n $.fn.detach = $.fn.remove\n\n // Generate the `width` and `height` functions\n ;['width', 'height'].forEach(function(dimension){\n var dimensionProperty =\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n $.fn[dimension] = function(value){\n var offset, el = this[0]\n if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :\n isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :\n (offset = this.offset()) && offset[dimension]\n else return this.each(function(idx){\n el = $(this)\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n })\n }\n })\n\n function traverseNode(node, fun) {\n fun(node)\n for (var i = 0, len = node.childNodes.length; i < len; i++)\n traverseNode(node.childNodes[i], fun)\n }\n\n // Generate the `after`, `prepend`, `before`, `append`,\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n adjacencyOperators.forEach(function(operator, operatorIndex) {\n var inside = operatorIndex % 2 //=> prepend, append\n\n $.fn[operator] = function(){\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n var argType, nodes = $.map(arguments, function(arg) {\n var arr = []\n argType = type(arg)\n if (argType == \"array\") {\n arg.forEach(function(el) {\n if (el.nodeType !== undefined) return arr.push(el)\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\n arr = arr.concat(zepto.fragment(el))\n })\n return arr\n }\n return argType == \"object\" || arg == null ?\n arg : zepto.fragment(arg)\n }),\n parent, copyByClone = this.length > 1\n if (nodes.length < 1) return this\n\n return this.each(function(_, target){\n parent = inside ? target : target.parentNode\n\n // convert all methods to a \"before\" operation\n target = operatorIndex == 0 ? target.nextSibling :\n operatorIndex == 1 ? target.firstChild :\n operatorIndex == 2 ? target :\n null\n\n var parentInDocument = $.contains(document.documentElement, parent)\n\n nodes.forEach(function(node){\n if (copyByClone) node = node.cloneNode(true)\n else if (!parent) return $(node).remove()\n\n parent.insertBefore(node, target)\n if (parentInDocument) traverseNode(node, function(el){\n if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&\n (!el.type || el.type === 'text/javascript') && !el.src){\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\n target['eval'].call(target, el.innerHTML)\n }\n })\n })\n })\n }\n\n // after => insertAfter\n // prepend => prependTo\n // before => insertBefore\n // append => appendTo\n $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){\n $(html)[operator](this)\n return this\n }\n })\n\n zepto.Z.prototype = Z.prototype = $.fn\n\n // Export internal API functions in the `$.zepto` namespace\n zepto.uniq = uniq\n zepto.deserializeValue = deserializeValue\n $.zepto = zepto\n\n return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n var _zid = 1, undefined,\n slice = Array.prototype.slice,\n isFunction = $.isFunction,\n isString = function(obj){ return typeof obj == 'string' },\n handlers = {},\n specialEvents={},\n focusinSupported = 'onfocusin' in window,\n focus = { focus: 'focusin', blur: 'focusout' },\n hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }\n\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'\n\n function zid(element) {\n return element._zid || (element._zid = _zid++)\n }\n function findHandlers(element, event, fn, selector) {\n event = parse(event)\n if (event.ns) var matcher = matcherFor(event.ns)\n return (handlers[zid(element)] || []).filter(function(handler) {\n return handler\n && (!event.e || handler.e == event.e)\n && (!event.ns || matcher.test(handler.ns))\n && (!fn || zid(handler.fn) === zid(fn))\n && (!selector || handler.sel == selector)\n })\n }\n function parse(event) {\n var parts = ('' + event).split('.')\n return {e: parts[0], ns: parts.slice(1).sort().join(' ')}\n }\n function matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')\n }\n\n function eventCapture(handler, captureSetting) {\n return handler.del &&\n (!focusinSupported && (handler.e in focus)) ||\n !!captureSetting\n }\n\n function realEvent(type) {\n return hover[type] || (focusinSupported && focus[type]) || type\n }\n\n function add(element, events, fn, data, selector, delegator, capture){\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n events.split(/\\s/).forEach(function(event){\n if (event == 'ready') return $(document).ready(fn)\n var handler = parse(event)\n handler.fn = fn\n handler.sel = selector\n // emulate mouseenter, mouseleave\n if (handler.e in hover) fn = function(e){\n var related = e.relatedTarget\n if (!related || (related !== this && !$.contains(this, related)))\n return handler.fn.apply(this, arguments)\n }\n handler.del = delegator\n var callback = delegator || fn\n handler.proxy = function(e){\n e = compatible(e)\n if (e.isImmediatePropagationStopped()) return\n e.data = data\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n if (result === false) e.preventDefault(), e.stopPropagation()\n return result\n }\n handler.i = set.length\n set.push(handler)\n if ('addEventListener' in element)\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n }\n function remove(element, events, fn, selector, capture){\n var id = zid(element)\n ;(events || '').split(/\\s/).forEach(function(event){\n findHandlers(element, event, fn, selector).forEach(function(handler){\n delete handlers[id][handler.i]\n if ('removeEventListener' in element)\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n })\n }\n\n $.event = { add: add, remove: remove }\n\n $.proxy = function(fn, context) {\n var args = (2 in arguments) && slice.call(arguments, 2)\n if (isFunction(fn)) {\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\n proxyFn._zid = zid(fn)\n return proxyFn\n } else if (isString(context)) {\n if (args) {\n args.unshift(fn[context], fn)\n return $.proxy.apply(null, args)\n } else {\n return $.proxy(fn[context], fn)\n }\n } else {\n throw new TypeError(\"expected function\")\n }\n }\n\n $.fn.bind = function(event, data, callback){\n return this.on(event, data, callback)\n }\n $.fn.unbind = function(event, callback){\n return this.off(event, callback)\n }\n $.fn.one = function(event, selector, data, callback){\n return this.on(event, selector, data, callback, 1)\n }\n\n var returnTrue = function(){return true},\n returnFalse = function(){return false},\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n eventMethods = {\n preventDefault: 'isDefaultPrevented',\n stopImmediatePropagation: 'isImmediatePropagationStopped',\n stopPropagation: 'isPropagationStopped'\n }\n\n function compatible(event, source) {\n if (source || !event.isDefaultPrevented) {\n source || (source = event)\n\n $.each(eventMethods, function(name, predicate) {\n var sourceMethod = source[name]\n event[name] = function(){\n this[predicate] = returnTrue\n return sourceMethod && sourceMethod.apply(source, arguments)\n }\n event[predicate] = returnFalse\n })\n\n event.timeStamp || (event.timeStamp = Date.now())\n\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n 'returnValue' in source ? source.returnValue === false :\n source.getPreventDefault && source.getPreventDefault())\n event.isDefaultPrevented = returnTrue\n }\n return event\n }\n\n function createProxy(event) {\n var key, proxy = { originalEvent: event }\n for (key in event)\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n return compatible(proxy, event)\n }\n\n $.fn.delegate = function(selector, event, callback){\n return this.on(event, selector, callback)\n }\n $.fn.undelegate = function(selector, event, callback){\n return this.off(event, selector, callback)\n }\n\n $.fn.live = function(event, callback){\n $(document.body).delegate(this.selector, event, callback)\n return this\n }\n $.fn.die = function(event, callback){\n $(document.body).undelegate(this.selector, event, callback)\n return this\n }\n\n $.fn.on = function(event, selector, data, callback, one){\n var autoRemove, delegator, $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.on(type, selector, data, fn, one)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = data, data = selector, selector = undefined\n if (callback === undefined || data === false)\n callback = data, data = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(_, element){\n if (one) autoRemove = function(e){\n remove(element, e.type, callback)\n return callback.apply(this, arguments)\n }\n\n if (selector) delegator = function(e){\n var evt, match = $(e.target).closest(selector, element).get(0)\n if (match && match !== element) {\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n }\n }\n\n add(element, event, callback, data, selector, delegator || autoRemove)\n })\n }\n $.fn.off = function(event, selector, callback){\n var $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.off(type, selector, fn)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = selector, selector = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(){\n remove(this, event, callback, selector)\n })\n }\n\n $.fn.trigger = function(event, args){\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n event._args = args\n return this.each(function(){\n // handle focus(), blur() by calling them directly\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\n // items in the collection might not be DOM elements\n else if ('dispatchEvent' in this) this.dispatchEvent(event)\n else $(this).triggerHandler(event, args)\n })\n }\n\n // triggers event handlers on current element just as if an event occurred,\n // doesn't trigger an actual event, doesn't bubble\n $.fn.triggerHandler = function(event, args){\n var e, result\n this.each(function(i, element){\n e = createProxy(isString(event) ? $.Event(event) : event)\n e._args = args\n e.target = element\n $.each(findHandlers(element, event.type || event), function(i, handler){\n result = handler.proxy(e)\n if (e.isImmediatePropagationStopped()) return false\n })\n })\n return result\n }\n\n // shortcut methods for `.bind(event, fn)` for each event type\n ;('focusin focusout focus blur load resize scroll unload click dblclick '+\n 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+\n 'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n $.fn[event] = function(callback) {\n return (0 in arguments) ?\n this.bind(event, callback) :\n this.trigger(event)\n }\n })\n\n $.Event = function(type, props) {\n if (!isString(type)) props = type, type = props.type\n var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true\n if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])\n event.initEvent(type, bubbles, true)\n return compatible(event)\n }\n\n})(Zepto)\n\n;(function($){\n var jsonpID = +new Date(),\n document = window.document,\n key,\n name,\n rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n scriptTypeRE = /^(?:text|application)\\/javascript/i,\n xmlTypeRE = /^(?:text|application)\\/xml/i,\n jsonType = 'application/json',\n htmlType = 'text/html',\n blankRE = /^\\s*$/,\n originAnchor = document.createElement('a')\n\n originAnchor.href = window.location.href\n\n // trigger a custom event and return false if it was cancelled\n function triggerAndReturn(context, eventName, data) {\n var event = $.Event(eventName)\n $(context).trigger(event, data)\n return !event.isDefaultPrevented()\n }\n\n // trigger an Ajax \"global\" event\n function triggerGlobal(settings, context, eventName, data) {\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\n }\n\n // Number of active Ajax requests\n $.active = 0\n\n function ajaxStart(settings) {\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')\n }\n function ajaxStop(settings) {\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')\n }\n\n // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n function ajaxBeforeSend(xhr, settings) {\n var context = settings.context\n if (settings.beforeSend.call(context, xhr, settings) === false ||\n triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n return false\n\n triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])\n }\n function ajaxSuccess(data, xhr, settings, deferred) {\n var context = settings.context, status = 'success'\n settings.success.call(context, data, status, xhr)\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\n triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])\n ajaxComplete(status, xhr, settings)\n }\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n function ajaxError(error, type, xhr, settings, deferred) {\n var context = settings.context\n settings.error.call(context, xhr, type, error)\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\n triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])\n ajaxComplete(type, xhr, settings)\n }\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n function ajaxComplete(status, xhr, settings) {\n var context = settings.context\n settings.complete.call(context, xhr, status)\n triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])\n ajaxStop(settings)\n }\n\n function ajaxDataFilter(data, type, settings) {\n if (settings.dataFilter == empty) return data\n var context = settings.context\n return settings.dataFilter.call(context, data, type)\n }\n\n // Empty function, used as default callback\n function empty() {}\n\n $.ajaxJSONP = function(options, deferred){\n if (!('type' in options)) return $.ajax(options)\n\n var _callbackName = options.jsonpCallback,\n callbackName = ($.isFunction(_callbackName) ?\n _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)),\n script = document.createElement('script'),\n originalCallback = window[callbackName],\n responseData,\n abort = function(errorType) {\n $(script).triggerHandler('error', errorType || 'abort')\n },\n xhr = { abort: abort }, abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n $(script).on('load error', function(e, errorType){\n clearTimeout(abortTimeout)\n $(script).off().remove()\n\n if (e.type == 'error' || !responseData) {\n ajaxError(null, errorType || 'error', xhr, options, deferred)\n } else {\n ajaxSuccess(responseData[0], xhr, options, deferred)\n }\n\n window[callbackName] = originalCallback\n if (responseData && $.isFunction(originalCallback))\n originalCallback(responseData[0])\n\n originalCallback = responseData = undefined\n })\n\n if (ajaxBeforeSend(xhr, options) === false) {\n abort('abort')\n return xhr\n }\n\n window[callbackName] = function(){\n responseData = arguments\n }\n\n script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName)\n document.head.appendChild(script)\n\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\n abort('timeout')\n }, options.timeout)\n\n return xhr\n }\n\n $.ajaxSettings = {\n // Default type of request\n type: 'GET',\n // Callback that is executed before request\n beforeSend: empty,\n // Callback that is executed if the request succeeds\n success: empty,\n // Callback that is executed the the server drops error\n error: empty,\n // Callback that is executed on request complete (both: error and success)\n complete: empty,\n // The context for the callbacks\n context: null,\n // Whether to trigger \"global\" Ajax events\n global: true,\n // Transport\n xhr: function () {\n return new window.XMLHttpRequest()\n },\n // MIME types mapping\n // IIS returns Javascript as \"application/x-javascript\"\n accepts: {\n script: 'text/javascript, application/javascript, application/x-javascript',\n json: jsonType,\n xml: 'application/xml, text/xml',\n html: htmlType,\n text: 'text/plain'\n },\n // Whether the request is to another domain\n crossDomain: false,\n // Default timeout\n timeout: 0,\n // Whether data should be serialized to string\n processData: true,\n // Whether the browser should be allowed to cache GET responses\n cache: true,\n //Used to handle the raw response data of XMLHttpRequest.\n //This is a pre-filtering function to sanitize the response.\n //The sanitized response should be returned\n dataFilter: empty\n }\n\n function mimeToDataType(mime) {\n if (mime) mime = mime.split(';', 2)[0]\n return mime && ( mime == htmlType ? 'html' :\n mime == jsonType ? 'json' :\n scriptTypeRE.test(mime) ? 'script' :\n xmlTypeRE.test(mime) && 'xml' ) || 'text'\n }\n\n function appendQuery(url, query) {\n if (query == '') return url\n return (url + '&' + query).replace(/[&?]{1,2}/, '?')\n }\n\n // serialize payload and append it to the URL for GET requests\n function serializeData(options) {\n if (options.processData && options.data && $.type(options.data) != \"string\")\n options.data = $.param(options.data, options.traditional)\n if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType))\n options.url = appendQuery(options.url, options.data), options.data = undefined\n }\n\n $.ajax = function(options){\n var settings = $.extend({}, options || {}),\n deferred = $.Deferred && $.Deferred(),\n urlAnchor, hashIndex\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n ajaxStart(settings)\n\n if (!settings.crossDomain) {\n urlAnchor = document.createElement('a')\n urlAnchor.href = settings.url\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n urlAnchor.href = urlAnchor.href\n settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host)\n }\n\n if (!settings.url) settings.url = window.location.toString()\n if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex)\n serializeData(settings)\n\n var dataType = settings.dataType, hasPlaceholder = /\\?.+=\\?/.test(settings.url)\n if (hasPlaceholder) dataType = 'jsonp'\n\n if (settings.cache === false || (\n (!options || options.cache !== true) &&\n ('script' == dataType || 'jsonp' == dataType)\n ))\n settings.url = appendQuery(settings.url, '_=' + Date.now())\n\n if ('jsonp' == dataType) {\n if (!hasPlaceholder)\n settings.url = appendQuery(settings.url,\n settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')\n return $.ajaxJSONP(settings, deferred)\n }\n\n var mime = settings.accepts[dataType],\n headers = { },\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n xhr = settings.xhr(),\n nativeSetHeader = xhr.setRequestHeader,\n abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')\n setHeader('Accept', mime || '*/*')\n if (mime = settings.mimeType || mime) {\n if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\n }\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))\n setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')\n\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n xhr.setRequestHeader = setHeader\n\n xhr.onreadystatechange = function(){\n if (xhr.readyState == 4) {\n xhr.onreadystatechange = empty\n clearTimeout(abortTimeout)\n var result, error = false\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))\n\n if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob')\n result = xhr.response\n else {\n result = xhr.responseText\n\n try {\n // http://perfectionkills.com/global-eval-what-are-the-options/\n // sanitize response accordingly if data filter callback provided\n result = ajaxDataFilter(result, dataType, settings)\n if (dataType == 'script') (1,eval)(result)\n else if (dataType == 'xml') result = xhr.responseXML\n else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)\n } catch (e) { error = e }\n\n if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred)\n }\n\n ajaxSuccess(result, xhr, settings, deferred)\n } else {\n ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)\n }\n }\n }\n\n if (ajaxBeforeSend(xhr, settings) === false) {\n xhr.abort()\n ajaxError(null, 'abort', xhr, settings, deferred)\n return xhr\n }\n\n var async = 'async' in settings ? settings.async : true\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n xhr.onreadystatechange = empty\n xhr.abort()\n ajaxError(null, 'timeout', xhr, settings, deferred)\n }, settings.timeout)\n\n // avoid sending empty string (#319)\n xhr.send(settings.data ? settings.data : null)\n return xhr\n }\n\n // handle optional data/success arguments\n function parseArguments(url, data, success, dataType) {\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\n if (!$.isFunction(success)) dataType = success, success = undefined\n return {\n url: url\n , data: data\n , success: success\n , dataType: dataType\n }\n }\n\n $.get = function(/* url, data, success, dataType */){\n return $.ajax(parseArguments.apply(null, arguments))\n }\n\n $.post = function(/* url, data, success, dataType */){\n var options = parseArguments.apply(null, arguments)\n options.type = 'POST'\n return $.ajax(options)\n }\n\n $.getJSON = function(/* url, data, success */){\n var options = parseArguments.apply(null, arguments)\n options.dataType = 'json'\n return $.ajax(options)\n }\n\n $.fn.load = function(url, data, success){\n if (!this.length) return this\n var self = this, parts = url.split(/\\s/), selector,\n options = parseArguments(url, data, success),\n callback = options.success\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\n options.success = function(response){\n self.html(selector ?\n $('<div>').html(response.replace(rscript, \"\")).find(selector)\n : response)\n callback && callback.apply(self, arguments)\n }\n $.ajax(options)\n return this\n }\n\n var escape = encodeURIComponent\n\n function serialize(params, obj, traditional, scope){\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n $.each(obj, function(key, value) {\n type = $.type(value)\n if (scope) key = traditional ? scope :\n scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'\n // handle data in serializeArray() format\n if (!scope && array) params.add(value.name, value.value)\n // recurse into nested objects\n else if (type == \"array\" || (!traditional && type == \"object\"))\n serialize(params, value, traditional, key)\n else params.add(key, value)\n })\n }\n\n $.param = function(obj, traditional){\n var params = []\n params.add = function(key, value) {\n if ($.isFunction(value)) value = value()\n if (value == null) value = \"\"\n this.push(escape(key) + '=' + escape(value))\n }\n serialize(params, obj, traditional)\n return params.join('&').replace(/%20/g, '+')\n }\n})(Zepto)\n\n;(function($){\n $.fn.serializeArray = function() {\n var name, type, result = [],\n add = function(value) {\n if (value.forEach) return value.forEach(add)\n result.push({ name: name, value: value })\n }\n if (this[0]) $.each(this[0].elements, function(_, field){\n type = field.type, name = field.name\n if (name && field.nodeName.toLowerCase() != 'fieldset' &&\n !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' &&\n ((type != 'radio' && type != 'checkbox') || field.checked))\n add($(field).val())\n })\n return result\n }\n\n $.fn.serialize = function(){\n var result = []\n this.serializeArray().forEach(function(elm){\n result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))\n })\n return result.join('&')\n }\n\n $.fn.submit = function(callback) {\n if (0 in arguments) this.bind('submit', callback)\n else if (this.length) {\n var event = $.Event('submit')\n this.eq(0).trigger(event)\n if (!event.isDefaultPrevented()) this.get(0).submit()\n }\n return this\n }\n\n})(Zepto)\n\n;(function(){\n // getComputedStyle shouldn't freak out when called\n // without a valid element as argument\n try {\n getComputedStyle(undefined)\n } catch(e) {\n var nativeGetComputedStyle = getComputedStyle\n window.getComputedStyle = function(element, pseudoElement){\n try {\n return nativeGetComputedStyle(element, pseudoElement)\n } catch(e) {\n return null\n }\n }\n }\n})()\n return Zepto\n}))\n\n}.call(window));","// Robert Penner's easeInOutQuad\n\n// find the rest of his easing functions here: http://robertpenner.com/easing/\n// find them exported for ES6 consumption here: https://github.com/jaxgeller/ez.js\n\nvar easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t--;\n return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar jumper = function jumper() {\n // private variable cache\n // no variables are created during a jump, preventing memory leaks\n\n var element = void 0; // element to scroll to (node)\n\n var start = void 0; // where scroll starts (px)\n var stop = void 0; // where scroll stops (px)\n\n var offset = void 0; // adjustment from the stop position (px)\n var easing = void 0; // easing function (function)\n var a11y = void 0; // accessibility support flag (boolean)\n\n var distance = void 0; // distance of scroll (px)\n var duration = void 0; // scroll duration (ms)\n\n var timeStart = void 0; // time scroll started (ms)\n var timeElapsed = void 0; // time spent scrolling thus far (ms)\n\n var next = void 0; // next scroll position (px)\n\n var callback = void 0; // to call when done scrolling (function)\n\n // scroll position helper\n\n function location() {\n return window.scrollY || window.pageYOffset;\n }\n\n // element offset helper\n\n function top(element) {\n return element.getBoundingClientRect().top + start;\n }\n\n // rAF loop helper\n\n function loop(timeCurrent) {\n // store time scroll started, if not started already\n if (!timeStart) {\n timeStart = timeCurrent;\n }\n\n // determine time spent scrolling so far\n timeElapsed = timeCurrent - timeStart;\n\n // calculate next scroll position\n next = easing(timeElapsed, start, distance, duration);\n\n // scroll to it\n window.scrollTo(0, next);\n\n // check progress\n timeElapsed < duration ? window.requestAnimationFrame(loop) // continue scroll loop\n : done(); // scrolling is done\n }\n\n // scroll finished helper\n\n function done() {\n // account for rAF time rounding inaccuracies\n window.scrollTo(0, start + distance);\n\n // if scrolling to an element, and accessibility is enabled\n if (element && a11y) {\n // add tabindex indicating programmatic focus\n element.setAttribute('tabindex', '-1');\n\n // focus the element\n element.focus();\n }\n\n // if it exists, fire the callback\n if (typeof callback === 'function') {\n callback();\n }\n\n // reset time for next jump\n timeStart = false;\n }\n\n // API\n\n function jump(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // resolve options, or use defaults\n duration = options.duration || 1000;\n offset = options.offset || 0;\n callback = options.callback; // \"undefined\" is a suitable default, and won't be called\n easing = options.easing || easeInOutQuad;\n a11y = options.a11y || false;\n\n // cache starting position\n start = location();\n\n // resolve target\n switch (typeof target === 'undefined' ? 'undefined' : _typeof(target)) {\n // scroll from current position\n case 'number':\n element = undefined; // no element to scroll to\n a11y = false; // make sure accessibility is off\n stop = start + target;\n break;\n\n // scroll to element (node)\n // bounding rect is relative to the viewport\n case 'object':\n element = target;\n stop = top(element);\n break;\n\n // scroll to element (selector)\n // bounding rect is relative to the viewport\n case 'string':\n element = document.querySelector(target);\n stop = top(element);\n break;\n }\n\n // resolve scroll distance, accounting for offset\n distance = stop - start + offset;\n\n // resolve duration\n switch (_typeof(options.duration)) {\n // number in ms\n case 'number':\n duration = options.duration;\n break;\n\n // function passed the distance of the scroll\n case 'function':\n duration = options.duration(distance);\n break;\n }\n\n // start the loop\n window.requestAnimationFrame(loop);\n }\n\n // expose only the jump method\n return jump;\n};\n\n// export singleton\n\nvar singleton = jumper();\n\nexport default singleton;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar MicroModal = function () {\n\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$openClass = _ref.openClass,\n openClass = _ref$openClass === void 0 ? 'is-open' : _ref$openClass,\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 openClass: openClass,\n onShow: onShow,\n onClose: onClose,\n awaitCloseAnimation: awaitCloseAnimation,\n awaitOpenAnimation: awaitOpenAnimation,\n disableFocus: disableFocus\n }; // Register click events only if pre binding eventListeners\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 var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this.activeElement = document.activeElement;\n this.modal.setAttribute('aria-hidden', 'false');\n this.modal.classList.add(this.config.openClass);\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, event);\n }\n }, {\n key: \"closeModal\",\n value: function closeModal() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var modal = this.modal;\n this.modal.setAttribute('aria-hidden', 'true');\n this.removeEventListeners();\n this.scrollBehaviour('enable');\n\n if (this.activeElement && this.activeElement.focus) {\n this.activeElement.focus();\n }\n\n this.config.onClose(this.modal, this.activeElement, event);\n\n if (this.config.awaitCloseAnimation) {\n var openClass = this.config.openClass; // <- old school ftw\n\n this.modal.addEventListener('animationend', function handler() {\n modal.classList.remove(openClass);\n modal.removeEventListener('animationend', handler, false);\n }, false);\n } else {\n modal.classList.remove(this.config.openClass);\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 });\n break;\n\n case 'disable':\n Object.assign(body.style, {\n overflow: 'hidden'\n });\n break;\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(event);\n }\n }\n }, {\n key: \"onKeydown\",\n value: function onKeydown(event) {\n if (event.keyCode === 27) this.closeModal(event); // esc\n\n if (event.keyCode === 9) this.retainFocus(event); // tab\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 * Tries to set focus on a node which is not a close trigger\n * if no other nodes exist then focuses on first close trigger\n */\n\n }, {\n key: \"setFocusToFirstNode\",\n value: function setFocusToFirstNode() {\n var _this3 = this;\n\n if (this.config.disableFocus) return;\n var focusableNodes = this.getFocusableNodes(); // no focusable nodes\n\n if (focusableNodes.length === 0) return; // remove nodes on whose click, the modal closes\n // could not think of a better name :(\n\n var nodesWhichAreNotCloseTargets = focusableNodes.filter(function (node) {\n return !node.hasAttribute(_this3.config.closeTrigger);\n });\n if (nodesWhichAreNotCloseTargets.length > 0) nodesWhichAreNotCloseTargets[0].focus();\n if (nodesWhichAreNotCloseTargets.length === 0) focusableNodes[0].focus();\n }\n }, {\n key: \"retainFocus\",\n value: function retainFocus(event) {\n var focusableNodes = this.getFocusableNodes(); // no focusable nodes\n\n if (focusableNodes.length === 0) return;\n /**\n * Filters nodes which are hidden to prevent\n * focus leak outside modal\n */\n\n focusableNodes = focusableNodes.filter(function (node) {\n return node.offsetParent !== null;\n }); // 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 && focusableNodes.length > 0 && 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;', \"<div class=\\\"modal\\\" id=\\\"\".concat(id, \"\\\"></div>\"));\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;', \"<a href=\\\"#\\\" data-micromodal-trigger=\\\"my-modal\\\"></a>\");\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; // clear events in case previous modal wasn't close\n\n if (activeModal) activeModal.removeEventListeners(); // 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}();\nwindow.MicroModal = MicroModal;\n\nexport default MicroModal;\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(render, schedule, console) {\n\tvar subscriptions = []\n\tvar rendering = false\n\tvar pending = false\n\n\tfunction sync() {\n\t\tif (rendering) throw new Error(\"Nested m.redraw.sync() call\")\n\t\trendering = true\n\t\tfor (var i = 0; i < subscriptions.length; i += 2) {\n\t\t\ttry { render(subscriptions[i], Vnode(subscriptions[i + 1]), redraw) }\n\t\t\tcatch (e) { console.error(e) }\n\t\t}\n\t\trendering = false\n\t}\n\n\tfunction redraw() {\n\t\tif (!pending) {\n\t\t\tpending = true\n\t\t\tschedule(function() {\n\t\t\t\tpending = false\n\t\t\t\tsync()\n\t\t\t})\n\t\t}\n\t}\n\n\tredraw.sync = sync\n\n\tfunction mount(root, component) {\n\t\tif (component != null && component.view == null && typeof component !== \"function\") {\n\t\t\tthrow new TypeError(\"m.mount(element, component) expects a component, not a vnode\")\n\t\t}\n\n\t\tvar index = subscriptions.indexOf(root)\n\t\tif (index >= 0) {\n\t\t\tsubscriptions.splice(index, 2)\n\t\t\trender(root, [], redraw)\n\t\t}\n\n\t\tif (component != null) {\n\t\t\tsubscriptions.push(root, component)\n\t\t\trender(root, Vnode(component), redraw)\n\t\t}\n\t}\n\n\treturn {mount: mount, redraw: redraw}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\nvar Promise = require(\"../promise/promise\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar assign = require(\"../pathname/assign\")\n\nvar sentinel = {}\n\nmodule.exports = function($window, mountRedraw) {\n\tvar fireAsync\n\n\tfunction setPath(path, data, options) {\n\t\tpath = buildPathname(path, data)\n\t\tif (fireAsync != null) {\n\t\t\tfireAsync()\n\t\t\tvar state = options ? options.state : null\n\t\t\tvar title = options ? options.title : null\n\t\t\tif (options && options.replace) $window.history.replaceState(state, title, route.prefix + path)\n\t\t\telse $window.history.pushState(state, title, route.prefix + path)\n\t\t}\n\t\telse {\n\t\t\t$window.location.href = route.prefix + path\n\t\t}\n\t}\n\n\tvar currentResolver = sentinel, component, attrs, currentPath, lastUpdate\n\n\tvar SKIP = route.SKIP = {}\n\n\tfunction route(root, defaultRoute, routes) {\n\t\tif (root == null) throw new Error(\"Ensure the DOM element that was passed to `m.route` is not undefined\")\n\t\t// 0 = start\n\t\t// 1 = init\n\t\t// 2 = ready\n\t\tvar state = 0\n\n\t\tvar compiled = Object.keys(routes).map(function(route) {\n\t\t\tif (route[0] !== \"/\") throw new SyntaxError(\"Routes must start with a `/`\")\n\t\t\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(route)) {\n\t\t\t\tthrow new SyntaxError(\"Route parameter names must be separated with either `/`, `.`, or `-`\")\n\t\t\t}\n\t\t\treturn {\n\t\t\t\troute: route,\n\t\t\t\tcomponent: routes[route],\n\t\t\t\tcheck: compileTemplate(route),\n\t\t\t}\n\t\t})\n\t\tvar callAsync = typeof setImmediate === \"function\" ? setImmediate : setTimeout\n\t\tvar p = Promise.resolve()\n\t\tvar scheduled = false\n\t\tvar onremove\n\n\t\tfireAsync = null\n\n\t\tif (defaultRoute != null) {\n\t\t\tvar defaultData = parsePathname(defaultRoute)\n\n\t\t\tif (!compiled.some(function (i) { return i.check(defaultData) })) {\n\t\t\t\tthrow new ReferenceError(\"Default route doesn't match any known routes\")\n\t\t\t}\n\t\t}\n\n\t\tfunction resolveRoute() {\n\t\t\tscheduled = false\n\t\t\t// Consider the pathname holistically. The prefix might even be invalid,\n\t\t\t// but that's not our problem.\n\t\t\tvar prefix = $window.location.hash\n\t\t\tif (route.prefix[0] !== \"#\") {\n\t\t\t\tprefix = $window.location.search + prefix\n\t\t\t\tif (route.prefix[0] !== \"?\") {\n\t\t\t\t\tprefix = $window.location.pathname + prefix\n\t\t\t\t\tif (prefix[0] !== \"/\") prefix = \"/\" + prefix\n\t\t\t\t}\n\t\t\t}\n\t\t\t// This seemingly useless `.concat()` speeds up the tests quite a bit,\n\t\t\t// since the representation is consistently a relatively poorly\n\t\t\t// optimized cons string.\n\t\t\tvar path = prefix.concat()\n\t\t\t\t.replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponent)\n\t\t\t\t.slice(route.prefix.length)\n\t\t\tvar data = parsePathname(path)\n\n\t\t\tassign(data.params, $window.history.state)\n\n\t\t\tfunction fail() {\n\t\t\t\tif (path === defaultRoute) throw new Error(\"Could not resolve default route \" + defaultRoute)\n\t\t\t\tsetPath(defaultRoute, null, {replace: true})\n\t\t\t}\n\n\t\t\tloop(0)\n\t\t\tfunction loop(i) {\n\t\t\t\t// 0 = init\n\t\t\t\t// 1 = scheduled\n\t\t\t\t// 2 = done\n\t\t\t\tfor (; i < compiled.length; i++) {\n\t\t\t\t\tif (compiled[i].check(data)) {\n\t\t\t\t\t\tvar payload = compiled[i].component\n\t\t\t\t\t\tvar matchedRoute = compiled[i].route\n\t\t\t\t\t\tvar localComp = payload\n\t\t\t\t\t\tvar update = lastUpdate = function(comp) {\n\t\t\t\t\t\t\tif (update !== lastUpdate) return\n\t\t\t\t\t\t\tif (comp === SKIP) return loop(i + 1)\n\t\t\t\t\t\t\tcomponent = comp != null && (typeof comp.view === \"function\" || typeof comp === \"function\")? comp : \"div\"\n\t\t\t\t\t\t\tattrs = data.params, currentPath = path, lastUpdate = null\n\t\t\t\t\t\t\tcurrentResolver = payload.render ? payload : null\n\t\t\t\t\t\t\tif (state === 2) mountRedraw.redraw()\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tstate = 2\n\t\t\t\t\t\t\t\tmountRedraw.redraw.sync()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// There's no understating how much I *wish* I could\n\t\t\t\t\t\t// use `async`/`await` here...\n\t\t\t\t\t\tif (payload.view || typeof payload === \"function\") {\n\t\t\t\t\t\t\tpayload = {}\n\t\t\t\t\t\t\tupdate(localComp)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (payload.onmatch) {\n\t\t\t\t\t\t\tp.then(function () {\n\t\t\t\t\t\t\t\treturn payload.onmatch(data.params, path, matchedRoute)\n\t\t\t\t\t\t\t}).then(update, fail)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse update(\"div\")\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfail()\n\t\t\t}\n\t\t}\n\n\t\t// Set it unconditionally so `m.route.set` and `m.route.Link` both work,\n\t\t// even if neither `pushState` nor `hashchange` are supported. It's\n\t\t// cleared if `hashchange` is used, since that makes it automatically\n\t\t// async.\n\t\tfireAsync = function() {\n\t\t\tif (!scheduled) {\n\t\t\t\tscheduled = true\n\t\t\t\tcallAsync(resolveRoute)\n\t\t\t}\n\t\t}\n\n\t\tif (typeof $window.history.pushState === \"function\") {\n\t\t\tonremove = function() {\n\t\t\t\t$window.removeEventListener(\"popstate\", fireAsync, false)\n\t\t\t}\n\t\t\t$window.addEventListener(\"popstate\", fireAsync, false)\n\t\t} else if (route.prefix[0] === \"#\") {\n\t\t\tfireAsync = null\n\t\t\tonremove = function() {\n\t\t\t\t$window.removeEventListener(\"hashchange\", resolveRoute, false)\n\t\t\t}\n\t\t\t$window.addEventListener(\"hashchange\", resolveRoute, false)\n\t\t}\n\n\t\treturn mountRedraw.mount(root, {\n\t\t\tonbeforeupdate: function() {\n\t\t\t\tstate = state ? 2 : 1\n\t\t\t\treturn !(!state || sentinel === currentResolver)\n\t\t\t},\n\t\t\toncreate: resolveRoute,\n\t\t\tonremove: onremove,\n\t\t\tview: function() {\n\t\t\t\tif (!state || sentinel === currentResolver) return\n\t\t\t\t// Wrap in a fragment to preserve existing key semantics\n\t\t\t\tvar vnode = [Vnode(component, attrs.key, attrs)]\n\t\t\t\tif (currentResolver) vnode = currentResolver.render(vnode[0])\n\t\t\t\treturn vnode\n\t\t\t},\n\t\t})\n\t}\n\troute.set = function(path, data, options) {\n\t\tif (lastUpdate != null) {\n\t\t\toptions = options || {}\n\t\t\toptions.replace = true\n\t\t}\n\t\tlastUpdate = null\n\t\tsetPath(path, data, options)\n\t}\n\troute.get = function() {return currentPath}\n\troute.prefix = \"#!\"\n\troute.Link = {\n\t\tview: function(vnode) {\n\t\t\tvar options = vnode.attrs.options\n\t\t\t// Remove these so they don't get overwritten\n\t\t\tvar attrs = {}, onclick, href\n\t\t\tassign(attrs, vnode.attrs)\n\t\t\t// The first two are internal, but the rest are magic attributes\n\t\t\t// that need censored to not screw up rendering.\n\t\t\tattrs.selector = attrs.options = attrs.key = attrs.oninit =\n\t\t\tattrs.oncreate = attrs.onbeforeupdate = attrs.onupdate =\n\t\t\tattrs.onbeforeremove = attrs.onremove = null\n\n\t\t\t// Do this now so we can get the most current `href` and `disabled`.\n\t\t\t// Those attributes may also be specified in the selector, and we\n\t\t\t// should honor that.\n\t\t\tvar child = m(vnode.attrs.selector || \"a\", attrs, vnode.children)\n\n\t\t\t// Let's provide a *right* way to disable a route link, rather than\n\t\t\t// letting people screw up accessibility on accident.\n\t\t\t//\n\t\t\t// The attribute is coerced so users don't get surprised over\n\t\t\t// `disabled: 0` resulting in a button that's somehow routable\n\t\t\t// despite being visibly disabled.\n\t\t\tif (child.attrs.disabled = Boolean(child.attrs.disabled)) {\n\t\t\t\tchild.attrs.href = null\n\t\t\t\tchild.attrs[\"aria-disabled\"] = \"true\"\n\t\t\t\t// If you *really* do want to do this on a disabled link, use\n\t\t\t\t// an `oncreate` hook to add it.\n\t\t\t\tchild.attrs.onclick = null\n\t\t\t} else {\n\t\t\t\tonclick = child.attrs.onclick\n\t\t\t\thref = child.attrs.href\n\t\t\t\tchild.attrs.href = route.prefix + href\n\t\t\t\tchild.attrs.onclick = function(e) {\n\t\t\t\t\tvar result\n\t\t\t\t\tif (typeof onclick === \"function\") {\n\t\t\t\t\t\tresult = onclick.call(e.currentTarget, e)\n\t\t\t\t\t} else if (onclick == null || typeof onclick !== \"object\") {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (typeof onclick.handleEvent === \"function\") {\n\t\t\t\t\t\tonclick.handleEvent(e)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adapted from React Router's implementation:\n\t\t\t\t\t// https://github.com/ReactTraining/react-router/blob/520a0acd48ae1b066eb0b07d6d4d1790a1d02482/packages/react-router-dom/modules/Link.js\n\t\t\t\t\t//\n\t\t\t\t\t// Try to be flexible and intuitive in how we handle links.\n\t\t\t\t\t// Fun fact: links aren't as obvious to get right as you\n\t\t\t\t\t// would expect. There's a lot more valid ways to click a\n\t\t\t\t\t// link than this, and one might want to not simply click a\n\t\t\t\t\t// link, but right click or command-click it to copy the\n\t\t\t\t\t// link target, etc. Nope, this isn't just for blind people.\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip if `onclick` prevented default\n\t\t\t\t\t\tresult !== false && !e.defaultPrevented &&\n\t\t\t\t\t\t// Ignore everything but left clicks\n\t\t\t\t\t\t(e.button === 0 || e.which === 0 || e.which === 1) &&\n\t\t\t\t\t\t// Let the browser handle `target=_blank`, etc.\n\t\t\t\t\t\t(!e.currentTarget.target || e.currentTarget.target === \"_self\") &&\n\t\t\t\t\t\t// No modifier keys\n\t\t\t\t\t\t!e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\troute.set(href, null, options)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn child\n\t\t},\n\t}\n\troute.param = function(key) {\n\t\treturn attrs && key != null ? attrs[key] : attrs\n\t}\n\n\treturn route\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar render = require(\"./render\")\n\nmodule.exports = require(\"./api/mount-redraw\")(render, requestAnimationFrame, console)\n","\"use strict\"\n\nmodule.exports = Object.assign || function(target, source) {\n\tif(source) Object.keys(source).forEach(function(key) { target[key] = source[key] })\n}\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\nvar assign = require(\"./assign\")\n\n// Returns `path` from `template` + `params`\nmodule.exports = function(template, params) {\n\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(template)) {\n\t\tthrow new SyntaxError(\"Template parameter names *must* be separated\")\n\t}\n\tif (params == null) return template\n\tvar queryIndex = template.indexOf(\"?\")\n\tvar hashIndex = template.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? template.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = template.slice(0, pathEnd)\n\tvar query = {}\n\n\tassign(query, params)\n\n\tvar resolved = path.replace(/:([^\\/\\.-]+)(\\.{3})?/g, function(m, key, variadic) {\n\t\tdelete query[key]\n\t\t// If no such parameter exists, don't interpolate it.\n\t\tif (params[key] == null) return m\n\t\t// Escape normal parameters, but not variadic ones.\n\t\treturn variadic ? params[key] : encodeURIComponent(String(params[key]))\n\t})\n\n\t// In case the template substitution adds new query/hash parameters.\n\tvar newQueryIndex = resolved.indexOf(\"?\")\n\tvar newHashIndex = resolved.indexOf(\"#\")\n\tvar newQueryEnd = newHashIndex < 0 ? resolved.length : newHashIndex\n\tvar newPathEnd = newQueryIndex < 0 ? newQueryEnd : newQueryIndex\n\tvar result = resolved.slice(0, newPathEnd)\n\n\tif (queryIndex >= 0) result += template.slice(queryIndex, queryEnd)\n\tif (newQueryIndex >= 0) result += (queryIndex < 0 ? \"?\" : \"&\") + resolved.slice(newQueryIndex, newQueryEnd)\n\tvar querystring = buildQueryString(query)\n\tif (querystring) result += (queryIndex < 0 && newQueryIndex < 0 ? \"?\" : \"&\") + querystring\n\tif (hashIndex >= 0) result += template.slice(hashIndex)\n\tif (newHashIndex >= 0) result += (hashIndex < 0 ? \"\" : \"&\") + resolved.slice(newHashIndex)\n\treturn result\n}\n","\"use strict\"\n\nvar parsePathname = require(\"./parse\")\n\n// Compiles a template into a function that takes a resolved path (without query\n// strings) and returns an object containing the template parameters with their\n// parsed values. This expects the input of the compiled template to be the\n// output of `parsePathname`. Note that it does *not* remove query parameters\n// specified in the template.\nmodule.exports = function(template) {\n\tvar templateData = parsePathname(template)\n\tvar templateKeys = Object.keys(templateData.params)\n\tvar keys = []\n\tvar regexp = new RegExp(\"^\" + templateData.path.replace(\n\t\t// I escape literal text so people can use things like `:file.:ext` or\n\t\t// `:lang-:locale` in routes. This is all merged into one pass so I\n\t\t// don't also accidentally escape `-` and make it harder to detect it to\n\t\t// ban it from template parameters.\n\t\t/:([^\\/.-]+)(\\.{3}|\\.(?!\\.)|-)?|[\\\\^$*+.()|\\[\\]{}]/g,\n\t\tfunction(m, key, extra) {\n\t\t\tif (key == null) return \"\\\\\" + m\n\t\t\tkeys.push({k: key, r: extra === \"...\"})\n\t\t\tif (extra === \"...\") return \"(.*)\"\n\t\t\tif (extra === \".\") return \"([^/]+)\\\\.\"\n\t\t\treturn \"([^/]+)\" + (extra || \"\")\n\t\t}\n\t) + \"$\")\n\treturn function(data) {\n\t\t// First, check the params. Usually, there isn't any, and it's just\n\t\t// checking a static set.\n\t\tfor (var i = 0; i < templateKeys.length; i++) {\n\t\t\tif (templateData.params[templateKeys[i]] !== data.params[templateKeys[i]]) return false\n\t\t}\n\t\t// If no interpolations exist, let's skip all the ceremony\n\t\tif (!keys.length) return regexp.test(data.path)\n\t\tvar values = regexp.exec(data.path)\n\t\tif (values == null) return false\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tdata.params[keys[i].k] = keys[i].r ? values[i + 1] : decodeURIComponent(values[i + 1])\n\t\t}\n\t\treturn true\n\t}\n}\n","\"use strict\"\n\nvar parseQueryString = require(\"../querystring/parse\")\n\n// Returns `{path, params}` from `url`\nmodule.exports = function(url) {\n\tvar queryIndex = url.indexOf(\"?\")\n\tvar hashIndex = url.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? url.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = url.slice(0, pathEnd).replace(/\\/{2,}/g, \"/\")\n\n\tif (!path) path = \"/\"\n\telse {\n\t\tif (path[0] !== \"/\") path = \"/\" + path\n\t\tif (path.length > 1 && path[path.length - 1] === \"/\") path = path.slice(0, -1)\n\t}\n\treturn {\n\t\tpath: path,\n\t\tparams: queryIndex < 0\n\t\t\t? {}\n\t\t\t: parseQueryString(url.slice(queryIndex + 1, queryEnd)),\n\t}\n}\n","\"use strict\"\n/** @constructor */\nvar PromisePolyfill = function(executor) {\n\tif (!(this instanceof PromisePolyfill)) throw new Error(\"Promise must be called with `new`\")\n\tif (typeof executor !== \"function\") throw new TypeError(\"executor must be a function\")\n\n\tvar self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false)\n\tvar instance = self._instance = {resolvers: resolvers, rejectors: rejectors}\n\tvar callAsync = typeof setImmediate === \"function\" ? setImmediate : setTimeout\n\tfunction handler(list, shouldAbsorb) {\n\t\treturn function execute(value) {\n\t\t\tvar then\n\t\t\ttry {\n\t\t\t\tif (shouldAbsorb && value != null && (typeof value === \"object\" || typeof value === \"function\") && typeof (then = value.then) === \"function\") {\n\t\t\t\t\tif (value === self) throw new TypeError(\"Promise can't be resolved w/ itself\")\n\t\t\t\t\texecuteOnce(then.bind(value))\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcallAsync(function() {\n\t\t\t\t\t\tif (!shouldAbsorb && list.length === 0) console.error(\"Possible unhandled promise rejection:\", value)\n\t\t\t\t\t\tfor (var i = 0; i < list.length; i++) list[i](value)\n\t\t\t\t\t\tresolvers.length = 0, rejectors.length = 0\n\t\t\t\t\t\tinstance.state = shouldAbsorb\n\t\t\t\t\t\tinstance.retry = function() {execute(value)}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\trejectCurrent(e)\n\t\t\t}\n\t\t}\n\t}\n\tfunction executeOnce(then) {\n\t\tvar runs = 0\n\t\tfunction run(fn) {\n\t\t\treturn function(value) {\n\t\t\t\tif (runs++ > 0) return\n\t\t\t\tfn(value)\n\t\t\t}\n\t\t}\n\t\tvar onerror = run(rejectCurrent)\n\t\ttry {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)}\n\t}\n\n\texecuteOnce(executor)\n}\nPromisePolyfill.prototype.then = function(onFulfilled, onRejection) {\n\tvar self = this, instance = self._instance\n\tfunction handle(callback, list, next, state) {\n\t\tlist.push(function(value) {\n\t\t\tif (typeof callback !== \"function\") next(value)\n\t\t\telse try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)}\n\t\t})\n\t\tif (typeof instance.retry === \"function\" && state === instance.state) instance.retry()\n\t}\n\tvar resolveNext, rejectNext\n\tvar promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject})\n\thandle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false)\n\treturn promise\n}\nPromisePolyfill.prototype.catch = function(onRejection) {\n\treturn this.then(null, onRejection)\n}\nPromisePolyfill.prototype.finally = function(callback) {\n\treturn this.then(\n\t\tfunction(value) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn value\n\t\t\t})\n\t\t},\n\t\tfunction(reason) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn PromisePolyfill.reject(reason);\n\t\t\t})\n\t\t}\n\t)\n}\nPromisePolyfill.resolve = function(value) {\n\tif (value instanceof PromisePolyfill) return value\n\treturn new PromisePolyfill(function(resolve) {resolve(value)})\n}\nPromisePolyfill.reject = function(value) {\n\treturn new PromisePolyfill(function(resolve, reject) {reject(value)})\n}\nPromisePolyfill.all = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tvar total = list.length, count = 0, values = []\n\t\tif (list.length === 0) resolve([])\n\t\telse for (var i = 0; i < list.length; i++) {\n\t\t\t(function(i) {\n\t\t\t\tfunction consume(value) {\n\t\t\t\t\tcount++\n\t\t\t\t\tvalues[i] = value\n\t\t\t\t\tif (count === total) resolve(values)\n\t\t\t\t}\n\t\t\t\tif (list[i] != null && (typeof list[i] === \"object\" || typeof list[i] === \"function\") && typeof list[i].then === \"function\") {\n\t\t\t\t\tlist[i].then(consume, reject)\n\t\t\t\t}\n\t\t\t\telse consume(list[i])\n\t\t\t})(i)\n\t\t}\n\t})\n}\nPromisePolyfill.race = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\tlist[i].then(resolve, reject)\n\t\t}\n\t})\n}\n\nmodule.exports = PromisePolyfill\n","\"use strict\"\n\nvar PromisePolyfill = require(\"./polyfill\")\n\nif (typeof window !== \"undefined\") {\n\tif (typeof window.Promise === \"undefined\") {\n\t\twindow.Promise = PromisePolyfill\n\t} else if (!window.Promise.prototype.finally) {\n\t\twindow.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = window.Promise\n} else if (typeof global !== \"undefined\") {\n\tif (typeof global.Promise === \"undefined\") {\n\t\tglobal.Promise = PromisePolyfill\n\t} else if (!global.Promise.prototype.finally) {\n\t\tglobal.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = global.Promise\n} else {\n\tmodule.exports = PromisePolyfill\n}\n","\"use strict\"\n\nmodule.exports = function(object) {\n\tif (Object.prototype.toString.call(object) !== \"[object Object]\") return \"\"\n\n\tvar args = []\n\tfor (var key in object) {\n\t\tdestructure(key, object[key])\n\t}\n\n\treturn args.join(\"&\")\n\n\tfunction destructure(key, value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse if (Object.prototype.toString.call(value) === \"[object Object]\") {\n\t\t\tfor (var i in value) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse args.push(encodeURIComponent(key) + (value != null && value !== \"\" ? \"=\" + encodeURIComponent(value) : \"\"))\n\t}\n}\n","\"use strict\"\n\nmodule.exports = function(string) {\n\tif (string === \"\" || string == null) return {}\n\tif (string.charAt(0) === \"?\") string = string.slice(1)\n\n\tvar entries = string.split(\"&\"), counters = {}, data = {}\n\tfor (var i = 0; i < entries.length; i++) {\n\t\tvar entry = entries[i].split(\"=\")\n\t\tvar key = decodeURIComponent(entry[0])\n\t\tvar value = entry.length === 2 ? decodeURIComponent(entry[1]) : \"\"\n\n\t\tif (value === \"true\") value = true\n\t\telse if (value === \"false\") value = false\n\n\t\tvar levels = key.split(/\\]\\[?|\\[/)\n\t\tvar cursor = data\n\t\tif (key.indexOf(\"[\") > -1) levels.pop()\n\t\tfor (var j = 0; j < levels.length; j++) {\n\t\t\tvar level = levels[j], nextLevel = levels[j + 1]\n\t\t\tvar isNumber = nextLevel == \"\" || !isNaN(parseInt(nextLevel, 10))\n\t\t\tif (level === \"\") {\n\t\t\t\tvar key = levels.slice(0, j).join()\n\t\t\t\tif (counters[key] == null) {\n\t\t\t\t\tcounters[key] = Array.isArray(cursor) ? cursor.length : 0\n\t\t\t\t}\n\t\t\t\tlevel = counters[key]++\n\t\t\t}\n\t\t\t// Disallow direct prototype pollution\n\t\t\telse if (level === \"__proto__\") break\n\t\t\tif (j === levels.length - 1) cursor[level] = value\n\t\t\telse {\n\t\t\t\t// Read own properties exclusively to disallow indirect\n\t\t\t\t// prototype pollution\n\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(cursor, level)\n\t\t\t\tif (desc != null) desc = desc.value\n\t\t\t\tif (desc == null) cursor[level] = desc = isNumber ? [] : {}\n\t\t\t\tcursor = desc\n\t\t\t}\n\t\t}\n\t}\n\treturn data\n}\n","\"use strict\"\n\nmodule.exports = require(\"./render/render\")(window)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nmodule.exports = function() {\n\tvar vnode = hyperscriptVnode.apply(0, arguments)\n\n\tvnode.tag = \"[\"\n\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\treturn vnode\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nvar selectorParser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\nvar selectorCache = {}\nvar hasOwn = {}.hasOwnProperty\n\nfunction isEmpty(object) {\n\tfor (var key in object) if (hasOwn.call(object, key)) return false\n\treturn true\n}\n\nfunction compileSelector(selector) {\n\tvar match, tag = \"div\", classes = [], attrs = {}\n\twhile (match = selectorParser.exec(selector)) {\n\t\tvar type = match[1], value = match[2]\n\t\tif (type === \"\" && value !== \"\") tag = value\n\t\telse if (type === \"#\") attrs.id = value\n\t\telse if (type === \".\") classes.push(value)\n\t\telse if (match[3][0] === \"[\") {\n\t\t\tvar attrValue = match[6]\n\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\").replace(/\\\\\\\\/g, \"\\\\\")\n\t\t\tif (match[4] === \"class\") classes.push(attrValue)\n\t\t\telse attrs[match[4]] = attrValue === \"\" ? attrValue : attrValue || true\n\t\t}\n\t}\n\tif (classes.length > 0) attrs.className = classes.join(\" \")\n\treturn selectorCache[selector] = {tag: tag, attrs: attrs}\n}\n\nfunction execSelector(state, vnode) {\n\tvar attrs = vnode.attrs\n\tvar children = Vnode.normalizeChildren(vnode.children)\n\tvar hasClass = hasOwn.call(attrs, \"class\")\n\tvar className = hasClass ? attrs.class : attrs.className\n\n\tvnode.tag = state.tag\n\tvnode.attrs = null\n\tvnode.children = undefined\n\n\tif (!isEmpty(state.attrs) && !isEmpty(attrs)) {\n\t\tvar newAttrs = {}\n\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key)) newAttrs[key] = attrs[key]\n\t\t}\n\n\t\tattrs = newAttrs\n\t}\n\n\tfor (var key in state.attrs) {\n\t\tif (hasOwn.call(state.attrs, key) && key !== \"className\" && !hasOwn.call(attrs, key)){\n\t\t\tattrs[key] = state.attrs[key]\n\t\t}\n\t}\n\tif (className != null || state.attrs.className != null) attrs.className =\n\t\tclassName != null\n\t\t\t? state.attrs.className != null\n\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t: className\n\t\t\t: state.attrs.className != null\n\t\t\t\t? state.attrs.className\n\t\t\t\t: null\n\n\tif (hasClass) attrs.class = null\n\n\tfor (var key in attrs) {\n\t\tif (hasOwn.call(attrs, key) && key !== \"key\") {\n\t\t\tvnode.attrs = attrs\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif (Array.isArray(children) && children.length === 1 && children[0] != null && children[0].tag === \"#\") {\n\t\tvnode.text = children[0].children\n\t} else {\n\t\tvnode.children = children\n\t}\n\n\treturn vnode\n}\n\nfunction hyperscript(selector) {\n\tif (selector == null || typeof selector !== \"string\" && typeof selector !== \"function\" && typeof selector.view !== \"function\") {\n\t\tthrow Error(\"The selector must be either a string or a component.\");\n\t}\n\n\tvar vnode = hyperscriptVnode.apply(1, arguments)\n\n\tif (typeof selector === \"string\") {\n\t\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\t\tif (selector !== \"[\") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)\n\t}\n\n\tvnode.tag = selector\n\treturn vnode\n}\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\n// Call via `hyperscriptVnode.apply(startOffset, arguments)`\n//\n// The reason I do it this way, forwarding the arguments and passing the start\n// offset in `this`, is so I don't have to create a temporary array in a\n// performance-critical path.\n//\n// In native ES6, I'd instead add a final `...args` parameter to the\n// `hyperscript` and `fragment` factories and define this as\n// `hyperscriptVnode(...args)`, since modern engines do optimize that away. But\n// ES5 (what Mithril requires thanks to IE support) doesn't give me that luxury,\n// and engines aren't nearly intelligent enough to do either of these:\n//\n// 1. Elide the allocation for `[].slice.call(arguments, 1)` when it's passed to\n// another function only to be indexed.\n// 2. Elide an `arguments` allocation when it's passed to any function other\n// than `Function.prototype.apply` or `Reflect.apply`.\n//\n// In ES6, it'd probably look closer to this (I'd need to profile it, though):\n// module.exports = function(attrs, ...children) {\n// if (attrs == null || typeof attrs === \"object\" && attrs.tag == null && !Array.isArray(attrs)) {\n// if (children.length === 1 && Array.isArray(children[0])) children = children[0]\n// } else {\n// children = children.length === 0 && Array.isArray(attrs) ? attrs : [attrs, ...children]\n// attrs = undefined\n// }\n//\n// if (attrs == null) attrs = {}\n// return Vnode(\"\", attrs.key, attrs, children)\n// }\nmodule.exports = function() {\n\tvar attrs = arguments[this], start = this + 1, children\n\n\tif (attrs == null) {\n\t\tattrs = {}\n\t} else if (typeof attrs !== \"object\" || attrs.tag != null || Array.isArray(attrs)) {\n\t\tattrs = {}\n\t\tstart = this\n\t}\n\n\tif (arguments.length === start + 1) {\n\t\tchildren = arguments[start]\n\t\tif (!Array.isArray(children)) children = [children]\n\t} else {\n\t\tchildren = []\n\t\twhile (start < arguments.length) children.push(arguments[start++])\n\t}\n\n\treturn Vnode(\"\", attrs.key, attrs, children)\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function($window) {\n\tvar $doc = $window && $window.document\n\tvar currentRedraw\n\n\tvar nameSpace = {\n\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\tmath: \"http://www.w3.org/1998/Math/MathML\"\n\t}\n\n\tfunction getNameSpace(vnode) {\n\t\treturn vnode.attrs && vnode.attrs.xmlns || nameSpace[vnode.tag]\n\t}\n\n\t//sanity check to discourage people from doing `vnode.state = ...`\n\tfunction checkState(vnode, original) {\n\t\tif (vnode.state !== original) throw new Error(\"`vnode.state` must not be modified\")\n\t}\n\n\t//Note: the hook is passed as the `this` argument to allow proxying the\n\t//arguments without requiring a full array allocation to do so. It also\n\t//takes advantage of the fact the current `vnode` is the first argument in\n\t//all lifecycle methods.\n\tfunction callHook(vnode) {\n\t\tvar original = vnode.state\n\t\ttry {\n\t\t\treturn this.apply(original, arguments)\n\t\t} finally {\n\t\t\tcheckState(vnode, original)\n\t\t}\n\t}\n\n\t// IE11 (at least) throws an UnspecifiedError when accessing document.activeElement when\n\t// inside an iframe. Catch and swallow this error, and heavy-handidly return null.\n\tfunction activeElement() {\n\t\ttry {\n\t\t\treturn $doc.activeElement\n\t\t} catch (e) {\n\t\t\treturn null\n\t\t}\n\t}\n\t//create\n\tfunction createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) {\n\t\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t}\n\tfunction createNode(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tif (typeof tag === \"string\") {\n\t\t\tvnode.state = {}\n\t\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\t\tswitch (tag) {\n\t\t\t\tcase \"#\": createText(parent, vnode, nextSibling); break\n\t\t\t\tcase \"<\": createHTML(parent, vnode, ns, nextSibling); break\n\t\t\t\tcase \"[\": createFragment(parent, vnode, hooks, ns, nextSibling); break\n\t\t\t\tdefault: createElement(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t\telse createComponent(parent, vnode, hooks, ns, nextSibling)\n\t}\n\tfunction createText(parent, vnode, nextSibling) {\n\t\tvnode.dom = $doc.createTextNode(vnode.children)\n\t\tinsertNode(parent, vnode.dom, nextSibling)\n\t}\n\tvar possibleParents = {caption: \"table\", thead: \"table\", tbody: \"table\", tfoot: \"table\", tr: \"tbody\", th: \"tr\", td: \"tr\", colgroup: \"table\", col: \"colgroup\"}\n\tfunction createHTML(parent, vnode, ns, nextSibling) {\n\t\tvar match = vnode.children.match(/^\\s*?<(\\w+)/im) || []\n\t\t// not using the proper parent makes the child element(s) vanish.\n\t\t// var div = document.createElement(\"div\")\n\t\t// div.innerHTML = \"<td>i</td><td>j</td>\"\n\t\t// console.log(div.innerHTML)\n\t\t// --> \"ij\", no <td> in sight.\n\t\tvar temp = $doc.createElement(possibleParents[match[1]] || \"div\")\n\t\tif (ns === \"http://www.w3.org/2000/svg\") {\n\t\t\ttemp.innerHTML = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">\" + vnode.children + \"</svg>\"\n\t\t\ttemp = temp.firstChild\n\t\t} else {\n\t\t\ttemp.innerHTML = vnode.children\n\t\t}\n\t\tvnode.dom = temp.firstChild\n\t\tvnode.domSize = temp.childNodes.length\n\t\t// Capture nodes to remove, so we don't confuse them.\n\t\tvnode.instance = []\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tvnode.instance.push(child)\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tif (vnode.children != null) {\n\t\t\tvar children = vnode.children\n\t\t\tcreateNodes(fragment, children, 0, children.length, hooks, null, ns)\n\t\t}\n\t\tvnode.dom = fragment.firstChild\n\t\tvnode.domSize = fragment.childNodes.length\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createElement(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tvar attrs = vnode.attrs\n\t\tvar is = attrs && attrs.is\n\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tvar element = ns ?\n\t\t\tis ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) :\n\t\t\tis ? $doc.createElement(tag, {is: is}) : $doc.createElement(tag)\n\t\tvnode.dom = element\n\n\t\tif (attrs != null) {\n\t\t\tsetAttrs(vnode, attrs, ns)\n\t\t}\n\n\t\tinsertNode(parent, element, nextSibling)\n\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (vnode.text != null) {\n\t\t\t\tif (vnode.text !== \"\") element.textContent = vnode.text\n\t\t\t\telse vnode.children = [Vnode(\"#\", undefined, undefined, vnode.text, undefined, undefined)]\n\t\t\t}\n\t\t\tif (vnode.children != null) {\n\t\t\t\tvar children = vnode.children\n\t\t\t\tcreateNodes(element, children, 0, children.length, hooks, null, ns)\n\t\t\t\tif (vnode.tag === \"select\" && attrs != null) setLateSelectAttrs(vnode, attrs)\n\t\t\t}\n\t\t}\n\t}\n\tfunction initComponent(vnode, hooks) {\n\t\tvar sentinel\n\t\tif (typeof vnode.tag.view === \"function\") {\n\t\t\tvnode.state = Object.create(vnode.tag)\n\t\t\tsentinel = vnode.state.view\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t} else {\n\t\t\tvnode.state = void 0\n\t\t\tsentinel = vnode.tag\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t\tvnode.state = (vnode.tag.prototype != null && typeof vnode.tag.prototype.view === \"function\") ? new vnode.tag(vnode) : vnode.tag(vnode)\n\t\t}\n\t\tinitLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tsentinel.$$reentrantLock$$ = null\n\t}\n\tfunction createComponent(parent, vnode, hooks, ns, nextSibling) {\n\t\tinitComponent(vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tcreateNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0\n\t\t}\n\t\telse {\n\t\t\tvnode.domSize = 0\n\t\t}\n\t}\n\n\t//update\n\t/**\n\t * @param {Element|Fragment} parent - the parent element\n\t * @param {Vnode[] | null} old - the list of vnodes of the last `render()` call for\n\t * this part of the tree\n\t * @param {Vnode[] | null} vnodes - as above, but for the current `render()` call.\n\t * @param {Function[]} hooks - an accumulator of post-render hooks (oncreate/onupdate)\n\t * @param {Element | null} nextSibling - the next DOM node if we're dealing with a\n\t * fragment that is not the last item in its\n\t * parent\n\t * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any\n\t * @returns void\n\t */\n\t// This function diffs and patches lists of vnodes, both keyed and unkeyed.\n\t//\n\t// We will:\n\t//\n\t// 1. describe its general structure\n\t// 2. focus on the diff algorithm optimizations\n\t// 3. discuss DOM node operations.\n\n\t// ## Overview:\n\t//\n\t// The updateNodes() function:\n\t// - deals with trivial cases\n\t// - determines whether the lists are keyed or unkeyed based on the first non-null node\n\t// of each list.\n\t// - diffs them and patches the DOM if needed (that's the brunt of the code)\n\t// - manages the leftovers: after diffing, are there:\n\t// - old nodes left to remove?\n\t// \t - new nodes to insert?\n\t// \t deal with them!\n\t//\n\t// The lists are only iterated over once, with an exception for the nodes in `old` that\n\t// are visited in the fourth part of the diff and in the `removeNodes` loop.\n\n\t// ## Diffing\n\t//\n\t// Reading https://github.com/localvoid/ivi/blob/ddc09d06abaef45248e6133f7040d00d3c6be853/packages/ivi/src/vdom/implementation.ts#L617-L837\n\t// may be good for context on longest increasing subsequence-based logic for moving nodes.\n\t//\n\t// In order to diff keyed lists, one has to\n\t//\n\t// 1) match nodes in both lists, per key, and update them accordingly\n\t// 2) create the nodes present in the new list, but absent in the old one\n\t// 3) remove the nodes present in the old list, but absent in the new one\n\t// 4) figure out what nodes in 1) to move in order to minimize the DOM operations.\n\t//\n\t// To achieve 1) one can create a dictionary of keys => index (for the old list), then iterate\n\t// over the new list and for each new vnode, find the corresponding vnode in the old list using\n\t// the map.\n\t// 2) is achieved in the same step: if a new node has no corresponding entry in the map, it is new\n\t// and must be created.\n\t// For the removals, we actually remove the nodes that have been updated from the old list.\n\t// The nodes that remain in that list after 1) and 2) have been performed can be safely removed.\n\t// The fourth step is a bit more complex and relies on the longest increasing subsequence (LIS)\n\t// algorithm.\n\t//\n\t// the longest increasing subsequence is the list of nodes that can remain in place. Imagine going\n\t// from `1,2,3,4,5` to `4,5,1,2,3` where the numbers are not necessarily the keys, but the indices\n\t// corresponding to the keyed nodes in the old list (keyed nodes `e,d,c,b,a` => `b,a,e,d,c` would\n\t// match the above lists, for example).\n\t//\n\t// In there are two increasing subsequences: `4,5` and `1,2,3`, the latter being the longest. We\n\t// can update those nodes without moving them, and only call `insertNode` on `4` and `5`.\n\t//\n\t// @localvoid adapted the algo to also support node deletions and insertions (the `lis` is actually\n\t// the longest increasing subsequence *of old nodes still present in the new list*).\n\t//\n\t// It is a general algorithm that is fireproof in all circumstances, but it requires the allocation\n\t// and the construction of a `key => oldIndex` map, and three arrays (one with `newIndex => oldIndex`,\n\t// the `LIS` and a temporary one to create the LIS).\n\t//\n\t// So we cheat where we can: if the tails of the lists are identical, they are guaranteed to be part of\n\t// the LIS and can be updated without moving them.\n\t//\n\t// If two nodes are swapped, they are guaranteed not to be part of the LIS, and must be moved (with\n\t// the exception of the last node if the list is fully reversed).\n\t//\n\t// ## Finding the next sibling.\n\t//\n\t// `updateNode()` and `createNode()` expect a nextSibling parameter to perform DOM operations.\n\t// When the list is being traversed top-down, at any index, the DOM nodes up to the previous\n\t// vnode reflect the content of the new list, whereas the rest of the DOM nodes reflect the old\n\t// list. The next sibling must be looked for in the old list using `getNextSibling(... oldStart + 1 ...)`.\n\t//\n\t// In the other scenarios (swaps, upwards traversal, map-based diff),\n\t// the new vnodes list is traversed upwards. The DOM nodes at the bottom of the list reflect the\n\t// bottom part of the new vnodes list, and we can use the `v.dom` value of the previous node\n\t// as the next sibling (cached in the `nextSibling` variable).\n\n\n\t// ## DOM node moves\n\t//\n\t// In most scenarios `updateNode()` and `createNode()` perform the DOM operations. However,\n\t// this is not the case if the node moved (second and fourth part of the diff algo). We move\n\t// the old DOM nodes before updateNode runs because it enables us to use the cached `nextSibling`\n\t// variable rather than fetching it using `getNextSibling()`.\n\t//\n\t// The fourth part of the diff currently inserts nodes unconditionally, leading to issues\n\t// like #1791 and #1999. We need to be smarter about those situations where adjascent old\n\t// nodes remain together in the new list in a way that isn't covered by parts one and\n\t// three of the diff algo.\n\n\tfunction updateNodes(parent, old, vnodes, hooks, nextSibling, ns) {\n\t\tif (old === vnodes || old == null && vnodes == null) return\n\t\telse if (old == null || old.length === 0) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, ns)\n\t\telse if (vnodes == null || vnodes.length === 0) removeNodes(parent, old, 0, old.length)\n\t\telse {\n\t\t\tvar isOldKeyed = old[0] != null && old[0].key != null\n\t\t\tvar isKeyed = vnodes[0] != null && vnodes[0].key != null\n\t\t\tvar start = 0, oldStart = 0\n\t\t\tif (!isOldKeyed) while (oldStart < old.length && old[oldStart] == null) oldStart++\n\t\t\tif (!isKeyed) while (start < vnodes.length && vnodes[start] == null) start++\n\t\t\tif (isKeyed === null && isOldKeyed == null) return // both lists are full of nulls\n\t\t\tif (isOldKeyed !== isKeyed) {\n\t\t\t\tremoveNodes(parent, old, oldStart, old.length)\n\t\t\t\tcreateNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else if (!isKeyed) {\n\t\t\t\t// Don't index past the end of either list (causes deopts).\n\t\t\t\tvar commonLength = old.length < vnodes.length ? old.length : vnodes.length\n\t\t\t\t// Rewind if necessary to the first non-null index on either side.\n\t\t\t\t// We could alternatively either explicitly create or remove nodes when `start !== oldStart`\n\t\t\t\t// but that would be optimizing for sparse lists which are more rare than dense ones.\n\t\t\t\tstart = start < oldStart ? start : oldStart\n\t\t\t\tfor (; start < commonLength; start++) {\n\t\t\t\t\to = old[start]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o === v || o == null && v == null) continue\n\t\t\t\t\telse if (o == null) createNode(parent, v, hooks, ns, getNextSibling(old, start + 1, nextSibling))\n\t\t\t\t\telse if (v == null) removeNode(parent, o)\n\t\t\t\t\telse updateNode(parent, o, v, hooks, getNextSibling(old, start + 1, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\tif (old.length > commonLength) removeNodes(parent, old, start, old.length)\n\t\t\t\tif (vnodes.length > commonLength) createNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else {\n\t\t\t\t// keyed diff\n\t\t\t\tvar oldEnd = old.length - 1, end = vnodes.length - 1, map, o, v, oe, ve, topSibling\n\n\t\t\t\t// bottom-up\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t}\n\t\t\t\t// top-down\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o.key !== v.key) break\n\t\t\t\t\toldStart++, start++\n\t\t\t\t\tif (o !== v) updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\t// swaps and list reversals\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (start === end) break\n\t\t\t\t\tif (o.key !== ve.key || oe.key !== v.key) break\n\t\t\t\t\ttopSibling = getNextSibling(old, oldStart, nextSibling)\n\t\t\t\t\tmoveNodes(parent, oe, topSibling)\n\t\t\t\t\tif (oe !== v) updateNode(parent, oe, v, hooks, topSibling, ns)\n\t\t\t\t\tif (++start <= --end) moveNodes(parent, o, nextSibling)\n\t\t\t\t\tif (o !== ve) updateNode(parent, o, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldStart++; oldEnd--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t}\n\t\t\t\t// bottom up once again\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t}\n\t\t\t\tif (start > end) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\telse if (oldStart > oldEnd) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\telse {\n\t\t\t\t\t// inspired by ivi https://github.com/ivijs/ivi/ by Boris Kaul\n\t\t\t\t\tvar originalNextSibling = nextSibling, vnodesLength = end - start + 1, oldIndices = new Array(vnodesLength), li=0, i=0, pos = 2147483647, matched = 0, map, lisIndices\n\t\t\t\t\tfor (i = 0; i < vnodesLength; i++) oldIndices[i] = -1\n\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\tif (map == null) map = getKeyMap(old, oldStart, oldEnd + 1)\n\t\t\t\t\t\tve = vnodes[i]\n\t\t\t\t\t\tvar oldIndex = map[ve.key]\n\t\t\t\t\t\tif (oldIndex != null) {\n\t\t\t\t\t\t\tpos = (oldIndex < pos) ? oldIndex : -1 // becomes -1 if nodes were re-ordered\n\t\t\t\t\t\t\toldIndices[i-start] = oldIndex\n\t\t\t\t\t\t\toe = old[oldIndex]\n\t\t\t\t\t\t\told[oldIndex] = null\n\t\t\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\t\t\tmatched++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnextSibling = originalNextSibling\n\t\t\t\t\tif (matched !== oldEnd - oldStart + 1) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\t\tif (matched === 0) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (pos === -1) {\n\t\t\t\t\t\t\t// the indices of the indices of the items that are part of the\n\t\t\t\t\t\t\t// longest increasing subsequence in the oldIndices list\n\t\t\t\t\t\t\tlisIndices = makeLisIndices(oldIndices)\n\t\t\t\t\t\t\tli = lisIndices.length - 1\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (lisIndices[li] === i - start) li--\n\t\t\t\t\t\t\t\t\telse moveNodes(parent, v, nextSibling)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateNode(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvar oldTag = old.tag, tag = vnode.tag\n\t\tif (oldTag === tag) {\n\t\t\tvnode.state = old.state\n\t\t\tvnode.events = old.events\n\t\t\tif (shouldNotUpdate(vnode, old)) return\n\t\t\tif (typeof oldTag === \"string\") {\n\t\t\t\tif (vnode.attrs != null) {\n\t\t\t\t\tupdateLifecycle(vnode.attrs, vnode, hooks)\n\t\t\t\t}\n\t\t\t\tswitch (oldTag) {\n\t\t\t\t\tcase \"#\": updateText(old, vnode); break\n\t\t\t\t\tcase \"<\": updateHTML(parent, old, vnode, ns, nextSibling); break\n\t\t\t\t\tcase \"[\": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break\n\t\t\t\t\tdefault: updateElement(old, vnode, hooks, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse updateComponent(parent, old, vnode, hooks, nextSibling, ns)\n\t\t}\n\t\telse {\n\t\t\tremoveNode(parent, old)\n\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t}\n\t}\n\tfunction updateText(old, vnode) {\n\t\tif (old.children.toString() !== vnode.children.toString()) {\n\t\t\told.dom.nodeValue = vnode.children\n\t\t}\n\t\tvnode.dom = old.dom\n\t}\n\tfunction updateHTML(parent, old, vnode, ns, nextSibling) {\n\t\tif (old.children !== vnode.children) {\n\t\t\tremoveHTML(parent, old)\n\t\t\tcreateHTML(parent, vnode, ns, nextSibling)\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t\tvnode.instance = old.instance\n\t\t}\n\t}\n\tfunction updateFragment(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tupdateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns)\n\t\tvar domSize = 0, children = vnode.children\n\t\tvnode.dom = null\n\t\tif (children != null) {\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\tvar child = children[i]\n\t\t\t\tif (child != null && child.dom != null) {\n\t\t\t\t\tif (vnode.dom == null) vnode.dom = child.dom\n\t\t\t\t\tdomSize += child.domSize || 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (domSize !== 1) vnode.domSize = domSize\n\t\t}\n\t}\n\tfunction updateElement(old, vnode, hooks, ns) {\n\t\tvar element = vnode.dom = old.dom\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tif (vnode.tag === \"textarea\") {\n\t\t\tif (vnode.attrs == null) vnode.attrs = {}\n\t\t\tif (vnode.text != null) {\n\t\t\t\tvnode.attrs.value = vnode.text //FIXME handle multiple children\n\t\t\t\tvnode.text = undefined\n\t\t\t}\n\t\t}\n\t\tupdateAttrs(vnode, old.attrs, vnode.attrs, ns)\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (old.text != null && vnode.text != null && vnode.text !== \"\") {\n\t\t\t\tif (old.text.toString() !== vnode.text.toString()) old.dom.firstChild.nodeValue = vnode.text\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (old.text != null) old.children = [Vnode(\"#\", undefined, undefined, old.text, undefined, old.dom.firstChild)]\n\t\t\t\tif (vnode.text != null) vnode.children = [Vnode(\"#\", undefined, undefined, vnode.text, undefined, undefined)]\n\t\t\t\tupdateNodes(element, old.children, vnode.children, hooks, null, ns)\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateComponent(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tupdateLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) updateLifecycle(vnode.attrs, vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tif (old.instance == null) createNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\telse updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, ns)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.instance.domSize\n\t\t}\n\t\telse if (old.instance != null) {\n\t\t\tremoveNode(parent, old.instance)\n\t\t\tvnode.dom = undefined\n\t\t\tvnode.domSize = 0\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction getKeyMap(vnodes, start, end) {\n\t\tvar map = Object.create(null)\n\t\tfor (; start < end; start++) {\n\t\t\tvar vnode = vnodes[start]\n\t\t\tif (vnode != null) {\n\t\t\t\tvar key = vnode.key\n\t\t\t\tif (key != null) map[key] = start\n\t\t\t}\n\t\t}\n\t\treturn map\n\t}\n\t// Lifted from ivi https://github.com/ivijs/ivi/\n\t// takes a list of unique numbers (-1 is special and can\n\t// occur multiple times) and returns an array with the indices\n\t// of the items that are part of the longest increasing\n\t// subsequece\n\tvar lisTemp = []\n\tfunction makeLisIndices(a) {\n\t\tvar result = [0]\n\t\tvar u = 0, v = 0, i = 0\n\t\tvar il = lisTemp.length = a.length\n\t\tfor (var i = 0; i < il; i++) lisTemp[i] = a[i]\n\t\tfor (var i = 0; i < il; ++i) {\n\t\t\tif (a[i] === -1) continue\n\t\t\tvar j = result[result.length - 1]\n\t\t\tif (a[j] < a[i]) {\n\t\t\t\tlisTemp[i] = j\n\t\t\t\tresult.push(i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = 0\n\t\t\tv = result.length - 1\n\t\t\twhile (u < v) {\n\t\t\t\t// Fast integer average without overflow.\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tvar c = (u >>> 1) + (v >>> 1) + (u & v & 1)\n\t\t\t\tif (a[result[c]] < a[i]) {\n\t\t\t\t\tu = c + 1\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tv = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a[i] < a[result[u]]) {\n\t\t\t\tif (u > 0) lisTemp[i] = result[u - 1]\n\t\t\t\tresult[u] = i\n\t\t\t}\n\t\t}\n\t\tu = result.length\n\t\tv = result[u - 1]\n\t\twhile (u-- > 0) {\n\t\t\tresult[u] = v\n\t\t\tv = lisTemp[v]\n\t\t}\n\t\tlisTemp.length = 0\n\t\treturn result\n\t}\n\n\tfunction getNextSibling(vnodes, i, nextSibling) {\n\t\tfor (; i < vnodes.length; i++) {\n\t\t\tif (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom\n\t\t}\n\t\treturn nextSibling\n\t}\n\n\t// This covers a really specific edge case:\n\t// - Parent node is keyed and contains child\n\t// - Child is removed, returns unresolved promise in `onbeforeremove`\n\t// - Parent node is moved in keyed diff\n\t// - Remaining children still need moved appropriately\n\t//\n\t// Ideally, I'd track removed nodes as well, but that introduces a lot more\n\t// complexity and I'm not exactly interested in doing that.\n\tfunction moveNodes(parent, vnode, nextSibling) {\n\t\tvar frag = $doc.createDocumentFragment()\n\t\tmoveChildToFrag(parent, frag, vnode)\n\t\tinsertNode(parent, frag, nextSibling)\n\t}\n\tfunction moveChildToFrag(parent, frag, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\t\t\tfrag.appendChild(vnode.instance[i])\n\t\t\t\t}\n\t\t\t} else if (vnode.tag !== \"[\") {\n\t\t\t\t// Don't recurse for text nodes *or* elements, just fragments\n\t\t\t\tfrag.appendChild(vnode.dom)\n\t\t\t} else if (vnode.children.length === 1) {\n\t\t\t\tvnode = vnode.children[0]\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\tif (child != null) moveChildToFrag(parent, frag, child)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfunction insertNode(parent, dom, nextSibling) {\n\t\tif (nextSibling != null) parent.insertBefore(dom, nextSibling)\n\t\telse parent.appendChild(dom)\n\t}\n\n\tfunction maybeSetContentEditable(vnode) {\n\t\tif (vnode.attrs == null || (\n\t\t\tvnode.attrs.contenteditable == null && // attribute\n\t\t\tvnode.attrs.contentEditable == null // property\n\t\t)) return false\n\t\tvar children = vnode.children\n\t\tif (children != null && children.length === 1 && children[0].tag === \"<\") {\n\t\t\tvar content = children[0].children\n\t\t\tif (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content\n\t\t}\n\t\telse if (vnode.text != null || children != null && children.length !== 0) throw new Error(\"Child node of a contenteditable must be trusted\")\n\t\treturn true\n\t}\n\n\t//remove\n\tfunction removeNodes(parent, vnodes, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) removeNode(parent, vnode)\n\t\t}\n\t}\n\tfunction removeNode(parent, vnode) {\n\t\tvar mask = 0\n\t\tvar original = vnode.state\n\t\tvar stateResult, attrsResult\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.state.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\tmask = 1\n\t\t\t\tstateResult = result\n\t\t\t}\n\t\t}\n\t\tif (vnode.attrs && typeof vnode.attrs.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.attrs.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tmask |= 2\n\t\t\t\tattrsResult = result\n\t\t\t}\n\t\t}\n\t\tcheckState(vnode, original)\n\n\t\t// If we can, try to fast-path it and avoid all the overhead of awaiting\n\t\tif (!mask) {\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t} else {\n\t\t\tif (stateResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) { mask &= 2; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tstateResult.then(next, next)\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) { mask &= 1; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tattrsResult.then(next, next)\n\t\t\t}\n\t\t}\n\n\t\tfunction reallyRemove() {\n\t\t\tcheckState(vnode, original)\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t}\n\t}\n\tfunction removeHTML(parent, vnode) {\n\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\tparent.removeChild(vnode.instance[i])\n\t\t}\n\t}\n\tfunction removeChild(parent, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tremoveHTML(parent, vnode)\n\t\t\t} else {\n\t\t\t\tif (vnode.tag !== \"[\") {\n\t\t\t\t\tparent.removeChild(vnode.dom)\n\t\t\t\t\tif (!Array.isArray(vnode.children)) break\n\t\t\t\t}\n\t\t\t\tif (vnode.children.length === 1) {\n\t\t\t\t\tvnode = vnode.children[0]\n\t\t\t\t\tif (vnode != null) continue\n\t\t\t\t} else {\n\t\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\t\tif (child != null) removeChild(parent, child)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tfunction onremove(vnode) {\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onremove === \"function\") callHook.call(vnode.state.onremove, vnode)\n\t\tif (vnode.attrs && typeof vnode.attrs.onremove === \"function\") callHook.call(vnode.attrs.onremove, vnode)\n\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\tif (vnode.instance != null) onremove(vnode.instance)\n\t\t} else {\n\t\t\tvar children = vnode.children\n\t\t\tif (Array.isArray(children)) {\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar child = children[i]\n\t\t\t\t\tif (child != null) onremove(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//attrs\n\tfunction setAttrs(vnode, attrs, ns) {\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\") return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") return updateEvent(vnode, key, value)\n\t\tif (key.slice(0, 6) === \"xlink:\") vnode.dom.setAttributeNS(\"http://www.w3.org/1999/xlink\", key.slice(6), value)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, value)\n\t\telse if (hasPropertyKey(vnode, key, ns)) {\n\t\t\tif (key === \"value\") {\n\t\t\t\t// Only do the coercion if we're actually going to check the value.\n\t\t\t\t/* eslint-disable no-implicit-coercion */\n\t\t\t\t//setting input[value] to same value by typing on focused element moves cursor to end in Chrome\n\t\t\t\tif ((vnode.tag === \"input\" || vnode.tag === \"textarea\") && vnode.dom.value === \"\" + value && vnode.dom === activeElement()) return\n\t\t\t\t//setting select[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"select\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting option[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"option\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t/* eslint-enable no-implicit-coercion */\n\t\t\t}\n\t\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t\tif (vnode.tag === \"input\" && key === \"type\") vnode.dom.setAttribute(key, value)\n\t\t\telse vnode.dom[key] = value\n\t\t} else {\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tif (value) vnode.dom.setAttribute(key, \"\")\n\t\t\t\telse vnode.dom.removeAttribute(key)\n\t\t\t}\n\t\t\telse vnode.dom.setAttribute(key === \"className\" ? \"class\" : key, value)\n\t\t}\n\t}\n\tfunction removeAttr(vnode, key, old, ns) {\n\t\tif (key === \"key\" || key === \"is\" || old == null || isLifecycleMethod(key)) return\n\t\tif (key[0] === \"o\" && key[1] === \"n\" && !isLifecycleMethod(key)) updateEvent(vnode, key, undefined)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, null)\n\t\telse if (\n\t\t\thasPropertyKey(vnode, key, ns)\n\t\t\t&& key !== \"className\"\n\t\t\t&& !(key === \"value\" && (\n\t\t\t\tvnode.tag === \"option\"\n\t\t\t\t|| vnode.tag === \"select\" && vnode.dom.selectedIndex === -1 && vnode.dom === activeElement()\n\t\t\t))\n\t\t\t&& !(vnode.tag === \"input\" && key === \"type\")\n\t\t) {\n\t\t\tvnode.dom[key] = null\n\t\t} else {\n\t\t\tvar nsLastIndex = key.indexOf(\":\")\n\t\t\tif (nsLastIndex !== -1) key = key.slice(nsLastIndex + 1)\n\t\t\tif (old !== false) vnode.dom.removeAttribute(key === \"className\" ? \"class\" : key)\n\t\t}\n\t}\n\tfunction setLateSelectAttrs(vnode, attrs) {\n\t\tif (\"value\" in attrs) {\n\t\t\tif(attrs.value === null) {\n\t\t\t\tif (vnode.dom.selectedIndex !== -1) vnode.dom.value = null\n\t\t\t} else {\n\t\t\t\tvar normalized = \"\" + attrs.value // eslint-disable-line no-implicit-coercion\n\t\t\t\tif (vnode.dom.value !== normalized || vnode.dom.selectedIndex === -1) {\n\t\t\t\t\tvnode.dom.value = normalized\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\"selectedIndex\" in attrs) setAttr(vnode, \"selectedIndex\", null, attrs.selectedIndex, undefined)\n\t}\n\tfunction updateAttrs(vnode, old, attrs, ns) {\n\t\tif (attrs != null) {\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns)\n\t\t\t}\n\t\t}\n\t\tvar val\n\t\tif (old != null) {\n\t\t\tfor (var key in old) {\n\t\t\t\tif (((val = old[key]) != null) && (attrs == null || attrs[key] == null)) {\n\t\t\t\t\tremoveAttr(vnode, key, val, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction isFormAttribute(vnode, attr) {\n\t\treturn attr === \"value\" || attr === \"checked\" || attr === \"selectedIndex\" || attr === \"selected\" && vnode.dom === activeElement() || vnode.tag === \"option\" && vnode.dom.parentNode === $doc.activeElement\n\t}\n\tfunction isLifecycleMethod(attr) {\n\t\treturn attr === \"oninit\" || attr === \"oncreate\" || attr === \"onupdate\" || attr === \"onremove\" || attr === \"onbeforeremove\" || attr === \"onbeforeupdate\"\n\t}\n\tfunction hasPropertyKey(vnode, key, ns) {\n\t\t// Filter out namespaced keys\n\t\treturn ns === undefined && (\n\t\t\t// If it's a custom element, just keep it.\n\t\t\tvnode.tag.indexOf(\"-\") > -1 || vnode.attrs != null && vnode.attrs.is ||\n\t\t\t// If it's a normal element, let's try to avoid a few browser bugs.\n\t\t\tkey !== \"href\" && key !== \"list\" && key !== \"form\" && key !== \"width\" && key !== \"height\"// && key !== \"type\"\n\t\t\t// Defer the property check until *after* we check everything.\n\t\t) && key in vnode.dom\n\t}\n\n\t//style\n\tvar uppercaseRegex = /[A-Z]/g\n\tfunction toLowerCase(capital) { return \"-\" + capital.toLowerCase() }\n\tfunction normalizeKey(key) {\n\t\treturn key[0] === \"-\" && key[1] === \"-\" ? key :\n\t\t\tkey === \"cssFloat\" ? \"float\" :\n\t\t\t\tkey.replace(uppercaseRegex, toLowerCase)\n\t}\n\tfunction updateStyle(element, old, style) {\n\t\tif (old === style) {\n\t\t\t// Styles are equivalent, do nothing.\n\t\t} else if (style == null) {\n\t\t\t// New style is missing, just clear it.\n\t\t\telement.style.cssText = \"\"\n\t\t} else if (typeof style !== \"object\") {\n\t\t\t// New style is a string, let engine deal with patching.\n\t\t\telement.style.cssText = style\n\t\t} else if (old == null || typeof old !== \"object\") {\n\t\t\t// `old` is missing or a string, `style` is an object.\n\t\t\telement.style.cssText = \"\"\n\t\t\t// Add new style properties\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null) element.style.setProperty(normalizeKey(key), String(value))\n\t\t\t}\n\t\t} else {\n\t\t\t// Both old & new are (different) objects.\n\t\t\t// Update style properties that have changed\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null && (value = String(value)) !== String(old[key])) {\n\t\t\t\t\telement.style.setProperty(normalizeKey(key), value)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove style properties that no longer exist\n\t\t\tfor (var key in old) {\n\t\t\t\tif (old[key] != null && style[key] == null) {\n\t\t\t\t\telement.style.removeProperty(normalizeKey(key))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here's an explanation of how this works:\n\t// 1. The event names are always (by design) prefixed by `on`.\n\t// 2. The EventListener interface accepts either a function or an object\n\t// with a `handleEvent` method.\n\t// 3. The object does not inherit from `Object.prototype`, to avoid\n\t// any potential interference with that (e.g. setters).\n\t// 4. The event name is remapped to the handler before calling it.\n\t// 5. In function-based event handlers, `ev.target === this`. We replicate\n\t// that below.\n\t// 6. In function-based event handlers, `return false` prevents the default\n\t// action and stops event propagation. We replicate that below.\n\tfunction EventDict() {\n\t\t// Save this, so the current redraw is correctly tracked.\n\t\tthis._ = currentRedraw\n\t}\n\tEventDict.prototype = Object.create(null)\n\tEventDict.prototype.handleEvent = function (ev) {\n\t\tvar handler = this[\"on\" + ev.type]\n\t\tvar result\n\t\tif (typeof handler === \"function\") result = handler.call(ev.currentTarget, ev)\n\t\telse if (typeof handler.handleEvent === \"function\") handler.handleEvent(ev)\n\t\tif (this._ && ev.redraw !== false) (0, this._)()\n\t\tif (result === false) {\n\t\t\tev.preventDefault()\n\t\t\tev.stopPropagation()\n\t\t}\n\t}\n\n\t//event\n\tfunction updateEvent(vnode, key, value) {\n\t\tif (vnode.events != null) {\n\t\t\tif (vnode.events[key] === value) return\n\t\t\tif (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\t\tif (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = value\n\t\t\t} else {\n\t\t\t\tif (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = undefined\n\t\t\t}\n\t\t} else if (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\tvnode.events = new EventDict()\n\t\t\tvnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\tvnode.events[key] = value\n\t\t}\n\t}\n\n\t//lifecycle\n\tfunction initLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.oninit === \"function\") callHook.call(source.oninit, vnode)\n\t\tif (typeof source.oncreate === \"function\") hooks.push(callHook.bind(source.oncreate, vnode))\n\t}\n\tfunction updateLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.onupdate === \"function\") hooks.push(callHook.bind(source.onupdate, vnode))\n\t}\n\tfunction shouldNotUpdate(vnode, old) {\n\t\tdo {\n\t\t\tif (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.attrs.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.state.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\treturn false\n\t\t} while (false); // eslint-disable-line no-constant-condition\n\t\tvnode.dom = old.dom\n\t\tvnode.domSize = old.domSize\n\t\tvnode.instance = old.instance\n\t\t// One would think having the actual latest attributes would be ideal,\n\t\t// but it doesn't let us properly diff based on our current internal\n\t\t// representation. We have to save not only the old DOM info, but also\n\t\t// the attributes used to create it, as we diff *that*, not against the\n\t\t// DOM directly (with a few exceptions in `setAttr`). And, of course, we\n\t\t// need to save the children and text as they are conceptually not\n\t\t// unlike special \"attributes\" internally.\n\t\tvnode.attrs = old.attrs\n\t\tvnode.children = old.children\n\t\tvnode.text = old.text\n\t\treturn true\n\t}\n\n\treturn function(dom, vnodes, redraw) {\n\t\tif (!dom) throw new TypeError(\"Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.\")\n\t\tvar hooks = []\n\t\tvar active = activeElement()\n\t\tvar namespace = dom.namespaceURI\n\n\t\t// First time rendering into a node clears it out\n\t\tif (dom.vnodes == null) dom.textContent = \"\"\n\n\t\tvnodes = Vnode.normalizeChildren(Array.isArray(vnodes) ? vnodes : [vnodes])\n\t\tvar prevRedraw = currentRedraw\n\t\ttry {\n\t\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\n\t\t\tupdateNodes(dom, dom.vnodes, vnodes, hooks, null, namespace === \"http://www.w3.org/1999/xhtml\" ? undefined : namespace)\n\t\t} finally {\n\t\t\tcurrentRedraw = prevRedraw\n\t\t}\n\t\tdom.vnodes = vnodes\n\t\t// `document.activeElement` can return null: https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n\t\tif (active != null && activeElement() !== active && typeof active.focus === \"function\") active.focus()\n\t\tfor (var i = 0; i < hooks.length; i++) hooks[i]()\n\t}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(html) {\n\tif (html == null) html = \"\"\n\treturn Vnode(\"<\", undefined, undefined, html, undefined, undefined)\n}\n","\"use strict\"\n\nfunction Vnode(tag, key, attrs, children, text, dom) {\n\treturn {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: undefined, events: undefined, instance: undefined}\n}\nVnode.normalize = function(node) {\n\tif (Array.isArray(node)) return Vnode(\"[\", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)\n\tif (node == null || typeof node === \"boolean\") return null\n\tif (typeof node === \"object\") return node\n\treturn Vnode(\"#\", undefined, undefined, String(node), undefined, undefined)\n}\nVnode.normalizeChildren = function(input) {\n\tvar children = []\n\tif (input.length) {\n\t\tvar isKeyed = input[0] != null && input[0].key != null\n\t\t// Note: this is a *very* perf-sensitive check.\n\t\t// Fun fact: merging the loop like this is somehow faster than splitting\n\t\t// it, noticeably so.\n\t\tfor (var i = 1; i < input.length; i++) {\n\t\t\tif ((input[i] != null && input[i].key != null) !== isKeyed) {\n\t\t\t\tthrow new TypeError(\"Vnodes must either always have keys or never have keys!\")\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tchildren[i] = Vnode.normalize(input[i])\n\t\t}\n\t}\n\treturn children\n}\n\nmodule.exports = Vnode\n","\"use strict\"\n\nvar PromisePolyfill = require(\"./promise/promise\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(window, PromisePolyfill, mountRedraw.redraw)\n","\"use strict\"\n\nvar buildPathname = require(\"../pathname/build\")\n\nmodule.exports = function($window, Promise, oncompletion) {\n\tvar callbackCount = 0\n\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\n\t}\n\n\t// In case the global Promise is some userland library's where they rely on\n\t// `foo instanceof this.constructor`, `this.constructor.resolve(value)`, or\n\t// similar. Let's *not* break them.\n\tPromiseProxy.prototype = Promise.prototype\n\tPromiseProxy.__proto__ = Promise // eslint-disable-line no-proto\n\n\tfunction makeRequest(factory) {\n\t\treturn function(url, args) {\n\t\t\tif (typeof url !== \"string\") { args = url; url = url.url }\n\t\t\telse if (args == null) args = {}\n\t\t\tvar promise = new Promise(function(resolve, reject) {\n\t\t\t\tfactory(buildPathname(url, args.params), args, function (data) {\n\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\t\t\t\t\tdata[i] = new args.type(data[i])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse data = new args.type(data)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data)\n\t\t\t\t}, reject)\n\t\t\t})\n\t\t\tif (args.background === true) return promise\n\t\t\tvar count = 0\n\t\t\tfunction complete() {\n\t\t\t\tif (--count === 0 && typeof oncompletion === \"function\") oncompletion()\n\t\t\t}\n\n\t\t\treturn wrap(promise)\n\n\t\t\tfunction wrap(promise) {\n\t\t\t\tvar then = promise.then\n\t\t\t\t// Set the constructor, so engines know to not await or resolve\n\t\t\t\t// this as a native promise. At the time of writing, this is\n\t\t\t\t// only necessary for V8, but their behavior is the correct\n\t\t\t\t// behavior per spec. See this spec issue for more details:\n\t\t\t\t// https://github.com/tc39/ecma262/issues/1577. Also, see the\n\t\t\t\t// corresponding comment in `request/tests/test-request.js` for\n\t\t\t\t// a bit more background on the issue at hand.\n\t\t\t\tpromise.constructor = PromiseProxy\n\t\t\t\tpromise.then = function() {\n\t\t\t\t\tcount++\n\t\t\t\t\tvar next = then.apply(promise, arguments)\n\t\t\t\t\tnext.then(complete, function(e) {\n\t\t\t\t\t\tcomplete()\n\t\t\t\t\t\tif (count === 0) throw e\n\t\t\t\t\t})\n\t\t\t\t\treturn wrap(next)\n\t\t\t\t}\n\t\t\t\treturn promise\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasHeader(args, name) {\n\t\tfor (var key in args.headers) {\n\t\t\tif ({}.hasOwnProperty.call(args.headers, key) && name.test(key)) return true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn {\n\t\trequest: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar method = args.method != null ? args.method.toUpperCase() : \"GET\"\n\t\t\tvar body = args.body\n\t\t\tvar assumeJSON = (args.serialize == null || args.serialize === JSON.serialize) && !(body instanceof $window.FormData)\n\t\t\tvar responseType = args.responseType || (typeof args.extract === \"function\" ? \"\" : \"json\")\n\n\t\t\tvar xhr = new $window.XMLHttpRequest(), aborted = false\n\t\t\tvar original = xhr, replacedAbort\n\t\t\tvar abort = xhr.abort\n\n\t\t\txhr.abort = function() {\n\t\t\t\taborted = true\n\t\t\t\tabort.call(this)\n\t\t\t}\n\n\t\t\txhr.open(method, url, args.async !== false, typeof args.user === \"string\" ? args.user : undefined, typeof args.password === \"string\" ? args.password : undefined)\n\n\t\t\tif (assumeJSON && body != null && !hasHeader(args, /^content-type$/i)) {\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\")\n\t\t\t}\n\t\t\tif (typeof args.deserialize !== \"function\" && !hasHeader(args, /^accept$/i)) {\n\t\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\n\t\t\t}\n\t\t\tif (args.withCredentials) xhr.withCredentials = args.withCredentials\n\t\t\tif (args.timeout) xhr.timeout = args.timeout\n\t\t\txhr.responseType = responseType\n\n\t\t\tfor (var key in args.headers) {\n\t\t\t\tif ({}.hasOwnProperty.call(args.headers, key)) {\n\t\t\t\t\txhr.setRequestHeader(key, args.headers[key])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.onreadystatechange = function(ev) {\n\t\t\t\t// Don't throw errors on xhr.abort().\n\t\t\t\tif (aborted) return\n\n\t\t\t\tif (ev.target.readyState === 4) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar success = (ev.target.status >= 200 && ev.target.status < 300) || ev.target.status === 304 || (/^file:\\/\\//i).test(url)\n\t\t\t\t\t\t// When the response type isn't \"\" or \"text\",\n\t\t\t\t\t\t// `xhr.responseText` is the wrong thing to use.\n\t\t\t\t\t\t// Browsers do the right thing and throw here, and we\n\t\t\t\t\t\t// should honor that and do the right thing by\n\t\t\t\t\t\t// preferring `xhr.response` where possible/practical.\n\t\t\t\t\t\tvar response = ev.target.response, message\n\n\t\t\t\t\t\tif (responseType === \"json\") {\n\t\t\t\t\t\t\t// For IE and Edge, which don't implement\n\t\t\t\t\t\t\t// `responseType: \"json\"`.\n\t\t\t\t\t\t\tif (!ev.target.responseType && typeof args.extract !== \"function\") response = JSON.parse(ev.target.responseText)\n\t\t\t\t\t\t} else if (!responseType || responseType === \"text\") {\n\t\t\t\t\t\t\t// Only use this default if it's text. If a parsed\n\t\t\t\t\t\t\t// document is needed on old IE and friends (all\n\t\t\t\t\t\t\t// unsupported), the user should use a custom\n\t\t\t\t\t\t\t// `config` instead. They're already using this at\n\t\t\t\t\t\t\t// their own risk.\n\t\t\t\t\t\t\tif (response == null) response = ev.target.responseText\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof args.extract === \"function\") {\n\t\t\t\t\t\t\tresponse = args.extract(ev.target, args)\n\t\t\t\t\t\t\tsuccess = true\n\t\t\t\t\t\t} else if (typeof args.deserialize === \"function\") {\n\t\t\t\t\t\t\tresponse = args.deserialize(response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (success) resolve(response)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttry { message = ev.target.responseText }\n\t\t\t\t\t\t\tcatch (e) { message = response }\n\t\t\t\t\t\t\tvar error = new Error(message)\n\t\t\t\t\t\t\terror.code = ev.target.status\n\t\t\t\t\t\t\terror.response = response\n\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof args.config === \"function\") {\n\t\t\t\txhr = args.config(xhr, args, url) || xhr\n\n\t\t\t\t// Propagate the `abort` to any replacement XHR as well.\n\t\t\t\tif (xhr !== original) {\n\t\t\t\t\treplacedAbort = xhr.abort\n\t\t\t\t\txhr.abort = function() {\n\t\t\t\t\t\taborted = true\n\t\t\t\t\t\treplacedAbort.call(this)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (body == null) xhr.send()\n\t\t\telse if (typeof args.serialize === \"function\") xhr.send(args.serialize(body))\n\t\t\telse if (body instanceof $window.FormData) xhr.send(body)\n\t\t\telse xhr.send(JSON.stringify(body))\n\t\t}),\n\t\tjsonp: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar callbackName = args.callbackName || \"_mithril_\" + Math.round(Math.random() * 1e16) + \"_\" + callbackCount++\n\t\t\tvar script = $window.document.createElement(\"script\")\n\t\t\t$window[callbackName] = function(data) {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\tresolve(data)\n\t\t\t}\n\t\t\tscript.onerror = function() {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\treject(new Error(\"JSONP request failed\"))\n\t\t\t}\n\t\t\tscript.src = url + (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") +\n\t\t\t\tencodeURIComponent(args.callbackKey || \"callback\") + \"=\" +\n\t\t\t\tencodeURIComponent(callbackName)\n\t\t\t$window.document.documentElement.appendChild(script)\n\t\t}),\n\t}\n}\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(window, mountRedraw)\n","\"use strict\"\n\nmodule.exports = require(\"./stream/stream\")\n","/* eslint-disable */\n;(function() {\n\"use strict\"\n/* eslint-enable */\nStream.SKIP = {}\nStream.lift = lift\nStream.scan = scan\nStream.merge = merge\nStream.combine = combine\nStream.scanMerge = scanMerge\nStream[\"fantasy-land/of\"] = Stream\n\nvar warnedHalt = false\nObject.defineProperty(Stream, \"HALT\", {\n\tget: function() {\n\t\twarnedHalt || console.log(\"HALT is deprecated and has been renamed to SKIP\");\n\t\twarnedHalt = true\n\t\treturn Stream.SKIP\n\t}\n})\n\nfunction Stream(value) {\n\tvar dependentStreams = []\n\tvar dependentFns = []\n\n\tfunction stream(v) {\n\t\tif (arguments.length && v !== Stream.SKIP) {\n\t\t\tvalue = v\n\t\t\tif (open(stream)) {\n\t\t\t\tstream._changing()\n\t\t\t\tstream._state = \"active\"\n\t\t\t\tdependentStreams.forEach(function(s, i) { s(dependentFns[i](value)) })\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\tstream.constructor = Stream\n\tstream._state = arguments.length && value !== Stream.SKIP ? \"active\" : \"pending\"\n\tstream._parents = []\n\n\tstream._changing = function() {\n\t\tif (open(stream)) stream._state = \"changing\"\n\t\tdependentStreams.forEach(function(s) {\n\t\t\ts._changing()\n\t\t})\n\t}\n\n\tstream._map = function(fn, ignoreInitial) {\n\t\tvar target = ignoreInitial ? Stream() : Stream(fn(value))\n\t\ttarget._parents.push(stream)\n\t\tdependentStreams.push(target)\n\t\tdependentFns.push(fn)\n\t\treturn target\n\t}\n\n\tstream.map = function(fn) {\n\t\treturn stream._map(fn, stream._state !== \"active\")\n\t}\n\n\tvar end\n\tfunction createEnd() {\n\t\tend = Stream()\n\t\tend.map(function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tstream._parents.forEach(function (p) {p._unregisterChild(stream)})\n\t\t\t\tstream._state = \"ended\"\n\t\t\t\tstream._parents.length = dependentStreams.length = dependentFns.length = 0\n\t\t\t}\n\t\t\treturn value\n\t\t})\n\t\treturn end\n\t}\n\n\tstream.toJSON = function() { return value != null && typeof value.toJSON === \"function\" ? value.toJSON() : value }\n\n\tstream[\"fantasy-land/map\"] = stream.map\n\tstream[\"fantasy-land/ap\"] = function(x) { return combine(function(s1, s2) { return s1()(s2()) }, [x, stream]) }\n\n\tstream._unregisterChild = function(child) {\n\t\tvar childIndex = dependentStreams.indexOf(child)\n\t\tif (childIndex !== -1) {\n\t\t\tdependentStreams.splice(childIndex, 1)\n\t\t\tdependentFns.splice(childIndex, 1)\n\t\t}\n\t}\n\n\tObject.defineProperty(stream, \"end\", {\n\t\tget: function() { return end || createEnd() }\n\t})\n\n\treturn stream\n}\n\nfunction combine(fn, streams) {\n\tvar ready = streams.every(function(s) {\n\t\tif (s.constructor !== Stream)\n\t\t\tthrow new Error(\"Ensure that each item passed to stream.combine/stream.merge/lift is a stream\")\n\t\treturn s._state === \"active\"\n\t})\n\tvar stream = ready\n\t\t? Stream(fn.apply(null, streams.concat([streams])))\n\t\t: Stream()\n\n\tvar changed = []\n\n\tvar mappers = streams.map(function(s) {\n\t\treturn s._map(function(value) {\n\t\t\tchanged.push(s)\n\t\t\tif (ready || streams.every(function(s) { return s._state !== \"pending\" })) {\n\t\t\t\tready = true\n\t\t\t\tstream(fn.apply(null, streams.concat([changed])))\n\t\t\t\tchanged = []\n\t\t\t}\n\t\t\treturn value\n\t\t}, true)\n\t})\n\n\tvar endStream = stream.end.map(function(value) {\n\t\tif (value === true) {\n\t\t\tmappers.forEach(function(mapper) { mapper.end(true) })\n\t\t\tendStream.end(true)\n\t\t}\n\t\treturn undefined\n\t})\n\n\treturn stream\n}\n\nfunction merge(streams) {\n\treturn combine(function() { return streams.map(function(s) { return s() }) }, streams)\n}\n\nfunction scan(fn, acc, origin) {\n\tvar stream = origin.map(function(v) {\n\t\tvar next = fn(acc, v)\n\t\tif (next !== Stream.SKIP) acc = next\n\t\treturn next\n\t})\n\tstream(acc)\n\treturn stream\n}\n\nfunction scanMerge(tuples, seed) {\n\tvar streams = tuples.map(function(tuple) { return tuple[0] })\n\n\tvar stream = combine(function() {\n\t\tvar changed = arguments[arguments.length - 1]\n\t\tstreams.forEach(function(stream, i) {\n\t\t\tif (changed.indexOf(stream) > -1)\n\t\t\t\tseed = tuples[i][1](seed, stream())\n\t\t})\n\n\t\treturn seed\n\t}, streams)\n\n\tstream(seed)\n\n\treturn stream\n}\n\nfunction lift() {\n\tvar fn = arguments[0]\n\tvar streams = Array.prototype.slice.call(arguments, 1)\n\treturn merge(streams).map(function(streams) {\n\t\treturn fn.apply(undefined, streams)\n\t})\n}\n\nfunction open(s) {\n\treturn s._state === \"pending\" || s._state === \"active\" || s._state === \"changing\"\n}\n\nif (typeof module !== \"undefined\") module[\"exports\"] = Stream\nelse if (typeof window.m === \"function\" && !(\"stream\" in window.m)) window.m.stream = Stream\nelse window.m = {stream : Stream}\n\n}());\n","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\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*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : 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 */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\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 */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const 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 */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\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 */\nexport default function 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 case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\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 */\nexport default function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\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 */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\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 */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\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 */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\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 */\nexport default function 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 }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\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 */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\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 */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const 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\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`])\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\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 */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\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 */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // 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 try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.width;\n const height =\n sizes.height || element.clientHeight || result.height;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // 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 if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let 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;\n\n // 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 if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop);\n const marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\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 */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\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\nexport default function 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 let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\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 */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\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 const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\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 }\n\n // Add paddings\n padding = padding || 0;\n const 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\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\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 */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const 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\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\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 */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const 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 */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const 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 */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\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 */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n 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 */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\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 */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\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 */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\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\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // 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 data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\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 */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => 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 */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\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();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\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 */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\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 */\nexport default function 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 */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\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 */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\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 */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\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 */\nexport default function 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);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\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 */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // 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 const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { 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 */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\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 */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // 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 const prefixedProperty = getSupportedPropertyName('transform');\n\n // 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 let left, top;\n if (sideA === 'bottom') {\n // when offsetParent is <html> 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 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 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 const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\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 */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${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","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\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 */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\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(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\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 */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.<br />\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.<br />\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 */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\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 */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\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 */\nexport default function 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 const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((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\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const 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 : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\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 */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\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 */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const 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 let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n 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/**\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 */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // 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 const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // 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 const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\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 const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((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 }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\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 */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\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","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\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 */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // 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 if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\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 const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\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 */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\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 */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\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","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\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 */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\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.<br />\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 */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\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.<br />\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.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\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.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\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 * @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 * @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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\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 * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\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 * @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 * @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 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\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 * @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 * @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 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\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/**\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","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\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 */\nexport default {\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.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n 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.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n 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,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","import Popper from 'popper.js';\nimport isFunction from '../../popper/src/utils/isFunction';\n\nconst DEFAULT_OPTIONS = {\n container: false,\n delay: 0,\n html: false,\n placement: 'top',\n title: '',\n template:\n '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n offset: 0,\n arrowSelector: '.tooltip-arrow, .tooltip__arrow',\n innerSelector: '.tooltip-inner, .tooltip__inner',\n};\n\nexport default class Tooltip {\n /**\n * Create a new Tooltip.js instance\n * @class Tooltip\n * @param {HTMLElement} reference - The DOM node used as reference of the tooltip (it can be a jQuery element).\n * @param {Object} options\n * @param {String} options.placement='top'\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end),\n * left(-start, -end)`\n * @param {String} [options.arrowSelector='.tooltip-arrow, .tooltip__arrow'] - className used to locate the DOM arrow element in the tooltip.\n * @param {String} [options.innerSelector='.tooltip-inner, .tooltip__inner'] - className used to locate the DOM inner element in the tooltip.\n * @param {HTMLElement|String|false} options.container=false - Append the tooltip to a specific element.\n * @param {Number|Object} options.delay=0\n * Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type.\n * If a number is supplied, delay is applied to both hide/show.\n * Object structure is: `{ show: 500, hide: 100 }`\n * @param {Boolean} options.html=false - Insert HTML into the tooltip. If false, the content will inserted with `textContent`.\n * @param {String} [options.template='<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>']\n * Base HTML to used when creating the tooltip.\n * The tooltip's `title` will be injected into the `.tooltip-inner` or `.tooltip__inner`.\n * `.tooltip-arrow` or `.tooltip__arrow` will become the tooltip's arrow.\n * The outermost wrapper element should have the `.tooltip` class.\n * @param {String|HTMLElement|TitleFunction} options.title='' - Default title value if `title` attribute isn't present.\n * @param {String} [options.trigger='hover focus']\n * How tooltip is triggered - click, hover, focus, manual.\n * You may pass multiple triggers; separate them with a space. `manual` cannot be combined with any other trigger.\n * @param {Boolean} options.closeOnClickOutside=false - Close a popper on click outside of the popper and reference element. This has effect only when options.trigger is 'click'.\n * @param {String|HTMLElement} options.boundariesElement\n * The element used as boundaries for the tooltip. For more information refer to Popper.js'\n * [boundariesElement docs](https://popper.js.org/popper-documentation.html)\n * @param {Number|String} options.offset=0 - Offset of the tooltip relative to its reference. For more information refer to Popper.js'\n * [offset docs](https://popper.js.org/popper-documentation.html)\n * @param {Object} options.popperOptions={} - Popper options, will be passed directly to popper instance. For more information refer to Popper.js'\n * [options docs](https://popper.js.org/popper-documentation.html)\n * @return {Object} instance - The generated tooltip instance\n */\n constructor(reference, options) {\n // apply user options over default ones\n options = { ...DEFAULT_OPTIONS, ...options };\n\n reference.jquery && (reference = reference[0]);\n\n // cache reference and options\n this.reference = reference;\n this.options = options;\n\n // get events list\n const events =\n typeof options.trigger === 'string'\n ? options.trigger\n .split(' ')\n .filter(\n trigger => ['click', 'hover', 'focus'].indexOf(trigger) !== -1\n )\n : [];\n\n // set initial state\n this._isOpen = false;\n this._popperOptions = {};\n\n // set event listeners\n this._setEventListeners(reference, events, options);\n }\n\n //\n // Public methods\n //\n\n /**\n * Reveals an element's tooltip. This is considered a \"manual\" triggering of the tooltip.\n * Tooltips with zero-length titles are never displayed.\n * @method Tooltip#show\n * @memberof Tooltip\n */\n show = () => this._show(this.reference, this.options);\n\n /**\n * Hides an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @method Tooltip#hide\n * @memberof Tooltip\n */\n hide = () => this._hide();\n\n /**\n * Hides and destroys an element’s tooltip.\n * @method Tooltip#dispose\n * @memberof Tooltip\n */\n dispose = () => this._dispose();\n\n /**\n * Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip.\n * @method Tooltip#toggle\n * @memberof Tooltip\n */\n toggle = () => {\n if (this._isOpen) {\n return this.hide();\n } else {\n return this.show();\n }\n };\n\n /**\n * Updates the tooltip's title content\n * @method Tooltip#updateTitleContent\n * @memberof Tooltip\n * @param {String|HTMLElement} title - The new content to use for the title\n */\n updateTitleContent = (title) => this._updateTitleContent(title);\n\n //\n // Private methods\n //\n\n _events = [];\n\n /**\n * Creates a new tooltip node\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} reference\n * @param {String} template\n * @param {String|HTMLElement|TitleFunction} title\n * @param {Boolean} allowHtml\n * @return {HTMLElement} tooltipNode\n */\n _create(reference, template, title, allowHtml) {\n // create tooltip element\n const tooltipGenerator = window.document.createElement('div');\n tooltipGenerator.innerHTML = template.trim();\n const tooltipNode = tooltipGenerator.childNodes[0];\n\n // add unique ID to our tooltip (needed for accessibility reasons)\n tooltipNode.id = `tooltip_${Math.random()\n .toString(36)\n .substr(2, 10)}`;\n\n // set initial `aria-hidden` state to `false` (it's visible!)\n tooltipNode.setAttribute('aria-hidden', 'false');\n\n // add title to tooltip\n const titleNode = tooltipGenerator.querySelector(this.options.innerSelector);\n this._addTitleContent(reference, title, allowHtml, titleNode);\n\n // return the generated tooltip node\n return tooltipNode;\n }\n\n _addTitleContent(reference, title, allowHtml, titleNode) {\n if (title.nodeType === 1 || title.nodeType === 11) {\n // if title is a element node or document fragment, append it only if allowHtml is true\n allowHtml && titleNode.appendChild(title);\n } else if (isFunction(title)) {\n // Recursively call ourself so that the return value of the function gets handled appropriately - either\n // as a dom node, a string, or even as another function.\n this._addTitleContent(reference, title.call(reference), allowHtml, titleNode);\n } else {\n // if it's just a simple text, set textContent or innerHtml depending by `allowHtml` value\n allowHtml ? (titleNode.innerHTML = title) : (titleNode.textContent = title);\n }\n }\n\n _show(reference, options) {\n // don't show if it's already visible\n // or if it's not being showed\n if (this._isOpen && !this._isOpening) {\n return this;\n }\n this._isOpen = true;\n\n // if the tooltipNode already exists, just show it\n if (this._tooltipNode) {\n this._tooltipNode.style.visibility = 'visible';\n this._tooltipNode.setAttribute('aria-hidden', 'false');\n this.popperInstance.update();\n return this;\n }\n\n // get title\n const title = reference.getAttribute('title') || options.title;\n\n // don't show tooltip if no title is defined\n if (!title) {\n return this;\n }\n\n // create tooltip node\n const tooltipNode = this._create(\n reference,\n options.template,\n title,\n options.html\n );\n\n // Add `aria-describedby` to our reference element for accessibility reasons\n reference.setAttribute('aria-describedby', tooltipNode.id);\n\n // append tooltip to container\n const container = this._findContainer(options.container, reference);\n\n this._append(tooltipNode, container);\n\n this._popperOptions = {\n ...options.popperOptions,\n placement: options.placement,\n };\n\n this._popperOptions.modifiers = {\n ...this._popperOptions.modifiers,\n arrow: {\n ...(this._popperOptions.modifiers && this._popperOptions.modifiers.arrow),\n element: options.arrowSelector,\n },\n offset: {\n ...(this._popperOptions.modifiers && this._popperOptions.modifiers.offset),\n offset: options.offset ||\n this._popperOptions.modifiers && this._popperOptions.modifiers.offset && this._popperOptions.modifiers.offset.offset ||\n options.offset,\n },\n };\n\n if (options.boundariesElement) {\n this._popperOptions.modifiers.preventOverflow = {\n boundariesElement: options.boundariesElement,\n };\n }\n\n this.popperInstance = new Popper(\n reference,\n tooltipNode,\n this._popperOptions\n );\n\n this._tooltipNode = tooltipNode;\n\n return this;\n }\n\n _hide(/*reference, options*/) {\n // don't hide if it's already hidden\n if (!this._isOpen) {\n return this;\n }\n\n this._isOpen = false;\n\n // hide tooltipNode\n this._tooltipNode.style.visibility = 'hidden';\n this._tooltipNode.setAttribute('aria-hidden', 'true');\n\n return this;\n }\n\n _dispose() {\n // remove event listeners first to prevent any unexpected behaviour\n this._events.forEach(({ func, event }) => {\n this.reference.removeEventListener(event, func);\n });\n this._events = [];\n\n if (this._tooltipNode) {\n this._hide();\n\n // destroy instance\n this.popperInstance.destroy();\n\n // destroy tooltipNode if removeOnDestroy is not set, as popperInstance.destroy() already removes the element\n if (!this.popperInstance.options.removeOnDestroy) {\n this._tooltipNode.parentNode.removeChild(this._tooltipNode);\n this._tooltipNode = null;\n }\n }\n return this;\n }\n\n _findContainer(container, reference) {\n // if container is a query, get the relative element\n if (typeof container === 'string') {\n container = window.document.querySelector(container);\n } else if (container === false) {\n // if container is `false`, set it to reference parent\n container = reference.parentNode;\n }\n return container;\n }\n\n /**\n * Append tooltip to container\n * @memberof Tooltip\n * @private\n * @param {HTMLElement} tooltipNode\n * @param {HTMLElement|String|false} container\n */\n _append(tooltipNode, container) {\n container.appendChild(tooltipNode);\n }\n\n _setEventListeners(reference, events, options) {\n const directEvents = [];\n const oppositeEvents = [];\n\n events.forEach(event => {\n switch (event) {\n case 'hover':\n directEvents.push('mouseenter');\n oppositeEvents.push('mouseleave');\n break;\n case 'focus':\n directEvents.push('focus');\n oppositeEvents.push('blur');\n break;\n case 'click':\n directEvents.push('click');\n oppositeEvents.push('click');\n break;\n }\n });\n\n // schedule show tooltip\n directEvents.forEach(event => {\n const func = evt => {\n if (this._isOpening === true) {\n return;\n }\n evt.usedByTooltip = true;\n this._scheduleShow(reference, options.delay, options, evt);\n };\n this._events.push({ event, func });\n reference.addEventListener(event, func);\n });\n\n // schedule hide tooltip\n oppositeEvents.forEach(event => {\n const func = evt => {\n if (evt.usedByTooltip === true) {\n return;\n }\n this._scheduleHide(reference, options.delay, options, evt);\n };\n this._events.push({ event, func });\n reference.addEventListener(event, func);\n if (event === 'click' && options.closeOnClickOutside) {\n document.addEventListener('mousedown', e => {\n if (!this._isOpening) {\n return;\n }\n const popper = this.popperInstance.popper;\n if (reference.contains(e.target) ||\n popper.contains(e.target)) {\n return;\n }\n func(e);\n }, true);\n }\n });\n }\n\n _scheduleShow(reference, delay, options /*, evt */) {\n this._isOpening = true;\n // defaults to 0\n const computedDelay = (delay && delay.show) || delay || 0;\n this._showTimeout = window.setTimeout(\n () => this._show(reference, options),\n computedDelay\n );\n }\n\n _scheduleHide(reference, delay, options, evt) {\n this._isOpening = false;\n // defaults to 0\n const computedDelay = (delay && delay.hide) || delay || 0;\n window.clearTimeout(this._showTimeout);\n window.setTimeout(() => {\n if (this._isOpen === false) {\n return;\n }\n if (!document.body.contains(this._tooltipNode)) {\n return;\n }\n\n // if we are hiding because of a mouseleave, we must check that the new\n // reference isn't the tooltip, because in this case we don't want to hide it\n if (evt.type === 'mouseleave') {\n const isSet = this._setTooltipNodeEvent(evt, reference, delay, options);\n\n // if we set the new event, don't hide the tooltip yet\n // the new event will take care to hide it if necessary\n if (isSet) {\n return;\n }\n }\n\n this._hide(reference, options);\n }, computedDelay);\n }\n\n _setTooltipNodeEvent = (evt, reference, delay, options) => {\n const relatedreference =\n evt.relatedreference || evt.toElement || evt.relatedTarget;\n\n const callback = evt2 => {\n const relatedreference2 =\n evt2.relatedreference || evt2.toElement || evt2.relatedTarget;\n\n // Remove event listener after call\n this._tooltipNode.removeEventListener(evt.type, callback);\n\n // If the new reference is not the reference element\n if (!reference.contains(relatedreference2)) {\n // Schedule to hide tooltip\n this._scheduleHide(reference, options.delay, options, evt2);\n }\n };\n\n if (this._tooltipNode.contains(relatedreference)) {\n // listen to mouseleave on the tooltip element to be able to hide the tooltip\n this._tooltipNode.addEventListener(evt.type, callback);\n return true;\n }\n\n return false;\n };\n\n _updateTitleContent(title) {\n if(typeof this._tooltipNode === 'undefined') {\n if(typeof this.options.title !== 'undefined') {\n this.options.title = title;\n }\n return;\n }\n const titleNode = this._tooltipNode.querySelector(this.options.innerSelector);\n this._clearTitleContent(titleNode, this.options.html, this.reference.getAttribute('title') || this.options.title)\n this._addTitleContent(this.reference, title, this.options.html, titleNode);\n this.options.title = title;\n this.popperInstance.update();\n }\n\n _clearTitleContent(titleNode, allowHtml, lastTitle) {\n if(lastTitle.nodeType === 1 || lastTitle.nodeType === 11) {\n allowHtml && titleNode.removeChild(lastTitle);\n } else {\n allowHtml ? titleNode.innerHTML = '' : titleNode.textContent = '';\n }\n }\n\n}\n\n/**\n * Title function, its context is the Tooltip instance.\n * @memberof Tooltip\n * @callback TitleFunction\n * @return {String} placement - The desired title.\n */\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","!function(t,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=r():\"function\"==typeof define&&define.amd?define(r):t.ColorThief=r()}(this,function(){if(!t)var t={map:function(t,r){var n={};return r?t.map(function(t,o){return n.index=o,r.call(n,t)}):t.slice()},naturalOrder:function(t,r){return t<r?-1:t>r?1:0},sum:function(t,r){var n={};return t.reduce(r?function(t,o,e){return n.index=e,t+r.call(n,o)}:function(t,r){return t+r},0)},max:function(r,n){return Math.max.apply(null,n?t.map(r,n):r)}};var r=function(){var r=5,n=8-r,o=1e3;function e(t,n,o){return(t<<2*r)+(n<<r)+o}function i(t){var r=[],n=!1;function o(){r.sort(t),n=!0}return{push:function(t){r.push(t),n=!1},peek:function(t){return n||o(),void 0===t&&(t=r.length-1),r[t]},pop:function(){return n||o(),r.pop()},size:function(){return r.length},map:function(t){return r.map(t)},debug:function(){return n||o(),r}}}function u(t,r,n,o,e,i,u){this.r1=t,this.r2=r,this.g1=n,this.g2=o,this.b1=e,this.b2=i,this.histo=u}function a(){this.vboxes=new i(function(r,n){return t.naturalOrder(r.vbox.count()*r.vbox.volume(),n.vbox.count()*n.vbox.volume())})}function s(r,n){if(n.count()){var o=n.r2-n.r1+1,i=n.g2-n.g1+1,u=t.max([o,i,n.b2-n.b1+1]);if(1==n.count())return[n.copy()];var a,s,h,c,f=0,v=[],l=[];if(u==o)for(a=n.r1;a<=n.r2;a++){for(c=0,s=n.g1;s<=n.g2;s++)for(h=n.b1;h<=n.b2;h++)c+=r[e(a,s,h)]||0;v[a]=f+=c}else if(u==i)for(a=n.g1;a<=n.g2;a++){for(c=0,s=n.r1;s<=n.r2;s++)for(h=n.b1;h<=n.b2;h++)c+=r[e(s,a,h)]||0;v[a]=f+=c}else for(a=n.b1;a<=n.b2;a++){for(c=0,s=n.r1;s<=n.r2;s++)for(h=n.g1;h<=n.g2;h++)c+=r[e(s,h,a)]||0;v[a]=f+=c}return v.forEach(function(t,r){l[r]=f-t}),function(t){var r,o,e,i,u,s=t+\"1\",h=t+\"2\",c=0;for(a=n[s];a<=n[h];a++)if(v[a]>f/2){for(e=n.copy(),i=n.copy(),u=(r=a-n[s])<=(o=n[h]-a)?Math.min(n[h]-1,~~(a+o/2)):Math.max(n[s],~~(a-1-r/2));!v[u];)u++;for(c=l[u];!c&&v[u-1];)c=l[--u];return e[h]=u,i[s]=e[h]+1,[e,i]}}(u==o?\"r\":u==i?\"g\":\"b\")}}return u.prototype={volume:function(t){return this._volume&&!t||(this._volume=(this.r2-this.r1+1)*(this.g2-this.g1+1)*(this.b2-this.b1+1)),this._volume},count:function(t){var r=this.histo;if(!this._count_set||t){var n,o,i,u=0;for(n=this.r1;n<=this.r2;n++)for(o=this.g1;o<=this.g2;o++)for(i=this.b1;i<=this.b2;i++)u+=r[e(n,o,i)]||0;this._count=u,this._count_set=!0}return this._count},copy:function(){return new u(this.r1,this.r2,this.g1,this.g2,this.b1,this.b2,this.histo)},avg:function(t){var n=this.histo;if(!this._avg||t){var o,i,u,a,s=0,h=1<<8-r,c=0,f=0,v=0;for(i=this.r1;i<=this.r2;i++)for(u=this.g1;u<=this.g2;u++)for(a=this.b1;a<=this.b2;a++)s+=o=n[e(i,u,a)]||0,c+=o*(i+.5)*h,f+=o*(u+.5)*h,v+=o*(a+.5)*h;this._avg=s?[~~(c/s),~~(f/s),~~(v/s)]:[~~(h*(this.r1+this.r2+1)/2),~~(h*(this.g1+this.g2+1)/2),~~(h*(this.b1+this.b2+1)/2)]}return this._avg},contains:function(t){var r=t[0]>>n;return gval=t[1]>>n,bval=t[2]>>n,r>=this.r1&&r<=this.r2&&gval>=this.g1&&gval<=this.g2&&bval>=this.b1&&bval<=this.b2}},a.prototype={push:function(t){this.vboxes.push({vbox:t,color:t.avg()})},palette:function(){return this.vboxes.map(function(t){return t.color})},size:function(){return this.vboxes.size()},map:function(t){for(var r=this.vboxes,n=0;n<r.size();n++)if(r.peek(n).vbox.contains(t))return r.peek(n).color;return this.nearest(t)},nearest:function(t){for(var r,n,o,e=this.vboxes,i=0;i<e.size();i++)((n=Math.sqrt(Math.pow(t[0]-e.peek(i).color[0],2)+Math.pow(t[1]-e.peek(i).color[1],2)+Math.pow(t[2]-e.peek(i).color[2],2)))<r||void 0===r)&&(r=n,o=e.peek(i).color);return o},forcebw:function(){var r=this.vboxes;r.sort(function(r,n){return t.naturalOrder(t.sum(r.color),t.sum(n.color))});var n=r[0].color;n[0]<5&&n[1]<5&&n[2]<5&&(r[0].color=[0,0,0]);var o=r.length-1,e=r[o].color;e[0]>251&&e[1]>251&&e[2]>251&&(r[o].color=[255,255,255])}},{quantize:function(h,c){if(!h.length||c<2||c>256)return!1;var f=function(t){var o,i=new Array(1<<3*r);return t.forEach(function(t){o=e(t[0]>>n,t[1]>>n,t[2]>>n),i[o]=(i[o]||0)+1}),i}(h);f.forEach(function(){});var v=function(t,r){var o,e,i,a=1e6,s=0,h=1e6,c=0,f=1e6,v=0;return t.forEach(function(t){(o=t[0]>>n)<a?a=o:o>s&&(s=o),(e=t[1]>>n)<h?h=e:e>c&&(c=e),(i=t[2]>>n)<f?f=i:i>v&&(v=i)}),new u(a,s,h,c,f,v,r)}(h,f),l=new i(function(r,n){return t.naturalOrder(r.count(),n.count())});function g(t,r){for(var n,e=t.size(),i=0;i<o;){if(e>=r)return;if(i++>o)return;if((n=t.pop()).count()){var u=s(f,n),a=u[0],h=u[1];if(!a)return;t.push(a),h&&(t.push(h),e++)}else t.push(n),i++}}l.push(v),g(l,.75*c);for(var p=new i(function(r,n){return t.naturalOrder(r.count()*r.volume(),n.count()*n.volume())});l.size();)p.push(l.pop());g(p,c);for(var d=new a;p.size();)d.push(p.pop());return d}}}().quantize,n=function(t){this.canvas=document.createElement(\"canvas\"),this.context=this.canvas.getContext(\"2d\"),this.width=this.canvas.width=t.width,this.height=this.canvas.height=t.height,this.context.drawImage(t,0,0,this.width,this.height)};n.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)};var o=function(){};return o.prototype.getColor=function(t,r){return void 0===r&&(r=10),this.getPalette(t,5,r)[0]},o.prototype.getPalette=function(t,o,e){var i=function(t){var r=t.colorCount,n=t.quality;if(void 0!==r&&Number.isInteger(r)){if(1===r)throw new Error(\"colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()\");r=Math.max(r,2),r=Math.min(r,20)}else r=10;return void 0===n||Number.isInteger(n)?n=10:n<1&&(n=10),{colorCount:r,quality:n}}({colorCount:o,quality:e}),u=new n(t),a=function(t,r,n){for(var o=t,e=[],i=0,u=void 0,a=void 0,s=void 0,h=void 0,c=void 0;i<r;i+=n)a=o[0+(u=4*i)],s=o[u+1],h=o[u+2],(void 0===(c=o[u+3])||c>=125)&&(a>250&&s>250&&h>250||e.push([a,s,h]));return e}(u.getImageData().data,u.width*u.height,i.quality),s=r(a,i.colorCount);return s?s.palette():null},o.prototype.getColorFromUrl=function(t,r,n){var o=document.createElement(\"img\"),e=this;o.addEventListener(\"load\",function(){var i=e.getPalette(o,5,n);r(i[0],t)}),o.src=t},o.prototype.getImageData=function(t,r){var n=new XMLHttpRequest;n.open(\"GET\",t,!0),n.responseType=\"arraybuffer\",n.onload=function(){if(200==this.status){var t=new Uint8Array(this.response);o=t.length;for(var n=new Array(o),o=0;o<t.length;o++)n[o]=String.fromCharCode(t[o]);var e=n.join(\"\"),i=window.btoa(e);r(\"data:image/png;base64,\"+i)}},n.send()},o.prototype.getColorAsync=function(t,r,n){var o=this;this.getImageData(t,function(t){var e=document.createElement(\"img\");e.addEventListener(\"load\",function(){var t=o.getPalette(e,5,n);r(t[0],this)}),e.src=t})},o});\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.dayjs=n()}(this,function(){\"use strict\";var t=\"millisecond\",n=\"second\",e=\"minute\",r=\"hour\",i=\"day\",s=\"week\",u=\"month\",o=\"quarter\",a=\"year\",h=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:\"\"+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:\"date\",h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},$={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},l=\"en\",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return!e&&r&&(l=r),r||!e&&l},g=function(t,n,e){if(y(t))return t.clone();var r=n?\"string\"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u,$offset:n.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if(\"string\"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t)<this.startOf(n)},d.isBefore=function(t,n){return this.endOf(n)<g(t)},d.$g=function(t,n,e){return D.u(t)?this[n]:this.set(e,t)},d.year=function(t){return this.$g(t,\"$y\",a)},d.month=function(t){return this.$g(t,\"$M\",u)},d.day=function(t){return this.$g(t,\"$W\",i)},d.date=function(t){return this.$g(t,\"$D\",\"date\")},d.hour=function(t){return this.$g(t,\"$H\",r)},d.minute=function(t){return this.$g(t,\"$m\",e)},d.second=function(t){return this.$g(t,\"$s\",n)},d.millisecond=function(n){return this.$g(n,\"$ms\",t)},d.unix=function(){return Math.floor(this.valueOf()/1e3)},d.valueOf=function(){return this.$d.getTime()},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function(t,n){var e=D.w(h.$u?Date.UTC(h.$y,n,t):new Date(h.$y,n,t),h);return f?e:e.endOf(i)},$=function(t,n){return D.w(h.toDate()[t].apply(h.toDate(),(f?[0,0,0,0]:[23,59,59,999]).slice(n)),h)},l=this.$W,m=this.$M,y=this.$D,M=\"set\"+(this.$u?\"UTC\":\"\");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case\"date\":return $(M+\"Hours\",0);case r:return $(M+\"Minutes\",1);case e:return $(M+\"Seconds\",2);case n:return $(M+\"Milliseconds\",3);default:return this.clone()}},d.endOf=function(t){return this.startOf(t,!1)},d.$set=function(s,o){var h,f=D.p(s),c=\"set\"+(this.$u?\"UTC\":\"\"),d=(h={},h[i]=c+\"Date\",h.date=c+\"Date\",h[u]=c+\"Month\",h[a]=c+\"FullYear\",h[r]=c+\"Hours\",h[e]=c+\"Minutes\",h[n]=c+\"Seconds\",h[t]=c+\"Milliseconds\",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set(\"date\",1);l.$d[d]($),l.init(),this.$d=l.set(\"date\",Math.min(this.$D,l.daysInMonth())).toDate()}else d&&this.$d[d]($);return this.init(),this},d.set=function(t,n){return this.clone().$set(t,n)},d.get=function(t){return this[D.p(t)]()},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function(n){var e=g(f);return D.w(e.date(e.date()+Math.round(n*t)),f)};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[e]=6e4,h[r]=36e5,h[n]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,n){return this.add(-1*t,n)},d.format=function(t){var n=this;if(!this.isValid())return\"Invalid Date\";var e=t||\"YYYY-MM-DDTHH:mm:ssZ\",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function(t,r,i,s){return t&&(t[r]||t(n,e))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,\"0\")},$=i.meridiem||function(t,n,e){var r=t<12?\"AM\":\"PM\";return e?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,\"0\"),MMM:c(i.monthsShort,o,h,3),MMMM:h[o]||h(this,e),D:this.$D,DD:D.s(this.$D,2,\"0\"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,\"0\"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,\"0\"),s:String(this.$s),ss:D.s(this.$s,2,\"0\"),SSS:D.s(this.$ms,3,\"0\"),Z:r};return e.replace(f,function(t,n){return n||l[t]||r.replace(\":\",\"\")})},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[e]=m/6e4,c[n]=m/1e3,c)[d]||m,f?y:D.a(y)},d.daysInMonth=function(){return this.endOf(u).$D},d.$locale=function(){return m[this.$L]},d.locale=function(t,n){if(!t)return this.$L;var e=this.clone(),r=M(t,n,!0);return r&&(e.$L=r),e},d.clone=function(){return D.w(this.$d,this)},d.toDate=function(){return new Date(this.valueOf())},d.toJSON=function(){return this.isValid()?this.toISOString():null},d.toISOString=function(){return this.$d.toISOString()},d.toString=function(){return this.$d.toUTCString()},c}();return g.prototype=v.prototype,g.extend=function(t,n){return t(n,v,g),g},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t)},g.en=m[l],g.Ls=m,g});\n","( function _package( factory ){\n\tif( typeof define === 'function' && define.amd ){\n\t\tdefine( [ 'mithril' ], factory )\n\t}\n\telse if( typeof exports === 'object' ){\n\t\tmodule.exports = factory( require( 'mithril' ) )\n\t}\n\telse{\n\t\tfactory( m )\n\t}\n}( function define( m ){\n\tfunction bidi( node, prop ){\n\t\tvar type = node.tag === 'select'\n\t\t\t? node.attrs.multi\n\t\t\t\t? 'multi'\n\t\t\t\t: 'select'\n\t\t\t: node.attrs.type\n\n\t\t// Setup: bind listeners\n\t\tif( type === 'multi' ){\n\t\t\tnode.attrs.onchange = function(){\n\t\t\t\tprop( [].slice.call( this.selectedOptions, function( x ){\n\t\t\t\t\treturn x.value\n\t\t\t\t} ) )\n\t\t\t}\n\t\t}\n\t\telse if( type === 'select' ){\n\t\t\tnode.attrs.onchange = function( e ){\n\t\t\t\tprop( this.selectedOptions[ 0 ].value )\n\t\t\t}\n\t\t}\n\t\telse if( type === 'checkbox' ){\n\t\t\tnode.attrs.onchange = function( e ){\n\t\t\t\tprop( this.checked )\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tnode.attrs.onchange = node.attrs.oninput = function( e ){\n\t\t\t\tprop( this.value )\n\t\t\t}\n\t\t}\n\n\t\tif( node.tag === 'select' ){\n\t\t\tnode.children.forEach( function( option ){\n\t\t\t\tif( option.attrs.value === prop() || option.children[ 0 ] === prop() ){\n\t\t\t\t\toption.attrs.selected = true\n\t\t\t\t}\n\t\t\t} )\n\t\t}\n\t\telse if( type === 'checkbox' ){\n\t\t\tnode.attrs.checked = prop()\n\t\t}\n\t\telse if( type === 'radio' ){\n\t\t\tnode.attrs.checked = prop() === node.attrs.value\n\t\t}\n\t\telse {\n\t\t\tnode.attrs.value = prop()\n\t\t}\n\n\t\treturn node\n\t}\n\n\tbidi.view = function( ctrl, node, prop ){\n\t return bidi( node, node.attrs.bidi )\n\t}\n\n\tif( m.attrs ) m.attrs.bidi = bidi\n\t\n\tm.bidi = bidi\n\n\treturn bidi\n} ) )\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nvar m = function m() { return hyperscript.apply(this, arguments) }\nm.m = hyperscript\nm.trust = hyperscript.trust\nm.fragment = hyperscript.fragment\nm.mount = mountRedraw.mount\nm.route = require(\"./route\")\nm.render = require(\"./render\")\nm.redraw = mountRedraw.redraw\nm.request = request.request\nm.jsonp = request.jsonp\nm.parseQueryString = require(\"./querystring/parse\")\nm.buildQueryString = require(\"./querystring/build\")\nm.parsePathname = require(\"./pathname/parse\")\nm.buildPathname = require(\"./pathname/build\")\nm.vnode = require(\"./render/vnode\")\nm.PromisePolyfill = require(\"./promise/polyfill\")\n\nmodule.exports = m\n","/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n // Check if mousetrap is used inside browser, if not, return\n if (!window) {\n return;\n }\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n _MAP[i + 96] = i.toString();\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n // start!\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n var initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * allow custom key mappings\n */\n Mousetrap.addKeycodes = function(object) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n _MAP[key] = object[key];\n }\n }\n _REVERSE_MAP = null;\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null);\n","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar defaults = {\r\n lines: 12,\r\n length: 7,\r\n width: 5,\r\n radius: 10,\r\n scale: 1.0,\r\n corners: 1,\r\n color: '#000',\r\n fadeColor: 'transparent',\r\n animation: 'spinner-line-fade-default',\r\n rotate: 0,\r\n direction: 1,\r\n speed: 1,\r\n zIndex: 2e9,\r\n className: 'spinner',\r\n top: '50%',\r\n left: '50%',\r\n shadow: '0 0 1px transparent',\r\n position: 'absolute',\r\n};\r\nvar Spinner = /** @class */ (function () {\r\n function Spinner(opts) {\r\n if (opts === void 0) { opts = {}; }\r\n this.opts = __assign(__assign({}, defaults), opts);\r\n }\r\n /**\r\n * Adds the spinner to the given target element. If this instance is already\r\n * spinning, it is automatically removed from its previous target by calling\r\n * stop() internally.\r\n */\r\n Spinner.prototype.spin = function (target) {\r\n this.stop();\r\n this.el = document.createElement('div');\r\n this.el.className = this.opts.className;\r\n this.el.setAttribute('role', 'progressbar');\r\n css(this.el, {\r\n position: this.opts.position,\r\n width: 0,\r\n zIndex: this.opts.zIndex,\r\n left: this.opts.left,\r\n top: this.opts.top,\r\n transform: \"scale(\" + this.opts.scale + \")\",\r\n });\r\n if (target) {\r\n target.insertBefore(this.el, target.firstChild || null);\r\n }\r\n drawLines(this.el, this.opts);\r\n return this;\r\n };\r\n /**\r\n * Stops and removes the Spinner.\r\n * Stopped spinners may be reused by calling spin() again.\r\n */\r\n Spinner.prototype.stop = function () {\r\n if (this.el) {\r\n if (typeof requestAnimationFrame !== 'undefined') {\r\n cancelAnimationFrame(this.animateId);\r\n }\r\n else {\r\n clearTimeout(this.animateId);\r\n }\r\n if (this.el.parentNode) {\r\n this.el.parentNode.removeChild(this.el);\r\n }\r\n this.el = undefined;\r\n }\r\n return this;\r\n };\r\n return Spinner;\r\n}());\r\nexport { Spinner };\r\n/**\r\n * Sets multiple style properties at once.\r\n */\r\nfunction css(el, props) {\r\n for (var prop in props) {\r\n el.style[prop] = props[prop];\r\n }\r\n return el;\r\n}\r\n/**\r\n * Returns the line color from the given string or array.\r\n */\r\nfunction getColor(color, idx) {\r\n return typeof color == 'string' ? color : color[idx % color.length];\r\n}\r\n/**\r\n * Internal method that draws the individual lines.\r\n */\r\nfunction drawLines(el, opts) {\r\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\r\n var shadow = 'none';\r\n if (opts.shadow === true) {\r\n shadow = '0 2px 4px #000'; // default shadow\r\n }\r\n else if (typeof opts.shadow === 'string') {\r\n shadow = opts.shadow;\r\n }\r\n var shadows = parseBoxShadow(shadow);\r\n for (var i = 0; i < opts.lines; i++) {\r\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\r\n var backgroundLine = css(document.createElement('div'), {\r\n position: 'absolute',\r\n top: -opts.width / 2 + \"px\",\r\n width: (opts.length + opts.width) + 'px',\r\n height: opts.width + 'px',\r\n background: getColor(opts.fadeColor, i),\r\n borderRadius: borderRadius,\r\n transformOrigin: 'left',\r\n transform: \"rotate(\" + degrees + \"deg) translateX(\" + opts.radius + \"px)\",\r\n });\r\n var delay = i * opts.direction / opts.lines / opts.speed;\r\n delay -= 1 / opts.speed; // so initial animation state will include trail\r\n var line = css(document.createElement('div'), {\r\n width: '100%',\r\n height: '100%',\r\n background: getColor(opts.color, i),\r\n borderRadius: borderRadius,\r\n boxShadow: normalizeShadow(shadows, degrees),\r\n animation: 1 / opts.speed + \"s linear \" + delay + \"s infinite \" + opts.animation,\r\n });\r\n backgroundLine.appendChild(line);\r\n el.appendChild(backgroundLine);\r\n }\r\n}\r\nfunction parseBoxShadow(boxShadow) {\r\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\r\n var shadows = [];\r\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\r\n var shadow = _a[_i];\r\n var matches = shadow.match(regex);\r\n if (matches === null) {\r\n continue; // invalid syntax\r\n }\r\n var x = +matches[2];\r\n var y = +matches[5];\r\n var xUnits = matches[4];\r\n var yUnits = matches[7];\r\n if (x === 0 && !xUnits) {\r\n xUnits = yUnits;\r\n }\r\n if (y === 0 && !yUnits) {\r\n yUnits = xUnits;\r\n }\r\n if (xUnits !== yUnits) {\r\n continue; // units must match to use as coordinates\r\n }\r\n shadows.push({\r\n prefix: matches[1] || '',\r\n x: x,\r\n y: y,\r\n xUnits: xUnits,\r\n yUnits: yUnits,\r\n end: matches[8],\r\n });\r\n }\r\n return shadows;\r\n}\r\n/**\r\n * Modify box-shadow x/y offsets to counteract rotation\r\n */\r\nfunction normalizeShadow(shadows, degrees) {\r\n var normalized = [];\r\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\r\n var shadow = shadows_1[_i];\r\n var xy = convertOffset(shadow.x, shadow.y, degrees);\r\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\r\n }\r\n return normalized.join(', ');\r\n}\r\nfunction convertOffset(x, y, degrees) {\r\n var radians = degrees * Math.PI / 180;\r\n var sin = Math.sin(radians);\r\n var cos = Math.cos(radians);\r\n return [\r\n Math.round((x * cos + y * sin) * 1000) / 1000,\r\n Math.round((-x * sin + y * cos) * 1000) / 1000,\r\n ];\r\n}\r\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\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 */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\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\nmodule.exports = g;\n","// Zepto.js\n// (c) 2010-2016 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\n// The following code is heavily inspired by jQuery's $.fn.data()\n\n;(function($){\n var data = {}, dataAttr = $.fn.data, camelize = $.camelCase,\n exp = $.expando = 'Zepto' + (+new Date()), emptyArray = []\n\n // Get value from node:\n // 1. first try key as given,\n // 2. then try camelized key,\n // 3. fall back to reading \"data-*\" attribute.\n function getData(node, name) {\n var id = node[exp], store = id && data[id]\n if (name === undefined) return store || setData(node)\n else {\n if (store) {\n if (name in store) return store[name]\n var camelName = camelize(name)\n if (camelName in store) return store[camelName]\n }\n return dataAttr.call($(node), name)\n }\n }\n\n // Store value under camelized key on node\n function setData(node, name, value) {\n var id = node[exp] || (node[exp] = ++$.uuid),\n store = data[id] || (data[id] = attributeData(node))\n if (name !== undefined) store[camelize(name)] = value\n return store\n }\n\n // Read all \"data-*\" attributes from a node\n function attributeData(node) {\n var store = {}\n $.each(node.attributes || emptyArray, function(i, attr){\n if (attr.name.indexOf('data-') == 0)\n store[camelize(attr.name.replace('data-', ''))] =\n $.zepto.deserializeValue(attr.value)\n })\n return store\n }\n\n $.fn.data = function(name, value) {\n return value === undefined ?\n // set multiple values via object\n $.isPlainObject(name) ?\n this.each(function(i, node){\n $.each(name, function(key, value){ setData(node, key, value) })\n }) :\n // get value from first element\n (0 in this ? getData(this[0], name) : undefined) :\n // set value on all elements\n this.each(function(){ setData(this, name, value) })\n }\n\n $.data = function(elem, name, value) {\n return $(elem).data(name, value)\n }\n\n $.hasData = function(elem) {\n var id = elem[exp], store = id && data[id]\n return store ? !$.isEmptyObject(store) : false\n }\n\n $.fn.removeData = function(names) {\n if (typeof names == 'string') names = names.split(/\\s+/)\n return this.each(function(){\n var id = this[exp], store = id && data[id]\n if (store) $.each(names || store, function(key){\n delete store[names ? camelize(this) : key]\n })\n })\n }\n\n // Generate extended `remove` and `empty` functions\n ;['remove', 'empty'].forEach(function(methodName){\n var origFn = $.fn[methodName]\n $.fn[methodName] = function() {\n var elements = this.find('*')\n if (methodName === 'remove') elements = elements.add(this)\n elements.removeData()\n return origFn.call(this)\n }\n })\n})(Zepto)\n","// Zepto.js\n// (c) 2010-2016 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\n;(function($, undefined){\n var prefix = '', eventPrefix,\n vendors = { Webkit: 'webkit', Moz: '', O: 'o' },\n testEl = document.createElement('div'),\n supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,\n transform,\n transitionProperty, transitionDuration, transitionTiming, transitionDelay,\n animationName, animationDuration, animationTiming, animationDelay,\n cssReset = {}\n\n function dasherize(str) { return str.replace(/([A-Z])/g, '-$1').toLowerCase() }\n function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }\n\n if (testEl.style.transform === undefined) $.each(vendors, function(vendor, event){\n if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {\n prefix = '-' + vendor.toLowerCase() + '-'\n eventPrefix = event\n return false\n }\n })\n\n transform = prefix + 'transform'\n cssReset[transitionProperty = prefix + 'transition-property'] =\n cssReset[transitionDuration = prefix + 'transition-duration'] =\n cssReset[transitionDelay = prefix + 'transition-delay'] =\n cssReset[transitionTiming = prefix + 'transition-timing-function'] =\n cssReset[animationName = prefix + 'animation-name'] =\n cssReset[animationDuration = prefix + 'animation-duration'] =\n cssReset[animationDelay = prefix + 'animation-delay'] =\n cssReset[animationTiming = prefix + 'animation-timing-function'] = ''\n\n $.fx = {\n off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),\n speeds: { _default: 400, fast: 200, slow: 600 },\n cssPrefix: prefix,\n transitionEnd: normalizeEvent('TransitionEnd'),\n animationEnd: normalizeEvent('AnimationEnd')\n }\n\n $.fn.animate = function(properties, duration, ease, callback, delay){\n if ($.isFunction(duration))\n callback = duration, ease = undefined, duration = undefined\n if ($.isFunction(ease))\n callback = ease, ease = undefined\n if ($.isPlainObject(duration))\n ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration\n if (duration) duration = (typeof duration == 'number' ? duration :\n ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000\n if (delay) delay = parseFloat(delay) / 1000\n return this.anim(properties, duration, ease, callback, delay)\n }\n\n $.fn.anim = function(properties, duration, ease, callback, delay){\n var key, cssValues = {}, cssProperties, transforms = '',\n that = this, wrappedCallback, endEvent = $.fx.transitionEnd,\n fired = false\n\n if (duration === undefined) duration = $.fx.speeds._default / 1000\n if (delay === undefined) delay = 0\n if ($.fx.off) duration = 0\n\n if (typeof properties == 'string') {\n // keyframe animation\n cssValues[animationName] = properties\n cssValues[animationDuration] = duration + 's'\n cssValues[animationDelay] = delay + 's'\n cssValues[animationTiming] = (ease || 'linear')\n endEvent = $.fx.animationEnd\n } else {\n cssProperties = []\n // CSS transitions\n for (key in properties)\n if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '\n else cssValues[key] = properties[key], cssProperties.push(dasherize(key))\n\n if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)\n if (duration > 0 && typeof properties === 'object') {\n cssValues[transitionProperty] = cssProperties.join(', ')\n cssValues[transitionDuration] = duration + 's'\n cssValues[transitionDelay] = delay + 's'\n cssValues[transitionTiming] = (ease || 'linear')\n }\n }\n\n wrappedCallback = function(event){\n if (typeof event !== 'undefined') {\n if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from \"below\"\n $(event.target).unbind(endEvent, wrappedCallback)\n } else\n $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout\n\n fired = true\n $(this).css(cssReset)\n callback && callback.call(this)\n }\n if (duration > 0){\n this.bind(endEvent, wrappedCallback)\n // transitionEnd is not always firing on older Android phones\n // so make sure it gets fired\n setTimeout(function(){\n if (fired) return\n wrappedCallback.call(that)\n }, ((duration + delay) * 1000) + 25)\n }\n\n // trigger page reflow so new elements can animate\n this.size() && this.get(0).clientLeft\n\n this.css(cssValues)\n\n if (duration <= 0) setTimeout(function() {\n that.each(function(){ wrappedCallback.call(this) })\n }, 0)\n\n return this\n }\n\n testEl = null\n})(Zepto)\n","// Zepto.js\n// (c) 2010-2016 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\n;(function($, undefined){\n var document = window.document, docElem = document.documentElement,\n origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle\n\n function anim(el, speed, opacity, scale, callback) {\n if (typeof speed == 'function' && !callback) callback = speed, speed = undefined\n var props = { opacity: opacity }\n if (scale) {\n props.scale = scale\n el.css($.fx.cssPrefix + 'transform-origin', '0 0')\n }\n return el.animate(props, speed, null, callback)\n }\n\n function hide(el, speed, scale, callback) {\n return anim(el, speed, 0, scale, function(){\n origHide.call($(this))\n callback && callback.call(this)\n })\n }\n\n $.fn.show = function(speed, callback) {\n origShow.call(this)\n if (speed === undefined) speed = 0\n else this.css('opacity', 0)\n return anim(this, speed, 1, '1,1', callback)\n }\n\n $.fn.hide = function(speed, callback) {\n if (speed === undefined) return origHide.call(this)\n else return hide(this, speed, '0,0', callback)\n }\n\n $.fn.toggle = function(speed, callback) {\n if (speed === undefined || typeof speed == 'boolean')\n return origToggle.call(this, speed)\n else return this.each(function(){\n var el = $(this)\n el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)\n })\n }\n\n $.fn.fadeTo = function(speed, opacity, callback) {\n return anim(this, speed, opacity, null, callback)\n }\n\n $.fn.fadeIn = function(speed, callback) {\n var target = this.css('opacity')\n if (target > 0) this.css('opacity', 0)\n else target = 1\n return origShow.call(this).fadeTo(speed, target, callback)\n }\n\n $.fn.fadeOut = function(speed, callback) {\n return hide(this, speed, null, callback)\n }\n\n $.fn.fadeToggle = function(speed, callback) {\n return this.each(function(){\n var el = $(this)\n el[\n (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'\n ](speed, callback)\n })\n }\n\n})(Zepto)\n","// Zepto.js\n// (c) 2010-2016 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\n;(function($){\n var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches\n\n function visible(elem){\n elem = $(elem)\n return !!(elem.width() || elem.height()) && elem.css(\"display\") !== \"none\"\n }\n\n // Implements a subset from:\n // http://api.jquery.com/category/selectors/jquery-selector-extensions/\n //\n // Each filter function receives the current index, all nodes in the\n // considered set, and a value if there were parentheses. The value\n // of `this` is the node currently being considered. The function returns the\n // resulting node(s), null, or undefined.\n //\n // Complex selectors are not supported:\n // li:has(label:contains(\"foo\")) + li:has(label:contains(\"bar\"))\n // ul.inner:first > li\n var filters = $.expr[':'] = {\n visible: function(){ if (visible(this)) return this },\n hidden: function(){ if (!visible(this)) return this },\n selected: function(){ if (this.selected) return this },\n checked: function(){ if (this.checked) return this },\n parent: function(){ return this.parentNode },\n first: function(idx){ if (idx === 0) return this },\n last: function(idx, nodes){ if (idx === nodes.length - 1) return this },\n eq: function(idx, _, value){ if (idx === value) return this },\n contains: function(idx, _, text){ if ($(this).text().indexOf(text) > -1) return this },\n has: function(idx, _, sel){ if (zepto.qsa(this, sel).length) return this }\n }\n\n var filterRe = new RegExp('(.*):(\\\\w+)(?:\\\\(([^)]+)\\\\))?$\\\\s*'),\n childRe = /^\\s*>/,\n classTag = 'Zepto' + (+new Date())\n\n function process(sel, fn) {\n // quote the hash in `a[href^=#]` expression\n sel = sel.replace(/=#\\]/g, '=\"#\"]')\n var filter, arg, match = filterRe.exec(sel)\n if (match && match[2] in filters) {\n filter = filters[match[2]], arg = match[3]\n sel = match[1]\n if (arg) {\n var num = Number(arg)\n if (isNaN(num)) arg = arg.replace(/^[\"']|[\"']$/g, '')\n else arg = num\n }\n }\n return fn(sel, filter, arg)\n }\n\n zepto.qsa = function(node, selector) {\n return process(selector, function(sel, filter, arg){\n try {\n var taggedParent\n if (!sel && filter) sel = '*'\n else if (childRe.test(sel))\n // support \"> *\" child queries by tagging the parent node with a\n // unique class and prepending that classname onto the selector\n taggedParent = $(node).addClass(classTag), sel = '.'+classTag+' '+sel\n\n var nodes = oldQsa(node, sel)\n } catch(e) {\n console.error('error performing selector: %o', selector)\n throw e\n } finally {\n if (taggedParent) taggedParent.removeClass(classTag)\n }\n return !filter ? nodes :\n zepto.uniq($.map(nodes, function(n, i){ return filter.call(n, i, nodes, arg) }))\n })\n }\n\n zepto.matches = function(node, selector){\n return process(selector, function(sel, filter, arg){\n return (!sel || oldMatches(node, sel)) &&\n (!filter || filter.call(node, null, arg) === node)\n })\n }\n})(Zepto)\n","import Mithril from 'mithril';\n\nimport Translator from './Translator';\nimport Session from './Session';\nimport Store from './Store';\nimport { extend } from './extend';\n\nimport extract from './utils/extract';\nimport mapRoutes from './utils/mapRoutes';\nimport Drawer from './utils/Drawer';\nimport RequestError from './utils/RequestError';\nimport ItemList from './utils/ItemList';\nimport ScrollListener from './utils/ScrollListener';\n\nimport Forum from './models/Forum';\nimport Discussion from './models/Discussion';\nimport User from './models/User';\nimport Post from './models/Post';\nimport Group from './models/Group';\nimport Notification from './models/Notification';\n\nimport Alert from './components/Alert';\nimport Button from './components/Button';\nimport ModalManager from './components/ModalManager';\nimport RequestErrorModal from './components/RequestErrorModal';\n\nimport flattenDeep from 'lodash/flattenDeep';\nimport AlertManager from './components/AlertManager';\n\nexport type ApplicationData = {\n apiDocument: any;\n locale: string;\n locales: any;\n resources: any[];\n session: any;\n};\n\nexport default abstract class Application {\n /**\n * The forum model for this application.\n */\n public forum!: Forum;\n\n /**\n * A map of routes, keyed by a unique route name. Each route is an object\n * containing the following properties:\n *\n * - `path` The path that the route is accessed at.\n * - `component` The Mithril component to render when this route is active.\n *\n * @example\n * app.routes.discussion = {path: '/d/:id', component: DiscussionPage.component()};\n */\n public routes: { [key: string]: { path: string; component: any; [key: string]: any } } = {};\n\n /**\n * An ordered list of initializers to bootstrap the application.\n */\n public initializers = new ItemList();\n\n /**\n * The app's session.\n */\n public session!: Session;\n\n /**\n * The app's translator.\n */\n public translator = new Translator();\n\n /**\n * The app's data store.\n */\n public store = new Store({\n forums: Forum,\n users: User,\n discussions: Discussion,\n posts: Post,\n groups: Group,\n notifications: Notification,\n });\n\n /**\n * A local cache that can be used to store data at the application level, so\n * that is persists between different routes.\n */\n public cache: { [key: string]: any } = {};\n\n /**\n * Whether or not the app has been booted.\n */\n public booted: boolean = false;\n\n /**\n * An Alert that was shown as a result of an AJAX request error. If present,\n * it will be dismissed on the next successful request.\n */\n private requestError: RequestError | null = null;\n\n data!: ApplicationData;\n\n title = '';\n titleCount = 0;\n\n drawer = new Drawer();\n\n modal!: ModalManager;\n alerts!: AlertManager;\n\n load(payload) {\n this.data = payload;\n this.translator.locale = payload.locale;\n }\n\n boot() {\n this.initializers.toArray().forEach((initializer) => initializer(this));\n\n this.store.pushPayload({ data: this.data.resources });\n\n this.forum = this.store.getById('forums', 1);\n\n this.session = new Session(this.store.getById('users', this.data.session.userId), this.data.session.csrfToken);\n\n this.mount();\n\n this.booted = true;\n }\n\n bootExtensions(extensions) {\n Object.keys(extensions).forEach((name) => {\n const extension = extensions[name];\n\n const extenders = flattenDeep(extension.extend);\n\n for (const extender of extenders) {\n extender.extend(this, { name, exports: extension });\n }\n });\n }\n\n mount(basePath = '') {\n const $modal = document.getElementById('modal');\n const $alerts = document.getElementById('alerts');\n const $content = document.getElementById('content');\n\n if ($modal) m.mount($modal, (this.modal = new ModalManager()));\n\n if ($alerts) m.mount($alerts, (this.alerts = new AlertManager({ oninit: (vnode) => (this.alerts = vnode.state) })));\n\n if ($content) m.route($content, basePath + '/', mapRoutes(this.routes, basePath));\n\n // Add a class to the body which indicates that the page has been scrolled\n // down.\n new ScrollListener((top) => {\n const $app = $('#app');\n const offset = $app.offset().top;\n\n $app.toggleClass('affix', top >= offset).toggleClass('scrolled', top > offset);\n }).start();\n\n $(() => {\n $('body').addClass('ontouchstart' in window ? 'touch' : 'no-touch');\n });\n }\n\n /**\n * Get the API response document that has been preloaded into the application.\n */\n preloadedApiDocument() {\n if (this.data.apiDocument) {\n const results = this.store.pushPayload(this.data.apiDocument);\n\n this.data.apiDocument = null;\n\n return results;\n }\n\n return null;\n }\n\n /**\n * Set the <title> of the page.\n */\n setTitle(title: string) {\n this.title = title;\n this.updateTitle();\n }\n\n /**\n * Set a number to display in the <title> of the page.\n */\n setTitleCount(count: number) {\n this.titleCount = count;\n this.updateTitle();\n }\n\n updateTitle() {\n document.title = (this.titleCount ? `(${this.titleCount}) ` : '') + (this.title ? this.title + ' - ' : '') + this.forum.attribute('title');\n }\n\n /**\n * Construct a URL to the route with the given name.\n */\n route(name: string, params: object = {}): string {\n const route = this.routes[name];\n\n if (!route) throw new Error(`Route '${name}' does not exist`);\n\n const url = route.path.replace(/:([^\\/]+)/g, (m, key) => extract(params, key));\n\n // Remove falsy values in params to avoid\n // having urls like '/?sort&q'\n for (const key in params) {\n if (params.hasOwnProperty(key) && !params[key]) delete params[key];\n }\n\n const queryString = m.buildQueryString(params as Mithril.Params);\n const prefix = m.route.prefix === '' ? this.forum.attribute('basePath') : '';\n\n return prefix + url + (queryString ? '?' + queryString : '');\n }\n\n /**\n * Make an AJAX request, handling any low-level errors that may occur.\n *\n * @see https://mithril.js.org/request.html\n */\n request(originalOptions: Mithril.RequestOptions<JSON> | any): Promise<any> {\n const options: Mithril.RequestOptions<JSON> | any = Object.assign({}, originalOptions);\n\n // Set some default options if they haven't been overridden. We want to\n // authenticate all requests with the session token. We also want all\n // requests to run asynchronously in the background, so that they don't\n // prevent redraws from occurring.\n options.background = options.background || true;\n\n extend(options, 'config', (result, xhr: XMLHttpRequest) => xhr.setRequestHeader('X-CSRF-Token', this.session.csrfToken!));\n\n // If the method is something like PATCH or DELETE, which not all servers\n // and clients support, then we'll send it as a POST request with the\n // intended method specified in the X-HTTP-Method-Override header.\n if (options.method !== 'GET' && options.method !== 'POST') {\n const method = options.method;\n extend(options, 'config', (result, xhr: XMLHttpRequest) => xhr.setRequestHeader('X-HTTP-Method-Override', method));\n options.method = 'POST';\n }\n\n // When we deserialize JSON data, if for some reason the server has provided\n // a dud response, we don't want the application to crash. We'll show an\n // error message to the user instead.\n options.deserialize = options.deserialize || ((responseText) => responseText);\n\n options.errorHandler =\n options.errorHandler ||\n ((error) => {\n throw error;\n });\n\n // When extracting the data from the response, we can check the server\n // response code and show an error message to the user if something's gone\n // awry.\n const original = options.extract;\n options.extract = (xhr) => {\n let responseText;\n\n if (original) {\n responseText = original(xhr.responseText);\n } else {\n responseText = xhr.responseText || null;\n }\n\n const status = xhr.status;\n\n if (status < 200 || status > 299) {\n throw new RequestError(status, responseText, options, xhr);\n }\n\n if (xhr.getResponseHeader) {\n const csrfToken = xhr.getResponseHeader('X-CSRF-Token');\n if (csrfToken) app.session.csrfToken = csrfToken;\n }\n\n try {\n return JSON.parse(responseText);\n } catch (e) {\n throw new RequestError(500, responseText, options, xhr);\n }\n };\n\n if (this.requestError) this.alerts.dismiss(this.requestError.alert);\n\n // Now make the request. If it's a failure, inspect the error that was\n // returned and show an alert containing its contents.\n return m.request(options).then(\n (res) => res,\n (error) => {\n this.requestError = error;\n\n let children;\n\n switch (error.status) {\n case 422:\n children = error.response.errors\n .map((error) => [error.detail, m('br')])\n .reduce((a, b) => a.concat(b), [])\n .slice(0, -1);\n break;\n\n case 401:\n case 403:\n children = this.translator.trans('core.lib.error.permission_denied_message');\n break;\n\n case 404:\n case 410:\n children = this.translator.trans('core.lib.error.not_found_message');\n break;\n\n case 429:\n children = this.translator.trans('core.lib.error.rate_limit_exceeded_message');\n break;\n\n default:\n children = this.translator.trans('core.lib.error.generic_message');\n }\n\n const isDebug = app.forum.attribute('debug');\n\n error.alert = Alert.component({\n type: 'error',\n children,\n controls: isDebug && [\n Button.component({\n className: 'Button Button--link',\n onclick: this.showDebug.bind(this, error),\n children: 'DEBUG', // TODO make translatable\n }),\n ],\n });\n\n try {\n options.errorHandler(error);\n } catch (error) {\n console.error(error);\n this.alerts.show(error.alert);\n }\n\n return Promise.reject(error);\n }\n );\n }\n\n private showDebug(error: RequestError) {\n this.alerts.dismiss(this.requestError!.alert);\n\n this.modal.show(RequestErrorModal, { error });\n }\n}\n","import Mithril, { ClassComponent, Vnode } from 'mithril';\n\nexport type ComponentProps = {\n children?: Mithril.Children;\n\n className?: string;\n\n [key: string]: any;\n};\n\nexport default class Component<T extends ComponentProps = any> implements ClassComponent {\n element!: HTMLElement;\n\n props: T;\n\n constructor(props: T = <T>{}) {\n this.props = props.tag ? <T>{} : props;\n }\n\n view(vnode) {\n throw new Error('Component#view must be implemented by subclass');\n }\n\n oninit(vnode) {\n this.setProps(vnode);\n }\n\n oncreate(vnode) {\n this.setProps(vnode);\n this.element = vnode.dom;\n }\n\n onbeforeupdate(vnode) {\n this.setProps(vnode);\n }\n\n onupdate(vnode) {\n this.setProps(vnode);\n }\n\n onbeforeremove(vnode) {\n this.setProps(vnode);\n }\n\n onremove(vnode) {\n this.setProps(vnode);\n }\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param selector a jQuery-compatible selector string\n * @final\n */\n $(selector?: string): ZeptoCollection {\n const $element = $(this.element);\n\n return selector ? $element.find(selector) : $element;\n }\n\n render() {\n return m(this.constructor as typeof Component, this.props);\n }\n\n static component(props: ComponentProps | any = {}, children?: Mithril.Children) {\n const componentProps: ComponentProps = Object.assign({}, props);\n\n if (children) componentProps.children = children;\n\n return m(this, componentProps);\n }\n\n static initProps(props: ComponentProps = {}) {}\n\n private setProps(vnode: Vnode<T, this>) {\n const props = vnode.attrs || {};\n\n (this.constructor as typeof Component).initProps(props);\n\n if (!props.children) props.children = vnode.children;\n\n this.props = props;\n }\n}\n","import Store from './Store';\n\nexport interface Identifier {\n type: string;\n id: string;\n}\n\nexport interface Data extends Identifier {\n attributes?: { [key: string]: any };\n relationships?: { [key: string]: { data: Identifier | Identifier[] } };\n}\n\n/**\n * The `Model` class represents a local data resource. It provides methods to\n * persist changes via the API.\n */\nexport default abstract class Model {\n /**\n * The resource object from the API.\n */\n data: Data;\n\n payload: any;\n\n /**\n * The time at which the model's data was last updated. Watching the value\n * of this property is a fast way to retain/cache a subtree if data hasn't\n * changed.\n */\n freshness: Date;\n\n /**\n * Whether or not the resource exists on the server.\n */\n exists: boolean;\n\n /**\n * The data store that this resource should be persisted to.\n */\n protected store?: Store;\n\n /**\n * @param data A resource object from the API.\n * @param store The data store that this model should be persisted to.\n */\n constructor(data = <Data>{}, store?: Store) {\n this.data = data;\n this.store = store;\n\n this.freshness = new Date();\n this.exists = false;\n }\n\n /**\n * Get the model's ID.\n * @final\n */\n id(): string {\n return this.data.id;\n }\n\n /**\n * Get one of the model's attributes.\n * @final\n */\n attribute(attribute: string): any {\n return this.data.attributes && this.data.attributes[attribute];\n }\n\n /**\n * Merge new data into this model locally.\n *\n * @param data A resource object to merge into this model\n */\n public pushData(data: {}) {\n // Since most of the top-level items in a resource object are objects\n // (e.g. relationships, attributes), we'll need to check and perform the\n // merge at the second level if that's the case.\n for (const key in data) {\n if (typeof data[key] === 'object') {\n this.data[key] = this.data[key] || {};\n\n // For every item in a second-level object, we want to check if we've\n // been handed a Model instance. If so, we will convert it to a\n // relationship data object.\n for (const innerKey in data[key]) {\n if (data[key][innerKey] instanceof Model) {\n data[key][innerKey] = { data: Model.getIdentifier(data[key][innerKey]) };\n }\n this.data[key][innerKey] = data[key][innerKey];\n }\n } else {\n this.data[key] = data[key];\n }\n }\n\n // Now that we've updated the data, we can say that the model is fresh.\n // This is an easy way to invalidate retained subtrees etc.\n this.freshness = new Date();\n }\n\n /**\n * Merge new attributes into this model locally.\n *\n * @param attributes The attributes to merge.\n */\n pushAttributes(attributes: any) {\n this.pushData({ attributes });\n }\n\n /**\n * Merge new attributes into this model, both locally and with persistence.\n *\n * @param attributes The attributes to save. If a 'relationships' key\n * exists, it will be extracted and relationships will also be saved.\n * @param [options]\n */\n save(attributes: any, options: any = {}): Promise<Model | Model[]> {\n const data: Data = {\n type: this.data.type,\n id: this.data.id,\n attributes,\n };\n\n // If a 'relationships' key exists, extract it from the attributes hash and\n // set it on the top-level data object instead. We will be sending this data\n // object to the API for persistence.\n if (attributes.relationships) {\n data.relationships = {};\n\n for (const key in attributes.relationships) {\n const model = attributes.relationships[key];\n\n data.relationships[key] = {\n data: model instanceof Array ? model.map(Model.getIdentifier) : Model.getIdentifier(model),\n };\n }\n\n delete attributes.relationships;\n }\n\n // Before we update the model's data, we should make a copy of the model's\n // old data so that we can revert back to it if something goes awry during\n // persistence.\n const oldData = this.copyData();\n\n this.pushData(data);\n\n const request = { data };\n if (options.meta) request.meta = options.meta;\n\n return app\n .request(\n Object.assign(\n {\n method: this.exists ? 'PATCH' : 'POST',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n body: request,\n },\n options\n )\n )\n .then(\n // If everything went well, we'll make sure the store knows that this\n // model exists now (if it didn't already), and we'll push the data that\n // the API returned into the store.\n (payload) => {\n this.store.data[payload.data.type] = this.store.data[payload.data.type] || {};\n this.store.data[payload.data.type][payload.data.id] = this;\n return this.store.pushPayload(payload);\n },\n\n // If something went wrong, though... good thing we backed up our model's\n // old data! We'll revert to that and let others handle the error.\n (response) => {\n this.pushData(oldData);\n m.redraw();\n throw response;\n }\n );\n }\n\n /**\n * Send a request to delete the resource.\n *\n * @param {Object} body Data to send along with the DELETE request.\n * @param {Object} [options]\n * @return {Promise}\n * @public\n */\n delete(body = {}, options = {}) {\n if (!this.exists) return Promise.resolve();\n\n return app\n .request(\n Object.assign(\n {\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n body,\n },\n options\n )\n )\n .then(() => {\n this.exists = false;\n this.store!.remove(this);\n });\n }\n\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/' + this.data.type + (this.exists ? '/' + this.data.id : '');\n }\n\n copyData() {\n return JSON.parse(JSON.stringify(this.data));\n }\n\n /**\n * Generate a function which returns the value of the given attribute.\n *\n * @param name\n * @param [transform] A function to transform the attribute value\n */\n static attribute(name: string, transform?: Function): () => any {\n return function (this: Model) {\n const value = this.data.attributes && this.data.attributes[name];\n\n return transform ? transform(value) : value;\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-one\n * relationship.\n *\n * @return false if no information about the\n * relationship exists; undefined if the relationship exists but the model\n * has not been loaded; or the model if it has been loaded.\n */\n static hasOne(name: string): () => Model | boolean {\n return function (this: Model) {\n if (this.data.relationships) {\n const relationship = this.data.relationships[name];\n\n if (relationship && !Array.isArray(relationship.data)) {\n return app.store.getById(relationship.data.type, relationship.data.id);\n }\n }\n\n return false;\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-many\n * relationship.\n *\n * @return false if no information about the relationship\n * exists; an array if it does, containing models if they have been\n * loaded, and undefined for those that have not.\n */\n static hasMany(name: string): () => any[] | false {\n return function (this: Model) {\n if (this.data.relationships) {\n const relationship = this.data.relationships[name];\n\n if (relationship && Array.isArray(relationship.data)) {\n return relationship.data.map((data) => app.store.getById(data.type, data.id));\n }\n }\n\n return false;\n };\n }\n\n /**\n * Transform the given value into a Date object.\n */\n static transformDate(value: string): Date | null {\n return value ? new Date(value) : null;\n }\n\n /**\n * Get a resource identifier object for the given model.\n */\n protected static getIdentifier(model: Model): Identifier {\n return {\n type: model.data.type,\n id: model.data.id,\n };\n }\n}\n","import User from './models/User';\n\n/**\n * The `Session` class defines the current user session. It stores a reference\n * to the current authenticated user, and provides methods to log in/out.\n */\nexport default class Session {\n /**\n * The current authenticated user.\n */\n user: User;\n\n /**\n * The CSRF token.\n */\n csrfToken?: string;\n\n constructor(user, csrfToken) {\n this.user = user;\n\n this.csrfToken = csrfToken;\n }\n\n /**\n * Attempt to log in a user.\n */\n login(body: { identification: string; password: string; remember?: boolean }, options = {}) {\n return app.request(\n Object.assign(\n {\n method: 'POST',\n url: `${app.forum.attribute('baseUrl')}/login`,\n body,\n },\n options\n )\n );\n }\n\n /**\n * Log the user out.\n *\n * @public\n */\n logout() {\n window.location.href = `${app.forum.attribute('baseUrl')}/logout?token=${this.csrfToken}`;\n }\n}\n","import Model from './Model';\n\n/**\n * The `Store` class defines a local data store, and provides methods to\n * retrieve data from the API.\n */\nexport default class Store {\n /**\n * The local data store. A tree of resource types to IDs, such that\n * accessing data[type][id] will return the model for that type/ID.\n */\n data: { [key: string]: Model[] } = {};\n\n /**\n * The model registry. A map of resource types to the model class that\n * should be used to represent resources of that type.\n */\n models: {};\n\n constructor(models) {\n this.models = models;\n }\n\n /**\n * Push resources contained within an API payload into the store.\n *\n * @param payload\n * @return The model(s) representing the resource(s) contained\n * within the 'data' key of the payload.\n */\n pushPayload(payload: { included?: {}[]; data?: {} | {}[] }): Model | Model[] {\n if (payload.included) payload.included.map(this.pushObject.bind(this));\n\n const result: any = payload.data instanceof Array ? payload.data.map(this.pushObject.bind(this)) : this.pushObject(payload.data);\n\n // Attach the original payload to the model that we give back. This is\n // useful to consumers as it allows them to access meta information\n // associated with their request.\n result.payload = payload;\n\n return result;\n }\n\n /**\n * Create a model to represent a resource object (or update an existing one),\n * and push it into the store.\n *\n * @param {Object} data The resource object\n * @return The model, or null if no model class has been\n * registered for this resource type.\n */\n pushObject(data): Model | null {\n if (!this.models[data.type]) return null;\n\n const type = (this.data[data.type] = this.data[data.type] || {});\n\n if (type[data.id]) {\n type[data.id].pushData(data);\n } else {\n type[data.id] = this.createRecord(data.type, data);\n }\n\n type[data.id].exists = true;\n\n return type[data.id];\n }\n\n /**\n * Make a request to the API to find record(s) of a specific type.\n *\n * @param type The resource type.\n * @param [id] The ID(s) of the model(s) to retrieve.\n * Alternatively, if an object is passed, it will be handled as the\n * `query` parameter.\n * @param query\n * @param options\n */\n find<T extends Model = Model>(type: string, id?: number | number[] | any, query = {}, options = {}): Promise<T | T[]> {\n let params = query;\n let url = `${app.forum.attribute('apiUrl')}/${type}`;\n\n if (id instanceof Array) {\n url += `?filter[id]=${id.join(',')}`;\n } else if (typeof id === 'object') {\n params = id;\n } else if (id) {\n url += `/${id}`;\n }\n\n return <Promise<T | T[]>>app\n .request(\n Object.assign(\n {\n method: 'GET',\n url,\n params,\n },\n options\n )\n )\n .then(this.pushPayload.bind(this));\n }\n\n /**\n * Get a record from the store by ID.\n *\n * @param type The resource type.\n * @param id The resource ID.\n */\n getById<T extends Model = Model>(type: string, id: number | string): T {\n return this.data[type] && (this.data[type][id] as T);\n }\n\n /**\n * Get a record from the store by the value of a model attribute.\n *\n * @param type The resource type.\n * @param key The name of the method on the model.\n * @param value The value of the model attribute.\n */\n getBy<T extends Model = Model>(type: string, key: string, value: any): T {\n return this.all<T>(type).filter((model) => model[key]() === value)[0];\n }\n\n /**\n * Get all loaded records of a specific type.\n */\n all<T extends Model = Model>(type: string): T[] {\n const records = this.data[type];\n\n return records ? Object.keys(records).map((id) => records[id]) : [];\n }\n\n /**\n * Remove the given model from the store.\n */\n remove(model: Model) {\n delete this.data[model.data.type][model.id()];\n }\n\n /**\n * Create a new record of the given type.\n *\n * @param {String} type The resource type\n * @param {Object} [data] Any data to initialize the model with\n */\n createRecord<T extends Model = Model>(type: string, data: any = {}): T {\n data.type = data.type || type;\n\n return new this.models[type](data, this);\n }\n}\n","import extract from './utils/extract';\nimport extractText from './utils/extractText';\nimport username from './helpers/username';\n\ntype Translations = { [key: string]: string };\n\nexport default class Translator {\n /**\n * A map of translation keys to their translated values.\n */\n translations: Translations = {};\n locale?: string;\n\n addTranslations(translations) {\n Object.assign(this.translations, translations);\n }\n\n trans(id: string, parameters?: any): string | any[] {\n const translation = this.translations[id];\n\n if (translation) {\n return this.apply(translation, parameters || {});\n }\n\n return id;\n }\n\n transText(id: string, parameters?: any): string {\n return extractText(this.trans(id, parameters));\n }\n\n transChoice(id: string, number: number, parameters: any): string | any[] {\n let translation: string = this.translations[id];\n\n if (translation) {\n translation = this.pluralize(translation, number);\n\n return this.apply(translation, parameters || {});\n }\n\n return id;\n }\n\n apply(translation: string, input: any) {\n if ('user' in input) {\n const user = extract(input, 'user');\n if (!input.username) input.username = username(user);\n }\n\n const parts = translation.split(new RegExp('({[a-z0-9_]+}|</?[a-z0-9_]+>)', 'gi'));\n\n const hydrated: any[] = [];\n const open: any[][] = [hydrated];\n\n parts.forEach((part) => {\n const match = part.match(new RegExp('{([a-z0-9_]+)}|<(/?)([a-z0-9_]+)>', 'i'));\n\n if (match) {\n if (match[1]) {\n open[0].push(input[match[1]]);\n } else if (match[3]) {\n if (match[2]) {\n open.shift();\n } else {\n let tag = input[match[3]] || { tag: match[3], children: [] };\n open[0].push(tag);\n open.unshift(tag.children || tag);\n }\n }\n } else {\n open[0].push({ tag: 'span', text: part });\n }\n });\n\n return hydrated.filter((part) => part);\n }\n\n pluralize(translation: string, number: number): string | undefined {\n const sPluralRegex = new RegExp(/^\\w+\\: +(.+)$/),\n cPluralRegex = new RegExp(\n /^\\s*((\\{\\s*(\\-?\\d+[\\s*,\\s*\\-?\\d+]*)\\s*\\})|([\\[\\]])\\s*(-Inf|\\-?\\d+)\\s*,\\s*(\\+?Inf|\\-?\\d+)\\s*([\\[\\]]))\\s?(.+?)$/\n ),\n iPluralRegex = new RegExp(/^\\s*(\\{\\s*(\\-?\\d+[\\s*,\\s*\\-?\\d+]*)\\s*\\})|([\\[\\]])\\s*(-Inf|\\-?\\d+)\\s*,\\s*(\\+?Inf|\\-?\\d+)\\s*([\\[\\]])/),\n standardRules = [],\n explicitRules = [];\n\n translation.split('|').forEach((part) => {\n if (cPluralRegex.test(part)) {\n const matches = part.match(cPluralRegex);\n explicitRules[matches[0]] = matches[matches.length - 1];\n } else if (sPluralRegex.test(part)) {\n const matches = part.match(sPluralRegex);\n standardRules.push(matches[1]);\n } else {\n standardRules.push(part);\n }\n });\n\n explicitRules.forEach((rule, e) => {\n if (iPluralRegex.test(e)) {\n const matches = e.match(iPluralRegex);\n\n if (matches[1]) {\n const ns = matches[2].split(',');\n\n for (let n in ns) {\n if (number == ns[n]) {\n return explicitRules[e];\n }\n }\n } else {\n const leftNumber = this.convertNumber(matches[4]);\n const rightNumber = this.convertNumber(matches[5]);\n\n if (\n ('[' === matches[3] ? number >= leftNumber : number > leftNumber) &&\n (']' === matches[6] ? number <= rightNumber : number < rightNumber)\n ) {\n return explicitRules[e];\n }\n }\n }\n });\n\n return standardRules[this.pluralPosition(number, this.locale)] || standardRules[0] || undefined;\n }\n\n convertNumber(number: string): number {\n if ('-Inf' === number) {\n return Number.NEGATIVE_INFINITY;\n } else if ('+Inf' === number || 'Inf' === number) {\n return Number.POSITIVE_INFINITY;\n }\n\n return parseInt(number, 10);\n }\n\n pluralPosition(number: number, locale: string): number {\n if ('pt_BR' === locale) {\n locale = 'xbr';\n }\n\n if (locale.length > 3) {\n locale = locale.split('_')[0];\n }\n\n switch (locale) {\n case 'bo':\n case 'dz':\n case 'id':\n case 'ja':\n case 'jv':\n case 'ka':\n case 'km':\n case 'kn':\n case 'ko':\n case 'ms':\n case 'th':\n case 'vi':\n case 'zh':\n return 0;\n\n case 'af':\n case 'az':\n case 'bn':\n case 'bg':\n case 'ca':\n case 'da':\n case 'de':\n case 'el':\n case 'en':\n case 'eo':\n case 'es':\n case 'et':\n case 'eu':\n case 'fa':\n case 'fi':\n case 'fo':\n case 'fur':\n case 'fy':\n case 'gl':\n case 'gu':\n case 'ha':\n case 'he':\n case 'hu':\n case 'is':\n case 'it':\n case 'ku':\n case 'lb':\n case 'ml':\n case 'mn':\n case 'mr':\n case 'nah':\n case 'nb':\n case 'ne':\n case 'nl':\n case 'nn':\n case 'no':\n case 'om':\n case 'or':\n case 'pa':\n case 'pap':\n case 'ps':\n case 'pt':\n case 'so':\n case 'sq':\n case 'sv':\n case 'sw':\n case 'ta':\n case 'te':\n case 'tk':\n case 'tr':\n case 'ur':\n case 'zu':\n return number == 1 ? 0 : 1;\n\n case 'am':\n case 'bh':\n case 'fil':\n case 'fr':\n case 'gun':\n case 'hi':\n case 'ln':\n case 'mg':\n case 'nso':\n case 'xbr':\n case 'ti':\n case 'wa':\n return number === 0 || number == 1 ? 0 : 1;\n\n case 'be':\n case 'bs':\n case 'hr':\n case 'ru':\n case 'sr':\n case 'uk':\n return number % 10 == 1 && number % 100 != 11\n ? 0\n : number % 10 >= 2 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)\n ? 1\n : 2;\n\n case 'cs':\n case 'sk':\n return number == 1 ? 0 : number >= 2 && number <= 4 ? 1 : 2;\n\n case 'ga':\n return number == 1 ? 0 : number == 2 ? 1 : 2;\n\n case 'lt':\n return number % 10 == 1 && number % 100 != 11 ? 0 : number % 10 >= 2 && (number % 100 < 10 || number % 100 >= 20) ? 1 : 2;\n\n case 'sl':\n return number % 100 == 1 ? 0 : number % 100 == 2 ? 1 : number % 100 == 3 || number % 100 == 4 ? 2 : 3;\n\n case 'mk':\n return number % 10 == 1 ? 0 : 1;\n\n case 'mt':\n return number == 1 ? 0 : number === 0 || (number % 100 > 1 && number % 100 < 11) ? 1 : number % 100 > 10 && number % 100 < 20 ? 2 : 3;\n\n case 'lv':\n return number === 0 ? 0 : number % 10 == 1 && number % 100 != 11 ? 1 : 2;\n\n case 'pl':\n return number == 1 ? 0 : number % 10 >= 2 && number % 10 <= 4 && (number % 100 < 12 || number % 100 > 14) ? 1 : 2;\n\n case 'cy':\n return number == 1 ? 0 : number == 2 ? 1 : number == 8 || number == 11 ? 2 : 3;\n\n case 'ro':\n return number == 1 ? 0 : number === 0 || (number % 100 > 0 && number % 100 < 20) ? 1 : 2;\n\n case 'ar':\n return number === 0 ? 0 : number == 1 ? 1 : number == 2 ? 2 : number >= 3 && number <= 10 ? 3 : number >= 11 && number <= 99 ? 4 : 5;\n\n default:\n return 0;\n }\n }\n}\n","import Application from './Application';\nimport Component from './Component';\nimport * as extend from './extend';\nimport Model from './Model';\nimport Session from './Session';\nimport Store from './Store';\nimport Translator from './Translator';\n\nimport Evented from './utils/Evented';\n// import liveHumanTimes from './utils/liveHumanTimes';\nimport ItemList from './utils/ItemList';\nimport humanTime from './utils/humanTime';\nimport computed from './utils/computed';\nimport Drawer from './utils/Drawer';\nimport anchorScroll from './utils/anchorScroll';\nimport RequestError from './utils/RequestError';\nimport abbreviateNumber from './utils/abbreviateNumber';\nimport * as string from './utils/string';\nimport SubtreeRetainer from './utils/SubtreeRetainer';\nimport extract from './utils/extract';\nimport ScrollListener from './utils/ScrollListener';\nimport stringToColor from './utils/stringToColor';\nimport patchMithril from './utils/patchMithril';\nimport extractText from './utils/extractText';\nimport formatNumber from './utils/formatNumber';\nimport mapRoutes from './utils/mapRoutes';\n\nimport Notification from './models/Notification';\nimport User from './models/User';\nimport Post from './models/Post';\nimport Discussion from './models/Discussion';\nimport Group from './models/Group';\nimport Forum from './models/Forum';\n\nimport AlertManager from './components/AlertManager';\nimport Switch from './components/Switch';\nimport Badge from './components/Badge';\nimport LoadingIndicator from './components/LoadingIndicator';\nimport Placeholder from './components/Placeholder';\nimport Separator from './components/Separator';\nimport Dropdown from './components/Dropdown';\nimport SplitDropdown from './components/SplitDropdown';\nimport RequestErrorModal from './components/RequestErrorModal';\nimport FieldSet from './components/FieldSet';\nimport Select from './components/Select';\nimport Navigation from './components/Navigation';\nimport Alert from './components/Alert';\nimport LinkButton from './components/LinkButton';\nimport Checkbox from './components/Checkbox';\nimport SelectDropdown from './components/SelectDropdown';\nimport ModalManager from './components/ModalManager';\nimport Button from './components/Button';\nimport Modal from './components/Modal';\nimport GroupBadge from './components/GroupBadge';\n\nimport fullTime from './helpers/fullTime';\nimport avatar from './helpers/avatar';\nimport icon from './helpers/icon';\nimport humanTimeHelper from './helpers/humanTime';\n// import punctuateSeries from './helpers/punctuateSeries';\nimport highlight from './helpers/highlight';\nimport username from './helpers/username';\nimport userOnline from './helpers/userOnline';\nimport listItems from './helpers/listItems';\n\nexport default {\n Application: Application,\n Component: Component,\n extend: extend,\n Model: Model,\n Session: Session,\n Store: Store,\n Translator: Translator,\n\n 'utils/Evented': Evented,\n // 'utils/liveHumanTimes': liveHumanTimes,\n 'utils/ItemList': ItemList,\n 'utils/humanTime': humanTime,\n 'utils/computed': computed,\n 'utils/Drawer': Drawer,\n 'utils/anchorScroll': anchorScroll,\n 'utils/RequestError': RequestError,\n 'utils/abbreviateNumber': abbreviateNumber,\n 'utils/string': string,\n 'utils/SubtreeRetainer': SubtreeRetainer,\n 'utils/extract': extract,\n 'utils/ScrollListener': ScrollListener,\n 'utils/stringToColor': stringToColor,\n 'utils/patchMithril': patchMithril,\n 'utils/extractText': extractText,\n 'utils/formatNumber': formatNumber,\n 'utils/mapRoutes': mapRoutes,\n 'models/Notification': Notification,\n 'models/User': User,\n 'models/Post': Post,\n 'models/Discussion': Discussion,\n 'models/Group': Group,\n 'models/Forum': Forum,\n 'components/AlertManager': AlertManager,\n 'components/Switch': Switch,\n 'components/Badge': Badge,\n 'components/LoadingIndicator': LoadingIndicator,\n 'components/Placeholder': Placeholder,\n 'components/Separator': Separator,\n 'components/Dropdown': Dropdown,\n 'components/SplitDropdown': SplitDropdown,\n 'components/RequestErrorModal': RequestErrorModal,\n 'components/FieldSet': FieldSet,\n 'components/Select': Select,\n 'components/Navigation': Navigation,\n 'components/Alert': Alert,\n 'components/LinkButton': LinkButton,\n 'components/Checkbox': Checkbox,\n 'components/SelectDropdown': SelectDropdown,\n 'components/ModalManager': ModalManager,\n 'components/Button': Button,\n 'components/Modal': Modal,\n 'components/GroupBadge': GroupBadge,\n\n 'helpers/fullTime': fullTime,\n 'helpers/avatar': avatar,\n 'helpers/icon': icon,\n 'helpers/humanTime': humanTimeHelper,\n // 'helpers/punctuateSeries': punctuateSeries,\n 'helpers/highlight': highlight,\n 'helpers/username': username,\n 'helpers/userOnline': userOnline,\n 'helpers/listItems': listItems,\n};\n","import Component, { ComponentProps } from '../Component';\nimport Button from './Button';\nimport listItems from '../helpers/listItems';\nimport extract from '../utils/extract';\nimport * as Mithril from 'mithril';\n\nexport interface AlertProps extends ComponentProps {\n controls?: Mithril.ChildArray;\n type?: string;\n dismissible?: boolean;\n\n ondismiss?: () => any;\n}\n\n/**\n * The `Alert` component represents an alert box, which contains a message,\n * some controls, and may be dismissible.\n *\n * The alert may have the following special props:\n *\n * - `type` The type of alert this is. Will be used to give the alert a class\n * name of `Alert--{type}`.\n * - `controls` An array of controls to show in the alert.\n * - `dismissible` Whether or not the alert can be dismissed.\n * - `ondismiss` A callback to run when the alert is dismissed.\n *\n * All other props will be assigned as attributes on the alert element.\n */\nexport default class Alert extends Component<AlertProps> {\n view() {\n const attrs: AlertProps = Object.assign({}, this.props);\n\n const type: string = extract(attrs, 'type');\n attrs.className = `Alert Alert--${type} ${attrs.className || ''}`;\n\n const children: Mithril.Children = extract(attrs, 'children');\n const controls: Mithril.ChildArray = extract(attrs, 'controls') || [];\n\n // If the alert is meant to be dismissible (which is the case by default),\n // then we will create a dismiss button to append as the final control in\n // the alert.\n const dismissible: boolean | undefined = extract(attrs, 'dismissible');\n const ondismiss: () => any = extract(attrs, 'ondismiss');\n const dismissControl = [];\n\n if (dismissible || dismissible === undefined) {\n dismissControl.push(<Button icon=\"fas fa-times\" className=\"Button Button--link Button--icon Alert-dismiss\" onclick={ondismiss} />);\n }\n\n return (\n <div {...attrs}>\n <span className=\"Alert-body\">{children}</span>\n <ul className=\"Alert-controls\">{listItems(controls.concat(dismissControl))}</ul>\n </div>\n );\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport Alert from './Alert';\nimport { Vnode } from 'mithril';\n\n/**\n * The `AlertManager` component provides an area in which `Alert` components can\n * be shown and dismissed.\n */\nexport default class AlertManager extends Component {\n /**\n * An array of Alert components which are currently showing.\n */\n protected components: Vnode<ComponentProps, Alert>[] = [];\n\n view() {\n return (\n <div className=\"AlertManager\">\n {this.components.map((vnode) => (\n <div className=\"AlertManager-alert\">{vnode}</div>\n ))}\n </div>\n );\n }\n\n /**\n * Show an Alert in the alerts area.\n */\n public show(vnode: Vnode<ComponentProps, Alert>) {\n vnode.attrs.ondismiss = this.dismiss.bind(this, vnode);\n\n this.components.push(vnode);\n m.redraw();\n }\n\n /**\n * Dismiss an alert.\n */\n public dismiss(vnode) {\n const index = this.components.indexOf(vnode);\n\n if (index !== -1) {\n this.components.splice(index, 1);\n m.redraw();\n }\n }\n\n /**\n * Clear all alerts.\n */\n public clear() {\n this.components = [];\n m.redraw();\n }\n}\n","import Component from '../Component';\nimport icon from '../helpers/icon';\nimport extract from '../utils/extract';\n\n/**\n * The `Badge` component represents a user/discussion badge, indicating some\n * status (e.g. a discussion is stickied, a user is an admin).\n *\n * A badge may have the following special props:\n *\n * - `type` The type of badge this is. This will be used to give the badge a\n * class name of `Badge--{type}`.\n * - `icon` The name of an icon to show inside the badge.\n * - `label`\n *\n * All other props will be assigned as attributes on the badge element.\n */\nexport default class Badge extends Component {\n view(vnode) {\n const attrs = vnode.attrs;\n const type = extract(attrs, 'type');\n const iconName = extract(attrs, 'icon');\n\n attrs.className = `Badge ${type ? `Badge--${type}` : ''} ${attrs.className || ''}`;\n attrs.title = extract(attrs, 'label') || '';\n\n return <span {...attrs}>{iconName ? icon(iconName, { className: 'Badge-icon' }) : m.trust(' ')}</span>;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n if (this.props.label) this.$().tooltip({ container: 'body' });\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport icon from '../helpers/icon';\nimport extract from '../utils/extract';\nimport extractText from '../utils/extractText';\nimport LoadingIndicator from './LoadingIndicator';\n\nexport interface ButtonProps extends ComponentProps {\n title?: string;\n type?: string;\n icon?: string;\n\n loading?: boolean;\n disabled?: boolean;\n onclick?: Function;\n}\n\n/**\n * The `Button` component defines an element which, when clicked, performs an\n * action. The button may have the following special props:\n *\n * - `icon` The name of the icon class. If specified, the button will be given a\n * 'has-icon' class name.\n * - `disabled` Whether or not the button is disabled. If truthy, the button\n * will be given a 'disabled' class name, and any `onclick` handler will be\n * removed.\n * - `loading` Whether or not the button should be in a disabled loading state.\n *\n * All other props will be assigned as attributes on the button element.\n *\n * Note that a Button has no default class names. This is because a Button can\n * be used to represent any generic clickable control, like a menu item.\n */\nexport default class Button<T extends ButtonProps = ButtonProps> extends Component<T> {\n view() {\n const { children, ...attrs } = this.props;\n\n attrs.className = attrs.className || '';\n attrs.type = attrs.type || 'button';\n\n // If a tooltip was provided for buttons without additional content, we also\n // use this tooltip as text for screen readers\n if (attrs.title && !this.props.children) {\n attrs['aria-label'] = attrs.title;\n }\n\n // If nothing else is provided, we use the textual button content as tooltip\n if (!attrs.title && this.props.children) {\n attrs.title = extractText(this.props.children);\n }\n\n const iconName = extract(attrs, 'icon');\n if (iconName) attrs.className += ' hasIcon';\n\n const loading = extract(attrs, 'loading');\n if (attrs.disabled || loading) {\n attrs.className = classNames(attrs.className, 'disabled', loading && 'loading');\n delete attrs.onclick;\n }\n\n return <button {...attrs}>{this.getButtonContent(iconName, loading, children)}</button>;\n }\n\n /**\n * Get the template for the button's content.\n */\n protected getButtonContent(iconName?: string | boolean, loading?: boolean, children?: any): any[] {\n return [\n iconName && iconName !== true ? icon(iconName, { className: 'Button-icon' }) : '',\n children ? <span className=\"Button-label\">{children}</span> : '',\n loading ? LoadingIndicator.component({ size: 'tiny', className: 'LoadingIndicator--inline' }) : '',\n ];\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport LoadingIndicator from './LoadingIndicator';\nimport icon from '../helpers/icon';\n\nexport interface CheckboxProps extends ComponentProps {\n /**\n * Whether or not the checkbox is checked\n */\n state: boolean;\n\n /**\n * Whether or not the checkbox is disabled.\n */\n disabled: boolean;\n\n /**\n * A callback to run when the checkbox is checked/unchecked.\n */\n onchange?: Function;\n}\n\n/**\n * The `Checkbox` component defines a checkbox input.\n */\nexport default class Checkbox<T extends CheckboxProps = CheckboxProps> extends Component<CheckboxProps> {\n /**\n * Whether or not the checkbox's value is in the process of being saved.\n */\n loading = false;\n\n view() {\n const className = classNames(\n 'Checkbox',\n this.props.className,\n this.props.state ? 'on' : 'off',\n this.loading && 'loading',\n this.props.disabled && 'disabled'\n );\n\n return (\n <label className={className}>\n <input\n type=\"checkbox\"\n checked={this.props.state}\n disabled={this.props.disabled}\n onchange={m.withAttr('checked', this.onchange.bind(this))}\n />\n <div className=\"Checkbox-display\">{this.getDisplay()}</div>\n {this.props.children}\n </label>\n );\n }\n\n /**\n * Get the template for the checkbox's display (tick/cross icon).\n */\n protected getDisplay() {\n return this.loading ? LoadingIndicator.component({ size: 'tiny' }) : icon(this.props.state ? 'fas fa-check' : 'fas fa-times');\n }\n\n /**\n * Run a callback when the state of the checkbox is changed.\n */\n protected onchange(checked: boolean) {\n if (this.props.onchange) this.props.onchange(checked, this);\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport icon from '../helpers/icon';\nimport listItems from '../helpers/listItems';\n\nexport interface DropdownProps extends ComponentProps {\n buttonClassName?: string;\n menuClassName?: string;\n label?: string | any[];\n icon?: string;\n caretIcon?: undefined | string;\n\n onhide?: Function;\n onshow?: Function;\n onclick?: Function;\n}\n\n/**\n * The `Dropdown` component displays a button which, when clicked, shows a\n * dropdown menu beneath it.\n *\n * ### Props\n *\n * - `buttonClassName` A class name to apply to the dropdown toggle button.\n * - `menuClassName` A class name to apply to the dropdown menu.\n * - `icon` The name of an icon to show in the dropdown toggle button.\n * - `caretIcon` The name of an icon to show on the right of the button.\n * - `label` The label of the dropdown toggle button. Defaults to 'Controls'.\n * - `onhide`\n * - `onshow`\n *\n * The children will be displayed as a list inside of the dropdown menu.\n */\nexport default class Dropdown<T extends DropdownProps = DropdownProps> extends Component<T> {\n showing: boolean = false;\n\n static initProps(props: DropdownProps) {\n props.className = props.className || '';\n props.buttonClassName = props.buttonClassName || '';\n props.menuClassName = props.menuClassName || '';\n props.label = props.label || '';\n props.caretIcon = typeof props.caretIcon !== 'undefined' ? props.caretIcon : 'fas fa-caret-down';\n }\n\n view() {\n const items = this.props.children ? listItems(this.props.children) : [];\n\n return (\n <div className={`ButtonGroup Dropdown dropdown ${this.props.className} itemCount${items.length}${this.showing ? ' open' : ''}`}>\n {this.getButton()}\n {this.getMenu(items)}\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.$('> .Dropdown-toggle').dropdown();\n\n // When opening the dropdown menu, work out if the menu goes beyond the\n // bottom of the viewport. If it does, we will apply class to make it show\n // above the toggle button instead of below it.\n this.element.addEventListener('shown.bs.dropdown', () => {\n this.showing = true;\n\n if (this.props.onshow) {\n this.props.onshow();\n }\n\n m.redraw();\n\n const $menu = this.$('.Dropdown-menu');\n const isRight = $menu.hasClass('Dropdown-menu--right');\n\n $menu.removeClass('Dropdown-menu--top Dropdown-menu--right');\n\n $menu.toggleClass('Dropdown-menu--top', $menu.offset().top + $menu.height() > $(window).scrollTop() + $(window).height());\n\n if ($menu.offset().top < 0) {\n $menu.removeClass('Dropdown-menu--top');\n }\n\n $menu.toggleClass('Dropdown-menu--right', isRight || $menu.offset().left + $menu.width() > $(window).scrollLeft() + $(window).width());\n });\n\n this.element.addEventListener('hidden.bs.dropdown', () => {\n this.showing = false;\n\n if (this.props.onhide) {\n this.props.onhide();\n }\n\n m.redraw();\n });\n }\n\n /**\n * Get the template for the button.\n */\n protected getButton(): any {\n return (\n <button className={'Dropdown-toggle ' + this.props.buttonClassName} data-toggle=\"dropdown\" onclick={this.props.onclick}>\n {this.getButtonContent()}\n </button>\n );\n }\n\n /**\n * Get the template for the button's content.\n *\n * @return {*}\n */\n protected getButtonContent() {\n const attrs = this.props;\n\n return [\n attrs.icon ? icon(attrs.icon, { className: 'Button-icon' }) : '',\n <span className=\"Button-label\">{attrs.label}</span>,\n attrs.caretIcon ? icon(attrs.caretIcon, { className: 'Button-caret' }) : '',\n ];\n }\n\n protected getMenu(items) {\n return <ul className={'Dropdown-menu dropdown-menu ' + this.props.menuClassName}>{items}</ul>;\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport listItems from '../helpers/listItems';\n\nexport interface FieldSetProps extends ComponentProps {\n /**\n * The title of this group of fields\n */\n label: string;\n}\n\n/**\n * The `FieldSet` component defines a collection of fields, displayed in a list\n * underneath a title.\n *\n * The children should be an array of items to show in the fieldset.\n */\nexport default class FieldSet extends Component<FieldSetProps> {\n view() {\n return (\n <fieldset className={this.props.className}>\n <legend>{this.props.label}</legend>\n <ul>{listItems(this.props.children)}</ul>\n </fieldset>\n );\n }\n}\n","import Badge from './Badge';\nimport extract from '../utils/extract';\n\nexport default class GroupBadge extends Badge {\n static initProps(props) {\n super.initProps(props);\n\n const group = extract(props, 'group');\n\n if (group) {\n props.icon = group.icon();\n props.style = { backgroundColor: group.color() };\n props.label = typeof props.label === 'undefined' ? group.nameSingular() : props.label;\n props.type = `group--${group.id()}`;\n }\n }\n}\n","import Button, { ButtonProps } from './Button';\n\ninterface LinkButtonProps extends ButtonProps {\n active?: boolean;\n oncreate?: Function;\n href?: string;\n}\n\n/**\n * The `LinkButton` component defines a `Button` which links to a route.\n *\n * ### Props\n *\n * All of the props accepted by `Button`, plus:\n *\n * - `active` Whether or not the page that this button links to is currently\n * active.\n * - `href` The URL to link to. If the current URL `m.route()` matches this,\n * the `active` prop will automatically be set to true.\n */\nexport default class LinkButton extends Button<LinkButtonProps> {\n static initProps(props: LinkButtonProps) {\n props.active = this.isActive(props);\n }\n\n view() {\n const vdom = super.view();\n\n vdom.tag = m.route.Link;\n vdom.attrs.active = String(vdom.attrs.active);\n\n return vdom;\n }\n\n /**\n * Determine whether a component with the given props is 'active'.\n */\n static isActive(props: LinkButtonProps): boolean {\n return typeof props.active !== 'undefined' ? props.active : m.route.get() === props.href;\n }\n}\n","import Component from '../Component';\nimport { Spinner, SpinnerOptions } from 'spin.js';\n\n/**\n * The `LoadingIndicator` component displays a loading spinner with spin.js. It\n * may have the following special props:\n *\n * - `size` The spin.js size preset to use. Defaults to 'small'.\n *\n * All other props will be assigned as attributes on the element.\n */\nexport default class LoadingIndicator extends Component {\n view(vnode) {\n const attrs = vnode.attrs;\n\n attrs.className = 'LoadingIndicator ' + (attrs.className || '');\n delete attrs.size;\n\n return <div {...attrs}>{m.trust(' ')}</div>;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n const options: SpinnerOptions = { zIndex: 'auto', color: this.$().css('color') };\n let sizeOptions: SpinnerOptions = {};\n\n switch (vnode.attrs.size) {\n case 'large':\n sizeOptions = { lines: 10, length: 8, width: 4, radius: 8 };\n break;\n\n case 'tiny':\n sizeOptions = { lines: 8, length: 2, width: 2, radius: 3 };\n break;\n\n default:\n sizeOptions = { lines: 8, length: 4, width: 3, radius: 5 };\n }\n\n new Spinner({ ...options, ...sizeOptions }).spin(this.element);\n }\n}\n","import Mithril from 'mithril';\n\nimport Component, { ComponentProps } from '../Component';\nimport Button from './Button';\nimport RequestError from '../utils/RequestError';\n\n/**\n * The `Modal` component displays a modal dialog, wrapped in a form. Subclasses\n * should implement the `className`, `title`, and `content` methods.\n */\nexport default abstract class Modal<T extends ComponentProps = ComponentProps> extends Component<T> {\n /**\n * An alert component to show below the header.\n */\n alert: Mithril.Vnode;\n\n loading: boolean;\n\n view() {\n if (this.alert) {\n this.alert.attrs.dismissible = false;\n }\n\n return (\n <div className={`Modal modal-dialog ${this.className()}`}>\n <div className=\"Modal-content\">\n {this.isDismissible() ? (\n <div className=\"Modal-close App-backControl\">\n {Button.component({\n icon: 'fas fa-times',\n onclick: this.hide.bind(this),\n className: 'Button Button--icon Button--link',\n })}\n </div>\n ) : (\n ''\n )}\n\n <form onsubmit={this.onsubmit.bind(this)}>\n <div className=\"Modal-header\">\n <h3 className=\"App-titleControl App-titleControl--text\">{this.title()}</h3>\n </div>\n\n {this.alert && <div className=\"Modal-alert\">{this.alert}</div>}\n\n {this.content()}\n </form>\n </div>\n </div>\n );\n }\n\n /**\n * Determine whether or not the modal should be dismissible via an 'x' button.\n */\n isDismissible(): boolean {\n return true;\n }\n\n /**\n * Get the class name to apply to the modal.\n */\n abstract className(): string;\n\n /**\n * Get the title of the modal dialog.\n */\n abstract title();\n\n /**\n * Get the content of the modal.\n */\n abstract content();\n\n /**\n * Handle the modal form's submit event.\n */\n onsubmit(e: Event) {}\n\n /**\n * Focus on the first input when the modal is ready to be used.\n */\n onready() {\n this.$('form').find('input, select, textarea').first().focus().select();\n }\n\n onhide() {}\n\n /**\n * Hide the modal.\n */\n hide() {\n app.modal.close();\n }\n\n /**\n * Stop loading.\n */\n loaded() {\n this.loading = false;\n m.redraw();\n }\n\n /**\n * Show an alert describing an error returned from the API, and give focus to\n * the first relevant field.\n */\n onerror(error: RequestError) {\n this.alert = error.alert;\n\n m.redraw();\n\n if (error.status === 422 && error.response.errors) {\n this.$(`form [name=\"${error.response.errors[0].source.pointer.replace('/data/attributes/', '')}\"]`).select();\n } else {\n this.onready();\n }\n }\n}\n","import MicroModal from 'micromodal';\n\nimport Component, { ComponentProps } from '../Component';\nimport { extend } from '../extend';\nimport Modal from './Modal';\n\n/**\n * The `ModalManager` component manages a modal dialog. Only one modal dialog\n * can be shown at once; loading a new component into the ModalManager will\n * overwrite the previous one.\n */\nexport default class ModalManager extends Component {\n showing!: boolean;\n hideTimeout!: number;\n\n modal: (new () => Modal) | null = null;\n modalProps: ComponentProps = {};\n\n component: Modal | null = null;\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n app.modal = this;\n }\n\n view() {\n return (\n <div className=\"ModalManager modal\" id=\"Modal\" onclick={this.onclick.bind(this)} key=\"modal\">\n {this.modal && m(this.modal, this.modalProps)}\n </div>\n );\n }\n\n /**\n * Show a modal dialog.\n */\n show(component: new () => Modal, props: ComponentProps = {}) {\n clearTimeout(this.hideTimeout);\n\n this.showing = true;\n this.modal = component;\n this.modalProps = props;\n this.component = null;\n\n // Store the vnode state in app.modal.component\n extend(this.modalProps, 'oninit', (v, vnode) => (this.component = vnode.state));\n\n // if (app.current) app.current.retain = true;\n\n m.redraw();\n\n if (!$('.modal-backdrop').length) {\n $('<div />').addClass('modal-backdrop').appendTo('body');\n }\n\n MicroModal.show('Modal', {\n awaitCloseAnimation: true,\n awaitOpenAnimation: true,\n disableFocus: true,\n onShow: () => $('body').addClass('modal-open'),\n onClose: () => {\n $('body').removeClass('modal-open');\n\n const backdrop = $('.modal-backdrop');\n\n backdrop.fadeOut(200, () => {\n backdrop.remove();\n\n this.clear();\n });\n\n this.showing = false;\n },\n });\n\n this.$().one('animationend', () => this.onready());\n }\n\n onclick(e) {\n if (e.target === this.element) {\n this.close();\n }\n }\n\n /**\n * Close the modal dialog.\n */\n close() {\n if (!this.showing) return;\n\n // Don't hide the modal immediately, because if the consumer happens to call\n // the `show` method straight after to show another modal dialog, it will\n // cause the new modal dialog to disappear. Instead we will wait for a tiny\n // bit to give the `show` method the opportunity to prevent this from going\n // ahead.\n this.hideTimeout = setTimeout(() => MicroModal.close('Modal'));\n }\n\n /**\n * Clear content from the modal area.\n */\n protected clear() {\n if (this.component) {\n this.component.onhide();\n }\n\n this.modal = null;\n this.component = null;\n this.modalProps = {};\n\n // app.current.retain = false;\n\n m.redraw();\n }\n\n /**\n * When the modal dialog is ready to be used, tell it!\n */\n protected onready() {\n if (this.component) {\n this.component.onready();\n }\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport Button from './Button';\nimport LinkButton from './LinkButton';\n\nimport History from '../../forum/utils/History';\n\nexport interface NavigationProps extends ComponentProps {\n /**\n * The name of a class to set on the root element.\n */\n className?: string;\n\n /**\n * Whether or not to show a button to toggle the app's drawer if\n * there is no more history to pop.\n */\n drawer?: boolean;\n}\n\n/**\n * The `Navigation` component displays a set of navigation buttons. Typically\n * this is just a back button which pops the app's History. If the user is on\n * the root page and there is no history to pop, then in some instances it may\n * show a button that toggles the app's drawer.\n *\n * If the app has a pane, it will also include a 'pin' button which toggles the\n * pinned state of the pane.\n */\nexport default class Navigation extends Component<NavigationProps> {\n className?: string;\n drawer: boolean;\n\n constructor(options: { className?: string; drawer?: boolean } = {}) {\n super();\n\n this.className = options.className;\n this.drawer = !!options.drawer;\n }\n\n view() {\n const { history, pane }: { history: History; pane: any } = app;\n\n return (\n <div\n className={'Navigation ButtonGroup ' + (this.className || '')}\n onmouseenter={pane && pane.show.bind(pane)}\n onmouseleave={pane && pane.onmouseleave.bind(pane)}\n >\n {history.canGoBack() ? [this.getBackButton(), this.getPaneButton()] : this.getDrawerButton()}\n </div>\n );\n }\n\n /**\n * Get the back button.\n */\n protected getBackButton() {\n const { history } = app;\n const previous = history.getPrevious() || {};\n\n return (\n <LinkButton\n className=\"Button Navigation-back Button--icon\"\n href={history.backUrl()}\n icon=\"fas fa-chevron-left\"\n title={previous.title}\n onclick={(e) => {\n if (e.shiftKey || e.ctrlKey || e.metaKey || e.which === 2) return;\n e.preventDefault();\n history.back();\n }}\n />\n );\n }\n\n /**\n * Get the pane pinned toggle button.\n */\n protected getPaneButton() {\n const { pane } = app;\n\n if (!pane || !pane.active) return '';\n\n return (\n <Button\n className={'Button Button--icon Navigation-pin' + (pane.pinned ? ' active' : '')}\n onclick={pane.togglePinned.bind(pane)}\n icon=\"fas fa-thumbtack\"\n />\n );\n }\n\n /**\n * Get the drawer toggle button.\n */\n protected getDrawerButton() {\n if (!this.drawer) return '';\n\n const { drawer } = app;\n const user = app.session.user;\n\n return (\n <Button\n className={'Button Button--icon Navigation-drawer' + (user && user.newNotificationCount() ? ' new' : '')}\n onclick={(e) => {\n e.stopPropagation();\n drawer.show();\n }}\n icon=\"fas fa-bars\"\n />\n );\n }\n}\n","import Component, { ComponentProps } from '../Component';\n\nexport interface PlaceholderProps extends ComponentProps {\n text: string;\n}\n\n/**\n * The `Placeholder` component displays a muted text with some call to action,\n * usually used as an empty state.\n */\nexport default class Placeholder extends Component<PlaceholderProps> {\n view() {\n return (\n <div className=\"Placeholder\">\n <p>{this.props.text}</p>\n </div>\n );\n }\n}\n","import Modal from './Modal';\nimport { ComponentProps } from '../Component';\nimport RequestError from '../utils/RequestError';\n\nexport interface RequestErrorModalProps extends ComponentProps {\n error: RequestError;\n}\n\nexport default class RequestErrorModal<T extends RequestErrorModalProps = RequestErrorModalProps> extends Modal<T> {\n className(): string {\n return 'RequestErrorModal Modal--large';\n }\n\n title(): string {\n return this.props.error.xhr ? `${this.props.error.xhr.status} ${this.props.error.xhr.statusText}` : '';\n }\n\n content() {\n let responseText;\n\n try {\n responseText = JSON.stringify(JSON.parse(this.props.error.responseText), null, 2);\n } catch (e) {\n responseText = this.props.error.responseText;\n }\n\n return (\n <div className=\"Modal-body\">\n <pre>\n {this.props.error.options.method} {this.props.error.options.url}\n <br />\n <br />\n {responseText}\n </pre>\n </div>\n );\n }\n}\n","import Component, { ComponentProps } from '../Component';\nimport icon from '../helpers/icon';\n\nexport interface SelectProps extends ComponentProps {\n /**\n * Disabled state for the input.\n */\n disabled?: boolean;\n\n /**\n * A callback to run when the selected value is changed.\n */\n onchange?: Function;\n\n /**\n * A map of option values to labels.\n */\n options: {\n [key: string]: string;\n };\n\n /**\n * The value of the selected option.\n */\n value: boolean;\n}\n\n/**\n * The `Select` component displays a <select> input, surrounded with some extra\n * elements for styling.\n */\nexport default class Select<T extends SelectProps = SelectProps> extends Component<T> {\n view() {\n return (\n <span className=\"Select\">\n <select\n className=\"Select-input FormControl\"\n disabled={this.props.disabled}\n onchange={m.withAttr('value', this.onchange.bind(this))}\n value={this.props.value}\n >\n {Object.keys(this.props.options).map((key: string) => (\n <option value={key}>{this.props.options[key]}</option>\n ))}\n </select>\n {icon('fas fa-sort', { className: 'Select-caret' })}\n </span>\n );\n }\n\n /**\n * Run a callback when the state of the checkbox is changed.\n */\n protected onchange(value) {\n if (this.props.onchange) this.props.onchange(value);\n }\n}\n","import Dropdown, { DropdownProps } from './Dropdown';\nimport icon from '../helpers/icon';\n\nexport interface SelectDropdownProps extends DropdownProps {\n defaultLabel?: string;\n}\n\n/**\n * The `SelectDropdown` component is the same as a `Dropdown`, except the toggle\n * button's label is set as the label of the first child which has a truthy\n * `active` prop.\n *\n * ### Props\n *\n * - `caretIcon`\n * - `defaultLabel`\n */\nexport default class SelectDropdown extends Dropdown<SelectDropdownProps> {\n static initProps(props: SelectDropdownProps) {\n props.caretIcon = typeof props.caretIcon !== 'undefined' ? props.caretIcon : 'fas fa-sort';\n\n super.initProps(props);\n\n props.className += ' Dropdown--select';\n }\n\n getButtonContent() {\n const activeChild = this.props.children.filter((child) => child.attrs.active)[0];\n let label = (activeChild && activeChild.attrs.children) || this.props.defaultLabel;\n\n if (label instanceof Array) label = label[0];\n\n return [<span className=\"Button-label\">{label}</span>, icon(this.props.caretIcon, { className: 'Button-caret' })];\n }\n}\n","import Component from '../Component';\n\n/**\n * The `Separator` component defines a menu separator item.\n */\nexport default class Separator extends Component {\n static isListItem = true;\n\n view() {\n return <li className=\"Dropdown-separator\" />;\n }\n}\n","import Dropdown from './Dropdown';\nimport Button from './Button';\nimport icon from '../helpers/icon';\n\n/**\n * The `SplitDropdown` component is similar to `Dropdown`, but the first child\n * is displayed as its own button prior to the toggle button.\n */\nexport default class SplitDropdown extends Dropdown {\n static initProps(props) {\n super.initProps(props);\n\n props.className += ' Dropdown--split';\n props.menuClassName += ' Dropdown-menu--right';\n }\n\n getButton() {\n // Make a copy of the props of the first child component. We will assign\n // these props to a new button, so that it has exactly the same behaviour as\n // the first child.\n const firstChild = this.getFirstChild();\n const buttonProps = Object.assign({}, firstChild.attrs);\n buttonProps.className = classNames(buttonProps.className, 'SplitDropdown-button', 'Button', this.props.buttonClassName);\n\n return [\n Button.component(buttonProps),\n <button className={'Dropdown-toggle Button Button--icon ' + this.props.buttonClassName} data-toggle=\"dropdown\">\n {icon(this.props.icon, { className: 'Button-icon' })}\n {icon('fas fa-caret-down', { className: 'Button-caret' })}\n </button>,\n ];\n }\n\n /**\n * Get the first child. If the first child is an array, the first item in that\n * array will be returned.\n */\n protected getFirstChild() {\n let firstChild = this.props.children;\n\n while (firstChild instanceof Array) firstChild = firstChild[0];\n\n return firstChild;\n }\n}\n","import Checkbox from './Checkbox';\n\n/**\n * The `Switch` component is a `Checkbox`, but with a switch display instead of\n * a tick/cross one.\n */\nexport default class Switch extends Checkbox {\n static initProps(props) {\n super.initProps(props);\n\n props.className = `${props.className || ''} Checkbox--switch`;\n }\n\n getDisplay() {\n return this.loading ? super.getDisplay() : '';\n }\n}\n","/**\n * Extend an object's method by running its output through a mutating callback\n * every time it is called.\n *\n * The callback accepts the method's return value and should perform any\n * mutations directly on this value. For this reason, this function will not be\n * effective on methods which return scalar values (numbers, strings, booleans).\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example\n * extend(Discussion.prototype, 'badges', function(badges) {\n * // do something with `badges`\n * });\n *\n * @param {Object} object The object that owns the method\n * @param {String} method The name of the method to extend\n * @param {function} callback A callback which mutates the method's output\n */\nexport function extend(object, method, callback) {\n const original = object[method];\n\n object[method] = (...args) => {\n // @ts-ignore\n const value = original ? original.apply(object, args) : undefined;\n\n // @ts-ignore\n callback.apply(object, [value].concat(args));\n\n return value;\n };\n\n Object.assign(object[method], original);\n}\n\n/**\n * Override an object's method by replacing it with a new function, so that the\n * new function will be run every time the object's method is called.\n *\n * The replacement function accepts the original method as its first argument,\n * which is like a call to 'super'. Any arguments passed to the original method\n * are also passed to the replacement.\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example\n * override(Discussion.prototype, 'badges', function(original) {\n * const badges = original();\n * // do something with badges\n * return badges;\n * });\n *\n * @param {Object} object The object that owns the method\n * @param {String} method The name of the method to override\n * @param {function} newMethod The method to replace it with\n */\nexport function override(object, method, newMethod) {\n const original = object[method];\n\n object[method] = function (...args) {\n // @ts-ignore\n return newMethod.apply(this, [original.bind(this)].concat(args));\n };\n\n Object.assign(object[method], original);\n}\n","/**\n * The `avatar` helper displays a user's avatar.\n *\n * @param {User} user\n * @param {Object} attrs Attributes to apply to the avatar element\n * @return {Object}\n */\nexport default function avatar(user, attrs: any = {}) {\n attrs.className = 'Avatar ' + (attrs.className || '');\n let content = '';\n\n // If the `title` attribute is set to null or false, we don't want to give the\n // avatar a title. On the other hand, if it hasn't been given at all, we can\n // safely default it to the user's username.\n const hasTitle = attrs.title === 'undefined' || attrs.title;\n if (!hasTitle) delete attrs.title;\n\n // If a user has been passed, then we will set up an avatar using their\n // uploaded image, or the first letter of their username if they haven't\n // uploaded one.\n if (user) {\n const username = user.displayName() || '?';\n const avatarUrl = user.avatarUrl();\n\n if (hasTitle) attrs.title = attrs.title || username;\n\n if (avatarUrl) {\n return <img {...attrs} src={avatarUrl} />;\n }\n\n content = username.charAt(0).toUpperCase();\n attrs.style = { background: user.color() };\n }\n\n return <span {...attrs}>{content}</span>;\n}\n","/**\n * The `fullTime` helper displays a formatted time string wrapped in a <time>\n * tag.\n */\nexport default function fullTime(time: Date) {\n const mo = dayjs(time);\n\n const datetime = mo.format();\n const full = mo.format('LLLL');\n\n return (\n <time pubdate datetime={datetime}>\n {full}\n </time>\n );\n}\n","import { truncate } from '../utils/string';\n\n/**\n * The `highlight` helper searches for a word phrase in a string, and wraps\n * matches with the <mark> tag.\n *\n * @param {String} string The string to highlight.\n * @param {String|RegExp} phrase The word or words to highlight.\n * @param {Integer} [length] The number of characters to truncate the string to.\n * The string will be truncated surrounding the first match.\n */\nexport default function highlight(string: string, phrase: string | RegExp, length?: number): any {\n if (!phrase && !length) return string;\n\n // Convert the word phrase into a global regular expression (if it isn't\n // already) so we can search the string for matched.\n const regexp = phrase instanceof RegExp ? phrase : new RegExp(phrase, 'gi');\n\n let highlighted = string;\n let start = 0;\n\n // If a length was given, the truncate the string surrounding the first match.\n if (length) {\n if (phrase) start = Math.max(0, string.search(regexp) - length / 2);\n\n highlighted = truncate(highlighted, length, start);\n }\n\n // Convert the string into HTML entities, then highlight all matches with\n // <mark> tags. Then we will return the result as a trusted HTML string.\n highlighted = $('<div/>').text(highlighted).html();\n\n if (phrase) highlighted = highlighted.replace(regexp, '<mark>$&</mark>');\n\n return m.trust(highlighted);\n}\n","import humanTimeUtil from '../utils/humanTime';\n\n/**\n * The `humanTime` helper displays a time in a human-friendly time-ago format\n * (e.g. '12 days ago'), wrapped in a <time> tag with other information about\n * the time.\n */\nexport default function humanTime(time: Date) {\n const mo = dayjs(time);\n\n const datetime = mo.format();\n const full = mo.format('LLLL');\n const ago = humanTimeUtil(time);\n\n return (\n <time pubdate datetime={datetime} title={full} data-humantime>\n {ago}\n </time>\n );\n}\n","/**\n * The `icon` helper displays an icon.\n *\n * @param {String} fontClass The full icon class, prefix and the icon’s name.\n * @param {Object} attrs Any other attributes to apply.\n */\nexport default function icon(fontClass: string, attrs: any = {}) {\n attrs.className = 'icon ' + fontClass + ' ' + (attrs.className || '');\n\n return <i {...attrs} />;\n}\n","import Separator from '../components/Separator';\n\nexport function isSeparator(item) {\n return item?.tag === Separator;\n}\n\nexport function withoutUnnecessarySeparators(items) {\n const newItems = [];\n let prevItem;\n\n items.forEach((item, i) => {\n if (!isSeparator(item) || (prevItem && !isSeparator(prevItem) && i !== items.length - 1)) {\n prevItem = item;\n newItems.push(item);\n }\n });\n\n return newItems;\n}\n\n/**\n * The `listItems` helper wraps a collection of components in <li> tags,\n * stripping out any unnecessary `Separator` components.\n *\n * @param {*} items\n * @return {Array}\n */\nexport default function listItems(items) {\n if (!(items instanceof Array)) items = [items];\n\n return withoutUnnecessarySeparators(items).map((item) => {\n const isListItem = item.tag?.isListItem;\n const active = item.tag?.isActive && item.tag.isActive(item.attrs);\n const className = item.attrs?.itemClassName || item.itemClassName;\n\n if (isListItem) {\n item.attrs = item.attrs || {};\n item.attrs.key = item.attrs.key || item.itemName;\n item.key = item.attrs.key;\n }\n\n const node = isListItem ? (\n item\n ) : (\n <li\n className={classNames(className, item.itemName && `item-${item.itemName}`, active && 'active')}\n key={item.attrs?.key || item.itemName}\n >\n {item}\n </li>\n );\n\n node.state = node.state || {};\n\n return node;\n });\n}\n","import icon from './icon';\nimport User from '../models/User';\n\n/**\n * The `useronline` helper displays a green circle if the user is online\n *\n * @param {User} user\n * @return {Object}\n */\nexport default function userOnline(user: User) {\n if (user.lastSeenAt() && user.isOnline()) {\n return <span className=\"UserOnline\">{icon('fas fa-circle')}</span>;\n }\n}\n","/**\n * The `username` helper displays a user's username in a <span class=\"username\">\n * tag. If the user doesn't exist, the username will be displayed as [deleted].\n *\n * @param {User} user\n */\nexport default function username(user): any {\n const name = (user && user.displayName()) || app.translator.trans('core.lib.username.deleted_text');\n\n return <span className=\"username\">{name}</span>;\n}\n","import 'expose-loader?jQuery!zepto';\nimport 'expose-loader?moment!expose-loader?dayjs!dayjs';\nimport 'expose-loader?m!mithril';\nimport 'expose-loader?m.bidi!m.attrs.bidi';\nimport 'expose-loader?Mousetrap!mousetrap';\nimport 'expose-loader?classNames!classnames';\n\nimport 'zepto/src/selector';\nimport 'zepto/src/data';\nimport 'zepto/src/fx';\nimport 'zepto/src/fx_methods';\n\nimport './utils/patchZepto';\n\nimport 'hc-sticky';\nimport 'bootstrap/js/dropdown';\nimport 'bootstrap/js/transition';\n\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\n\ndayjs.extend(relativeTime);\ndayjs.extend(localizedFormat);\n\nimport patchMithril from './utils/patchMithril';\n\npatchMithril();\n\n// import * as Extend from './extend/index';\n\n// export { Extend };\n","import Model from '../Model';\nimport computed from '../utils/computed';\nimport ItemList from '../utils/ItemList';\nimport Badge from '../components/Badge';\n\nimport User from './User';\nimport Post from './Post';\n\nexport default class Discussion extends Model {\n title = Model.attribute('title') as () => string;\n slug = Model.attribute('slug') as () => string;\n\n createdAt = Model.attribute('createdAt', Model.transformDate) as () => Date;\n user = Model.hasOne('user') as () => User;\n firstPost = Model.hasOne('firstPost') as () => Post;\n\n lastPostedAt = Model.attribute('lastPostedAt', Model.transformDate) as () => Date;\n lastPostedUser = Model.hasOne('lastPostedUser') as () => User;\n lastPost = Model.hasOne('lastPost') as () => Post;\n lastPostNumber = Model.attribute('lastPostNumber') as () => number;\n\n commentCount = Model.attribute('commentCount') as () => number;\n replyCount = computed('commentCount', (commentCount) => Math.max(0, commentCount - 1)) as () => number;\n posts = Model.hasMany('posts') as () => Post[];\n mostRelevantPost = Model.hasOne('mostRelevantPost') as () => Post;\n\n lastReadAt = Model.attribute('lastReadAt', Model.transformDate) as () => Date;\n lastReadPostNumber = Model.attribute('lastReadPostNumber') as () => number;\n isUnread = computed('unreadCount', (unreadCount) => !!unreadCount) as () => boolean;\n isRead = computed('unreadCount', (unreadCount) => app.session.user && !unreadCount) as () => boolean;\n\n hiddenAt = Model.attribute('hiddenAt', Model.transformDate) as () => Date;\n hiddenUser = Model.hasOne('hiddenUser') as () => User;\n isHidden = computed('hiddenAt', (hiddenAt) => !!hiddenAt) as () => boolean;\n\n canReply = Model.attribute('canReply') as () => boolean;\n canRename = Model.attribute('canRename') as () => boolean;\n canHide = Model.attribute('canHide') as () => boolean;\n canDelete = Model.attribute('canDelete') as () => boolean;\n\n /**\n * Remove a post from the discussion's posts relationship.\n *\n * @param id The ID of the post to remove.\n */\n removePost(id: string) {\n const relationships = this.data.relationships;\n const posts = relationships && relationships.posts;\n\n if (posts) {\n posts.data.some((data, i) => {\n if (id === data.id) {\n posts.data.splice(i, 1);\n return true;\n }\n });\n }\n }\n\n /**\n * Get the estimated number of unread posts in this discussion for the current\n * user.\n */\n unreadCount(): number {\n const user = app.session.user;\n\n if (user && user.markedAllAsReadAt() < this.lastPostedAt()) {\n return Math.max(0, this.lastPostNumber() - (this.lastReadPostNumber() || 0));\n }\n\n return 0;\n }\n\n /**\n * Get the Badge components that apply to this discussion.\n */\n badges(): ItemList {\n const items = new ItemList();\n\n if (this.isHidden()) {\n items.add('hidden', <Badge type=\"hidden\" icon=\"fas fa-trash\" label={app.translator.transText('core.lib.badge.hidden_tooltip')} />);\n }\n\n return items;\n }\n\n /**\n * Get a list of all of the post IDs in this discussion.\n */\n postIds(): string[] {\n const posts = this.data.relationships?.posts;\n\n return posts ? posts.data.map((link) => link.id) : [];\n }\n}\n","import Model from '../Model';\n\nexport default class Forum extends Model {\n apiEndpoint() {\n return '/';\n }\n}\n","import Model from '../Model';\n\nexport default class Group extends Model {\n static ADMINISTRATOR_ID = '1';\n static GUEST_ID = '2';\n static MEMBER_ID = '3';\n\n nameSingular = Model.attribute('nameSingular') as () => string;\n namePlural = Model.attribute('namePlural') as () => string;\n color = Model.attribute('color') as () => string;\n icon = Model.attribute('icon') as () => string;\n}\n","import Model from '../Model';\nimport User from './User';\n\nexport default class Notification extends Model {\n static ADMINISTRATOR_ID = '1';\n static GUEST_ID = '2';\n static MEMBER_ID = '3';\n\n contentType = Model.attribute('contentType') as () => string;\n content = Model.attribute('content') as () => string;\n createdAt = Model.attribute('createdAt', Model.transformDate) as () => Date;\n\n isRead = Model.attribute('isRead') as () => boolean;\n\n user = Model.hasOne('user') as () => User;\n fromUser = Model.hasOne('fromUser') as () => User;\n subject = Model.hasOne('subhect') as () => any;\n}\n","import Model from '../Model';\nimport computed from '../utils/computed';\nimport { getPlainContent } from '../utils/string';\n\nimport Discussion from './Discussion';\nimport User from './User';\n\nexport default class Post extends Model {\n number = Model.attribute('number') as () => number;\n discussion = Model.hasOne('discussion') as () => Discussion;\n\n createdAt = Model.attribute('createdAt', Model.transformDate) as () => Date;\n user = Model.hasOne('user') as () => User;\n contentType = Model.attribute('contentType') as () => string;\n content = Model.attribute('content') as () => string;\n contentHtml = Model.attribute('contentHtml') as () => string;\n contentPlain = computed('contentHtml', getPlainContent) as () => string;\n\n editedAt = Model.attribute('editedAt', Model.transformDate) as () => Date;\n editedUser = Model.hasOne('editedUser') as () => User;\n isEdited = computed('editedAt', (editedAt) => !!editedAt) as () => boolean;\n\n hiddenAt = Model.attribute('hiddenAt', Model.transformDate) as () => Date;\n hiddenUser = Model.hasOne('hiddenUser') as () => User;\n isHidden = computed('hiddenAt', (hiddenAt) => !!hiddenAt) as () => boolean;\n\n canEdit = Model.attribute('canEdit') as () => boolean;\n canHide = Model.attribute('canHide') as () => boolean;\n canDelete = Model.attribute('canDelete') as () => boolean;\n}\n","import Model from '../Model';\nimport stringToColor from '../utils/stringToColor';\nimport ItemList from '../utils/ItemList';\nimport computed from '../utils/computed';\nimport GroupBadge from '../components/GroupBadge';\nimport Group from './Group';\n\nexport interface UserPreferences {\n discloseOnline?: boolean;\n indexProfile?: boolean;\n locale?: string;\n\n [key: string]: any;\n}\n\nexport default class User extends Model {\n username = Model.attribute('username') as () => string;\n\n displayName = Model.attribute('displayName') as () => string;\n email = Model.attribute('email') as () => string;\n isEmailConfirmed = Model.attribute('isEmailConfirmed') as () => boolean;\n password = Model.attribute('password') as () => string;\n\n avatarUrl = Model.attribute('avatarUrl') as () => string;\n preferences = Model.attribute('preferences') as () => UserPreferences;\n groups = Model.hasMany('groups') as () => Group[];\n\n joinTime = Model.attribute('joinTime', Model.transformDate) as () => Date;\n lastSeenAt = Model.attribute('lastSeenAt', Model.transformDate) as () => Date;\n markedAllAsReadAt = Model.attribute('markedAllAsReadAt', Model.transformDate) as () => Date;\n unreadNotificationCount = Model.attribute('unreadNotificationCount') as () => number;\n newNotificationCount = Model.attribute('newNotificationCount') as () => number;\n\n discussionCount = Model.attribute('discussionCount') as () => number;\n commentCount = Model.attribute('commentCount') as () => number;\n\n canEdit = Model.attribute('canEdit') as () => boolean;\n canDelete = Model.attribute('canDelete') as () => boolean;\n\n avatarColor = null;\n color = computed(['username', 'avatarUrl', 'avatarColor'], function (username, avatarUrl, avatarColor) {\n // If we've already calculated and cached the dominant color of the user's\n // avatar, then we can return that in RGB format. If we haven't, we'll want\n // to calculate it. Unless the user doesn't have an avatar, in which case\n // we generate a color from their username.\n if (avatarColor) {\n return 'rgb(' + avatarColor.join(', ') + ')';\n } else if (avatarUrl) {\n this.calculateAvatarColor();\n return '';\n }\n\n return '#' + stringToColor(username);\n }) as () => string;\n\n isOnline(): boolean {\n return this.lastSeenAt() > dayjs().subtract(5, 'minutes').toDate();\n }\n\n /**\n * Get the Badge components that apply to this user.\n */\n badges(): ItemList {\n const items = new ItemList();\n const groups = this.groups();\n\n if (groups) {\n groups.forEach((group) => {\n items.add('group' + group.id(), GroupBadge.component({ group }));\n });\n }\n\n return items;\n }\n\n /**\n * Calculate the dominant color of the user's avatar. The dominant color will\n * be set to the `avatarColor` property once it has been calculated.\n *\n * @protected\n */\n calculateAvatarColor() {\n const image = new Image();\n const user = this;\n\n image.onload = function () {\n const colorThief = new ColorThief();\n user.avatarColor = colorThief.getColor(this);\n user.freshness = new Date();\n m.redraw();\n };\n image.crossOrigin = 'anonymous';\n image.src = this.avatarUrl();\n }\n\n /**\n * Update the user's preferences.\n */\n savePreferences(newPreferences: UserPreferences): Promise<User> {\n const preferences = this.preferences();\n\n Object.assign(preferences, newPreferences);\n\n return <Promise<User>>this.save({ preferences });\n }\n}\n","/**\n * The `Drawer` class controls the page's drawer. The drawer is the area the\n * slides out from the left on mobile devices; it contains the header and the\n * footer.\n */\nexport default class Drawer {\n private $backdrop?: ZeptoCollection;\n\n constructor() {\n // Set up an event handler so that whenever the content area is tapped,\n // the drawer will close.\n $('#content').click((e) => {\n if (this.isOpen()) {\n e.preventDefault();\n this.hide();\n }\n });\n }\n\n /**\n * Check whether or not the drawer is currently open.\n */\n isOpen(): boolean {\n return $('#app').hasClass('drawerOpen');\n }\n\n /**\n * Hide the drawer.\n */\n hide() {\n $('#app').removeClass('drawerOpen');\n\n if (this.$backdrop) this.$backdrop.remove();\n }\n\n /**\n * Show the drawer.\n */\n public show() {\n $('#app').addClass('drawerOpen');\n\n this.$backdrop = $('<div/>')\n .addClass('drawer-backdrop fade')\n .appendTo('body')\n .click(() => this.hide());\n\n requestAnimationFrame(() => this.$backdrop!.addClass('in'));\n }\n}\n","export type EventHandler = (...args: any) => any;\n\nexport default class Evented {\n /**\n * Arrays of registered event handlers, grouped by the event name.\n */\n protected handlers: { [key: string]: EventHandler[] } = {};\n\n /**\n * Get all of the registered handlers for an event.\n *\n * @param event The name of the event.\n */\n protected getHandlers(event: string): EventHandler[] {\n this.handlers = this.handlers || {};\n\n this.handlers[event] = this.handlers[event] || [];\n\n return this.handlers[event];\n }\n\n /**\n * Trigger an event.\n *\n * @param event The name of the event.\n * @param args Arguments to pass to event handlers.\n */\n public trigger(event: string, ...args: any): this {\n this.getHandlers(event).forEach((handler) => handler.apply(this, args));\n\n return this;\n }\n\n /**\n * Register an event handler.\n *\n * @param event The name of the event.\n * @param handler The function to handle the event.\n */\n on(event: string, handler: EventHandler): this {\n this.getHandlers(event).push(handler);\n\n return this;\n }\n\n /**\n * Register an event handler so that it will run only once, and then\n * unregister itself.\n *\n * @param event The name of the event.\n * @param handler The function to handle the event.\n */\n one(event: string, handler: EventHandler): this {\n const wrapper = function (this: Evented) {\n handler.apply(this, Array.from(arguments));\n\n this.off(event, wrapper);\n };\n\n this.getHandlers(event).push(wrapper);\n\n return this;\n }\n\n /**\n * Unregister an event handler.\n *\n * @param event The name of the event.\n * @param handler The function that handles the event.\n */\n off(event: string, handler: EventHandler): this {\n const handlers = this.getHandlers(event);\n const index = handlers.indexOf(handler);\n\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n\n return this;\n }\n}\n","class Item<T> {\n content: T;\n priority: number;\n key: number = 0;\n\n constructor(content: any, priority: number) {\n this.content = content;\n this.priority = priority;\n }\n}\n\nexport default class ItemList<T = any> {\n private items: { [key: string]: Item<T> } = {};\n\n /**\n * Check whether the list is empty.\n *\n * @returns {boolean}\n * @public\n */\n isEmpty(): boolean {\n for (const i in this.items) {\n if (this.items.hasOwnProperty(i)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check whether an item is present in the list.\n */\n has(key: any): boolean {\n return !!this.items[key];\n }\n\n /**\n * Get the content of an item.\n */\n get(key: any): T {\n return this.items[key]?.content;\n }\n\n /**\n * Add an item to the list.\n *\n * @param {String} key A unique key for the item.\n * @param {*} content The item's content.\n * @param {Integer} [priority] The priority of the item. Items with a higher\n * priority will be positioned before items with a lower priority.\n * @return {ItemList}\n * @public\n */\n add(key: any, content: T, priority = 0) {\n this.items[key] = new Item(content, priority);\n\n return this;\n }\n\n toArray(): T[] {\n const items: Item<T>[] = [];\n\n for (const i in this.items) {\n if (this.items.hasOwnProperty(i)) {\n if (this.items[i] !== null && this.items[i] instanceof Item) {\n this.items[i].content = Object(this.items[i].content);\n\n // @ts-ignore\n this.items[i].content.itemName = i;\n items.push(this.items[i]);\n this.items[i].key = items.length;\n }\n }\n }\n\n return items\n .sort((a, b) => {\n if (a.priority === b.priority) {\n return a.key - b.key;\n } else if (a.priority > b.priority) {\n return -1;\n }\n return 1;\n })\n .map((item) => item.content);\n }\n}\n","import Mithril from 'mithril';\n\nexport interface RequestErrorResponse extends JSON {\n errors?: {\n code: string;\n source?: {\n pointer: string;\n };\n }[];\n}\n\nexport default class RequestError {\n status: number;\n responseText: string;\n options: Mithril.RequestOptions;\n xhr: XMLHttpRequest;\n response?: RequestErrorResponse;\n alert?: Mithril.Vnode;\n\n constructor(status, responseText, options, xhr) {\n this.status = status;\n this.responseText = responseText;\n this.options = options;\n this.xhr = xhr;\n\n try {\n this.response = JSON.parse(responseText);\n } catch (e) {\n this.response = null;\n }\n\n this.alert = null;\n }\n}\n","const later =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n ((callback) => window.setTimeout(callback, 1000 / 60));\n\n/**\n * The `ScrollListener` class sets up a listener that handles window scroll\n * events.\n */\nexport default class ScrollListener {\n ticking: boolean = false;\n\n callback: Function;\n active: EventListener;\n\n /**\n * @param callback The callback to run when the scroll position\n * changes.\n */\n public constructor(callback: Function) {\n this.callback = callback;\n }\n\n /**\n * On each animation frame, as long as the listener is active, run the\n * `update` method.\n */\n protected loop() {\n // THROTTLE: If the callback is still running (or hasn't yet run), we ignore\n // further scroll events.\n if (this.ticking) return;\n\n // Schedule the callback to be executed soon (TM), and stop throttling once\n // the callback is done.\n later(() => {\n this.update();\n this.ticking = false;\n });\n\n this.ticking = true;\n }\n\n /**\n * Run the callback, whether there was a scroll event or not.\n */\n public update() {\n this.callback(window.pageYOffset);\n }\n\n /**\n * Start listening to and handling the window's scroll position.\n */\n public start() {\n if (!this.active) {\n window.addEventListener('scroll', (this.active = this.loop.bind(this)));\n }\n }\n\n /**\n * Stop listening to and handling the window's scroll position.\n */\n public stop() {\n window.removeEventListener('scroll', this.active);\n\n this.active = null;\n }\n}\n","export default class SubtreeRetainer {\n callbacks: Function[];\n data = {};\n\n constructor(...callbacks: Function[]) {\n this.callbacks = callbacks;\n }\n\n check(...callbacks: Function[]) {\n this.callbacks.push(...callbacks);\n }\n\n /**\n * Return whether the component should redraw.\n */\n update(): boolean {\n let update = false;\n\n this.callbacks.forEach((callback, i) => {\n const result = callback();\n\n if (result !== this.data[i]) {\n this.data[i] = result;\n update = true;\n }\n });\n\n return update;\n }\n}\n","/**\n * The `abbreviateNumber` utility converts a number to a shorter localized form.\n *\n * @example\n * abbreviateNumber(1234);\n * // \"1.2K\"\n */\nexport default (number: number): string => {\n // TODO: translation\n if (number >= 1000000) {\n return Math.floor(number / 1000000) + app.translator.transText('core.lib.number_suffix.mega_text');\n } else if (number >= 1000) {\n return Math.floor(number / 1000) + app.translator.transText('core.lib.number_suffix.kilo_text');\n } else {\n return number.toString();\n }\n};\n","/**\n * The `anchorScroll` utility saves the scroll position relative to an element,\n * and then restores it after a callback has been run.\n *\n * This is useful if a redraw will change the page's content above the viewport.\n * Normally doing this will result in the content in the viewport being pushed\n * down or pulled up. By wrapping the redraw with this utility, the scroll\n * position can be anchor to an element that is in or below the viewport, so\n * the content in the viewport will stay the same.\n *\n * @param element The element to anchor the scroll position to.\n * @param callback The callback to run that will change page content.\n */\nexport default function anchorScroll(element: ZeptoCollection | HTMLElement, callback: Function) {\n const $window = $(window);\n const $el = $(element);\n\n if (!element || !$el.length) {\n return callback();\n }\n\n const relativeScroll = $el.offset().top - $window.scrollTop();\n\n callback();\n\n $window.scrollTop($el.offset().top - relativeScroll);\n}\n","/**\n * The `computed` utility creates a function that will cache its output until\n * any of the dependent values are dirty.\n *\n * @param dependentKeys The keys of the dependent values.\n * @param compute The function which computes the value using the\n * dependent values.\n */\nexport default function computed(dependentKeys: string | string[], compute: Function): () => any {\n const keys = [].concat(dependentKeys);\n\n const dependentValues = {};\n let computedValue;\n\n return function () {\n let recompute = false;\n\n // Read all of the dependent values. If any of them have changed since last\n // time, then we'll want to recompute our output.\n keys.forEach((key) => {\n const value = typeof this[key] === 'function' ? this[key]() : this[key];\n\n if (dependentValues[key] !== value) {\n recompute = true;\n dependentValues[key] = value;\n }\n });\n\n if (recompute) {\n computedValue = compute.apply(\n this,\n keys.map((key) => dependentValues[key])\n );\n }\n\n return computedValue;\n };\n}\n","/**\n * The `extract` utility deletes a property from an object and returns its\n * value.\n */\nexport default function extract(object: object, property: string): any {\n const value = object[property];\n\n delete object[property];\n\n return value;\n}\n","/**\n * Extract the text nodes from a virtual element.\n *\n * @param {VirtualElement} vdom\n * @return {String}\n */\nexport default function extractText(vdom: any): string {\n if (vdom instanceof Array) {\n return vdom.map((element) => extractText(element)).join('');\n } else if (typeof vdom === 'object' && vdom !== null) {\n return vdom.text || extractText(vdom.children);\n } else {\n return vdom;\n }\n}\n","/**\n * The `formatNumber` utility localizes a number into a string with the\n * appropriate punctuation.\n *\n * @param number Number to format\n * @param options Maximum significant digits or formatting options object\n *\n * @example\n * formatNumber(1234);\n * // 1,234\n */\nexport default function formatNumber(number: number, options: number | Intl.NumberFormatOptions = {}): string {\n const config = typeof options === 'number' ? { maximumSignificantDigits: options } : options;\n\n return number.toLocaleString(app.translator.locale, config);\n}\n","/**\n * The `humanTime` utility converts a date to a localized, human-readable time-\n * ago string.\n */\nexport default function humanTime(time: Date): string {\n let m = dayjs(time);\n const now = dayjs();\n\n // To prevent showing things like \"in a few seconds\" due to small offsets\n // between client and server time, we always reset future dates to the\n // current time. This will result in \"just now\" being shown instead.\n if (m.isAfter(now)) {\n m = now;\n }\n\n const day = 864e5;\n const diff = m.diff(dayjs());\n let ago = null;\n\n // If this date was more than a month ago, we'll show the name of the month\n // in the string. If it wasn't this year, we'll show the year as well.\n if (diff < -30 * day) {\n if (m.year() === dayjs().year()) {\n ago = m.format('D MMM');\n } else {\n ago = m.format(\"MMM 'YY\");\n }\n } else {\n ago = m.fromNow();\n }\n\n return ago;\n}\n","import { RouteDefs } from 'mithril';\n\n/**\n * The `mapRoutes` utility converts a map of named application routes into a\n * format that can be understood by Mithril.\n *\n * @see https://lhorie.github.io/mithril/mithril.route.html#defining-routes\n */\nexport default function mapRoutes(routes: object, basePath: string = ''): RouteDefs {\n const map = {};\n\n for (const key in routes) {\n const route = routes[key];\n\n if (route.component) {\n if (!route.component.attrs) route.component.attrs = {};\n route.component.attrs.routeName = key;\n }\n\n map[basePath + route.path] = route.component;\n }\n\n return map;\n}\n","import m from 'mithril';\nimport prop from 'mithril/stream';\n\nimport Component from '../Component';\n\nexport default () => {\n const mo = window['m'];\n\n const _m = function (comp, ...args) {\n if (!arguments[1]) arguments[1] = {};\n\n if (comp.prototype && comp.prototype instanceof Component) {\n // allow writing to children attribute\n Object.defineProperty(arguments[1], 'children', {\n writable: true,\n });\n }\n\n const node = mo.apply(this, arguments);\n\n if (!node.attrs) node.attrs = {};\n\n if (node.attrs.bidi) {\n m.bidi(node, node.attrs.bidi);\n }\n\n if (node.attrs.route) {\n node.attrs.href = node.attrs.route;\n node.attrs.tag = m.route.Link;\n\n delete node.attrs.route;\n }\n\n return node;\n };\n\n Object.keys(mo).forEach((key) => (_m[key] = mo[key]));\n\n _m.withAttr = (key: string, cb: Function) =>\n function () {\n cb(this.getAttribute(key) || this[key]);\n };\n\n _m.prop = prop;\n\n window['m'] = _m;\n};\n","import jump from 'jump.js';\nimport Tooltip from 'tooltip.js';\n\n// add $.fn.tooltip\n$.fn.tooltip = function (option) {\n return this.each(function (this: HTMLElement) {\n const $this = $(this);\n let data = $this.data('bs.tooltip');\n const options = (typeof option === 'object' && option) || {};\n\n if ($this.attr('title')) {\n options.title = $this.attr('title');\n $this.removeAttr('title');\n $this.attr('data-original-title', options.title);\n }\n\n if (option === 'destroy') option = 'dispose';\n\n if (!data && ['dispose', 'hide'].includes(option)) return;\n\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)));\n if (typeof option === 'string' && data[option]) data[option]();\n });\n};\n\n// add $.fn.outerWidth and $.fn.outerHeight\n['width', 'height'].forEach(function (dimension) {\n const Dimension = dimension.replace(/./, function (m) {\n return m[0].toUpperCase();\n });\n\n $.fn[`outer${Dimension}`] = function (margin) {\n const elem = this;\n\n if (elem) {\n const sides = { width: ['left', 'right'], height: ['top', 'bottom'] };\n let size = elem[dimension]();\n\n sides[dimension].forEach(function (side) {\n if (margin) size += parseInt(elem.css('margin-' + side), 10);\n });\n\n return size;\n } else {\n return null;\n }\n };\n});\n\n// allow use of $(':input')\n// @ts-ignore\n$.expr[':']['input'] = function () {\n if ('disabled' in this || ['INPUT', 'SELECT', 'TEXTAREA', 'BUTTON'].includes(this.tagName)) return this;\n};\n\n// add $().hover() method\n$.fn.hover = function (hover, leave) {\n return this.on('mouseenter', hover).on('mouseleave', leave || hover);\n};\n\n// add animated scroll\n$.fn.animateScrollTop = function (to, duration = $.fx.speeds._default, callback) {\n if (typeof to === 'number') to -= window.scrollY || window.pageYOffset;\n\n jump(to, {\n duration: $.fx.speeds[duration] || duration,\n callback,\n });\n\n return this;\n};\n\n// add basic $().slideUp() function\n$.fn.slideUp = function (duration = $.fx.speeds._default, easing?, callback?) {\n this.css({ overflow: 'hidden', height: this.height() });\n\n this.animate(\n {\n height: 0,\n },\n duration,\n easing,\n callback\n );\n\n return this;\n};\n\n// required for compatibility with jquery plugins\n// ex: bootstrap plugins\n$.fn.extend = $.extend.bind($);\n\n/**\n * Enable special events on Zepto\n * @license Original Copyright 2013 Enideo. Released under dual MIT and GPL licenses.\n */\n$.event.special = $.event.special || {};\n\nconst bindBeforeSpecialEvents = $.fn.bind;\n\n$.fn.bind = function (eventName, data, callback) {\n const el = this;\n\n if (!callback) {\n callback = data;\n data = null;\n }\n\n $.each(eventName.split(/\\s/), (key: string, value: any): boolean => {\n value = value.split(/\\./)[0];\n\n if (value in $.event.special) {\n let specialEvent = $.event.special[value];\n\n /// init enable special events on Zepto\n if (!specialEvent._init) {\n specialEvent._init = true;\n\n /// intercept and replace the special event handler to add functionality\n specialEvent.originalHandler = specialEvent.handler;\n specialEvent.handler = function () {\n /// make event argument writable, like on jQuery\n const args = Array.prototype.slice.call(arguments);\n\n args[0] = $.extend({}, args[0]);\n\n /// define the event handle, $.event.dispatch is only for newer versions of jQuery\n $.event.handle = function () {\n /// make context of trigger the event element\n const args = Array.prototype.slice.call(arguments);\n const event = args[0];\n const $target = $(event.target);\n\n $target.trigger.apply($target, arguments);\n };\n\n specialEvent.originalHandler.apply(this, args);\n };\n }\n\n /// setup special events on Zepto\n specialEvent.setup.apply(el, [data]);\n }\n\n return true;\n });\n\n return bindBeforeSpecialEvents.apply(this, [eventName, callback]);\n};\n","/**\n * Truncate a string to the given length, appending ellipses if necessary.\n */\nexport function truncate(string: string, length: number, start = 0): string {\n return (start > 0 ? '...' : '') + string.substring(start, start + length) + (string.length > start + length ? '...' : '');\n}\n\n/**\n * Create a slug out of the given string. Non-alphanumeric characters are\n * converted to hyphens.\n */\nexport function slug(string: string): string {\n return string\n .toLowerCase()\n .replace(/[^a-z0-9]/gi, '-')\n .replace(/-+/g, '-')\n .replace(/-$|^-/g, '');\n}\n\n/**\n * Strip HTML tags and quotes out of the given string, replacing them with\n * meaningful punctuation.\n */\nexport function getPlainContent(string: string): string {\n const html = string.replace(/(<\\/p>|<br>)/g, '$1 ').replace(/<img\\b[^>]*>/gi, ' ');\n\n const dom = $('<div/>').html(html);\n\n dom.find(getPlainContent.removeSelectors.join(',')).remove();\n\n return dom.text().replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * An array of DOM selectors to remove when getting plain content.\n *\n * @type {String[]}\n */\ngetPlainContent.removeSelectors = ['blockquote', 'script'];\n\n/**\n * Make a string's first character uppercase.\n */\nexport function ucfirst(string: string): string {\n return string.substr(0, 1).toUpperCase() + string.substr(1);\n}\n","export function hsvToRgb(h: number, s: number, v: number) {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return {\n r: Math.floor(r * 255),\n g: Math.floor(g * 255),\n b: Math.floor(b * 255),\n };\n}\n\n/**\n * Convert the given string to a unique color.\n */\nexport default function stringToColor(string: string): string {\n let num = 0;\n\n // Convert the username into a number based on the ASCII value of each\n // character.\n for (let i = 0; i < string.length; i++) {\n num += string.charCodeAt(i);\n }\n\n // Construct a color using the remainder of that number divided by 360, and\n // some predefined saturation and value values.\n const hue = num % 360;\n const rgb = hsvToRgb(hue / 360, 0.3, 0.9);\n\n return '' + rgb.r.toString(16) + rgb.g.toString(16) + rgb.b.toString(16);\n}\n","import Application from '../common/Application';\nimport History from './utils/History';\nimport Pane from './utils/Pane';\n\nimport Navigation from '../common/components/Navigation';\nimport HeaderPrimary from './components/HeaderPrimary';\nimport HeaderSecondary from './components/HeaderSecondary';\nimport Page from './components/Page';\nimport DiscussionList from './components/DiscussionList';\nimport CommentPost from './components/CommentPost';\nimport DiscussionRenamedPost from './components/DiscussionRenamedPost';\n\nimport Notification from '../common/models/Notification';\n\nimport routes from './routes';\n\nexport default class Forum extends Application {\n /**\n * The app's history stack, which keeps track of which routes the user visits\n * so that they can easily navigate back to the previous route.\n */\n history: History = new History();\n\n /**\n * {@inheritdoc}\n */\n cache: {\n notifications?: Notification[][];\n discussionList?: DiscussionList | null;\n [key: string]: any;\n } = {};\n\n postComponents = {\n comment: CommentPost,\n discussionRenamed: DiscussionRenamedPost,\n };\n\n previous?: Page;\n current?: Page;\n\n pane!: Pane;\n\n constructor() {\n super();\n\n routes(this);\n }\n\n mount() {\n // Get the configured default route and update that route's path to be '/'.\n // Push the homepage as the first route, so that the user will always be\n // able to click on the 'back' button to go home, regardless of which page\n // they started on.\n const defaultRoute = this.forum.attribute('defaultRoute');\n let defaultAction = 'index';\n\n for (const i in this.routes) {\n if (this.routes[i].path === defaultRoute) defaultAction = i;\n }\n\n this.routes[defaultAction].path = '/';\n this.history.push(defaultAction, this.translator.transText('core.forum.header.back_to_index_tooltip'), '/');\n\n m.mount(document.getElementById('app-navigation'), new Navigation({ className: 'App-backControl', drawer: true }));\n m.mount(document.getElementById('header-navigation'), new Navigation());\n m.mount(document.getElementById('header-primary'), new HeaderPrimary());\n m.mount(document.getElementById('header-secondary'), new HeaderSecondary());\n\n this.pane = new Pane(document.getElementById('app'));\n // this.composer = m.mount(document.getElementById('composer'), Composer.component());\n\n m.route.prefix = '';\n super.mount(this.forum.attribute('basePath'));\n\n // alertEmailConfirmation(this);\n\n // Route the home link back home when clicked. We do not want it to register\n // if the user is opening it in a new tab, however.\n $('#home-link').click((e: MouseEvent) => {\n if (e.ctrlKey || e.metaKey || e.which === 2) return;\n e.preventDefault();\n this.history.home();\n\n // Reload the current user so that their unread notification count is refreshed.\n if (this.session.user) {\n this.store.find('users', this.session.user.id());\n m.redraw();\n }\n });\n }\n}\n","import Forum from './Forum';\n\nconst app = new Forum();\n\n// @ts-ignore\nwindow.app = app;\n\nexport default app;\n","import compat from '../common/compat';\n\nimport Forum from './Forum';\n\nimport IndexPage from './components/IndexPage';\n\nexport default Object.assign(compat, {\n 'components/IndexPage': IndexPage,\n Forum: Forum,\n}) as any;\n","import Component, { ComponentProps } from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport icon from '../../common/helpers/icon';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport User from '../../common/models/User';\n\nexport interface AvatarEditorProps extends ComponentProps {\n user: User;\n}\n\n/**\n * The `AvatarEditor` component displays a user's avatar along with a dropdown\n * menu which allows the user to upload/remove the avatar.\n */\nexport default class AvatarEditor extends Component<AvatarEditorProps> {\n /**\n * Whether or not an avatar upload is in progress.\n */\n loading = false;\n\n /**\n * Whether or not an image has been dragged over the dropzone.\n */\n isDraggedOver = false;\n\n static initProps(props) {\n super.initProps(props);\n\n props.className = props.className || '';\n }\n\n view() {\n const user = this.props.user;\n\n return (\n <div\n className={\n 'AvatarEditor Dropdown ' + this.props.className + (this.loading ? ' loading' : '') + (this.isDraggedOver ? ' dragover' : '')\n }\n >\n {avatar(user)}\n <a\n className={user.avatarUrl() ? 'Dropdown-toggle' : 'Dropdown-toggle AvatarEditor--noAvatar'}\n title={app.translator.trans('core.forum.user.avatar_upload_tooltip')}\n data-toggle=\"dropdown\"\n onclick={this.quickUpload.bind(this)}\n ondragover={this.enableDragover.bind(this)}\n ondragenter={this.enableDragover.bind(this)}\n ondragleave={this.disableDragover.bind(this)}\n ondragend={this.disableDragover.bind(this)}\n ondrop={this.dropUpload.bind(this)}\n >\n {this.loading ? LoadingIndicator.component() : user.avatarUrl() ? icon('fas fa-pencil-alt') : icon('fas fa-plus-circle')}\n </a>\n <ul className=\"Dropdown-menu Menu\">{listItems(this.controlItems().toArray())}</ul>\n </div>\n );\n }\n\n /**\n * Get the items in the edit avatar dropdown menu.\n */\n controlItems(): ItemList {\n const items = new ItemList();\n\n items.add(\n 'upload',\n Button.component({\n icon: 'fas fa-upload',\n children: app.translator.trans('core.forum.user.avatar_upload_button'),\n onclick: this.openPicker.bind(this),\n })\n );\n\n items.add(\n 'remove',\n Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.user.avatar_remove_button'),\n onclick: this.remove.bind(this),\n })\n );\n\n return items;\n }\n\n /**\n * Enable dragover style\n */\n enableDragover(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = true;\n }\n\n /**\n * Disable dragover style\n */\n disableDragover(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n }\n\n /**\n * Upload avatar when file is dropped into dropzone.\n *\n * @param {Event} e\n */\n dropUpload(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n this.upload(e.dataTransfer.files[0]);\n }\n\n /**\n * If the user doesn't have an avatar, there's no point in showing the\n * controls dropdown, because only one option would be viable: uploading.\n * Thus, when the avatar editor's dropdown toggle button is clicked, we prompt\n * the user to upload an avatar immediately.\n */\n quickUpload(e: Event) {\n if (!this.props.user.avatarUrl()) {\n e.preventDefault();\n e.stopPropagation();\n this.openPicker();\n }\n }\n\n /**\n * Upload avatar using file picker\n */\n openPicker() {\n if (this.loading) return;\n\n // Create a hidden HTML input element and click on it so the user can select\n // an avatar file. Once they have, we will upload it via the API.\n const user = this.props.user;\n const $input = $('<input type=\"file\">');\n\n $input\n .appendTo('body')\n .hide()\n .click()\n .on('change', (e) => {\n this.upload($(e.target)[0].files[0]);\n });\n }\n\n /**\n * Upload avatar\n */\n upload(file: File) {\n if (this.loading) return;\n\n const user = this.props.user;\n const body = new FormData();\n body.append('avatar', file);\n\n this.loading = true;\n m.redraw();\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/users/${user.id()}/avatar`,\n serialize: (raw) => raw,\n body,\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n\n /**\n * Remove the user's avatar.\n */\n remove() {\n const user = this.props.user;\n\n this.loading = true;\n m.redraw();\n\n app.request({\n method: 'DELETE',\n url: `${app.forum.attribute('apiUrl')}/users/${user.id()}/avatar`,\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n\n /**\n * After a successful upload/removal, push the updated user data into the\n * store, and force a recomputation of the user's avatar color.\n */\n protected success(response: any) {\n app.store.pushPayload(response);\n delete this.props.user.avatarColor;\n\n this.loading = false;\n m.redraw();\n }\n\n /**\n * If avatar upload/removal fails, stop loading.\n */\n protected failure(response: any) {\n this.loading = false;\n m.redraw();\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\n\n/**\n * The `ChangeEmailModal` component shows a modal dialog which allows the user\n * to change their email address.\n */\nexport default class ChangeEmailModal extends Modal {\n /**\n * Whether or not the email has been changed successfully.\n */\n success = false;\n\n /**\n * The value of the email input.\n */\n email = m.prop(app.session.user.email());\n\n /**\n * The value of the password input.\n */\n password = m.prop('');\n\n className() {\n return 'ChangeEmailModal Modal--small';\n }\n\n title() {\n return app.translator.transText('core.forum.change_email.title');\n }\n\n content() {\n if (this.success) {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <p className=\"helpText\">\n {app.translator.trans('core.forum.change_email.confirmation_message', { email: <strong>{this.email()}</strong> })}\n </p>\n <div className=\"Form-group\">\n <Button className=\"Button Button--primary Button--block\" onclick={this.hide.bind(this)}>\n {app.translator.trans('core.forum.change_email.dismiss_button')}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <div className=\"Form-group\">\n <input\n type=\"email\"\n name=\"email\"\n className=\"FormControl\"\n placeholder={app.session.user.email()}\n bidi={this.email}\n disabled={this.loading}\n />\n </div>\n <div className=\"Form-group\">\n <input\n type=\"password\"\n name=\"password\"\n className=\"FormControl\"\n placeholder={app.translator.transText('core.forum.change_email.confirm_password_placeholder')}\n bidi={this.password}\n disabled={this.loading}\n />\n </div>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.change_email.submit_button'),\n })}\n </div>\n </div>\n </div>\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n // If the user hasn't actually entered a different email address, we don't\n // need to do anything. Woot!\n if (this.email() === app.session.user.email()) {\n this.hide();\n return;\n }\n\n this.loading = true;\n\n app.session.user\n .save(\n { email: this.email() },\n {\n errorHandler: this.onerror.bind(this),\n meta: { password: this.password() },\n }\n )\n .then(() => (this.success = true))\n .catch(() => {})\n .then(this.loaded.bind(this));\n }\n\n onerror(error) {\n if (error.status === 401) {\n error.alert.children = app.translator.trans('core.forum.change_email.incorrect_password_message');\n }\n\n super.onerror(error);\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\n\n/**\n * The `ChangePasswordModal` component shows a modal dialog which allows the\n * user to send themself a password reset email.\n */\nexport default class ChangePasswordModal extends Modal {\n className() {\n return 'ChangePasswordModal Modal--small';\n }\n\n title() {\n return app.translator.transText('core.forum.change_password.title');\n }\n\n content() {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <p className=\"helpText\">{app.translator.trans('core.forum.change_password.text')}</p>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.change_password.send_button'),\n })}\n </div>\n </div>\n </div>\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/forgot',\n body: { email: app.session.user.email() },\n }).then(this.hide.bind(this), this.loaded.bind(this));\n }\n}\n","import Post from './Post';\nimport PostUser from './PostUser';\nimport PostMeta from './PostMeta';\nimport PostEdited from './PostEdited';\n// import EditPostComposer from './EditPostComposer';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\nimport { Vnode } from 'mithril';\n\n/**\n * The `CommentPost` component displays a standard `comment`-typed post. This\n * includes a number of item lists (controls, header, and footer) surrounding\n * the post's HTML content.\n */\nexport default class CommentPost extends Post {\n /**\n * If the post has been hidden, then this flag determines whether or not its\n * content has been expanded.\n */\n revealContent: boolean = false;\n\n postUser!: Vnode<{}, PostUser>;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n // Create an instance of the component that displays the post's author so\n // that we can force the post to rerender when the user card is shown.\n this.postUser = <PostUser post={this.props.post} />;\n\n this.subtree.check(\n () => this.postUser.state?.cardVisible,\n () => this.revealContent,\n () => this.isEditing()\n );\n }\n\n content() {\n return super.content().concat([\n <header className=\"Post-header\">\n <ul>{listItems(this.headerItems().toArray())}</ul>\n </header>,\n <div className=\"Post-body\">\n {this.isEditing() ? <div className=\"Post-preview\" config={this.configPreview.bind(this)} /> : m.trust(this.props.post.contentHtml())}\n </div>,\n ]);\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n\n const contentHtml = this.isEditing() ? '' : this.props.post.contentHtml();\n\n // TODO: idk what this is supposed to be\n\n // If the post content has changed since the last render, we'll run through\n // all of the <script> tags in the content and evaluate them. This is\n // necessary because TextFormatter outputs them for e.g. syntax highlighting.\n if (vnode.contentHtml !== contentHtml) {\n this.$('.Post-body script').each(function () {\n eval.call(window, $(this).text());\n });\n }\n\n vnode.contentHtml = contentHtml;\n }\n\n isEditing() {\n return false; // TODO\n // return app.composer?.component instanceof EditPostComposer &&\n // app.composer.component.props.post === this.props.post;\n }\n\n attrs() {\n const post = this.props.post;\n const attrs = super.attrs();\n\n attrs.className = classNames(\n attrs.className,\n 'CommentPost',\n post.isHidden() && 'Post--hidden',\n post.isEdited() && 'Post--edited',\n this.revealContent && 'revealContent',\n this.isEditing() && 'editing'\n );\n\n return attrs;\n }\n\n // TODO change so it works\n configPreview(element, isInitialized, context) {\n if (isInitialized) return;\n\n // Every 50ms, if the composer content has changed, then update the post's\n // body with a preview.\n let preview;\n const updatePreview = () => {\n const content = app.composer.component.content();\n\n if (preview === content) return;\n\n preview = content;\n\n s9e.TextFormatter.preview(preview || '', element);\n };\n updatePreview();\n\n const updateInterval = setInterval(updatePreview, 50);\n context.onunload = () => clearInterval(updateInterval);\n }\n\n /**\n * Toggle the visibility of a hidden post's content.\n */\n toggleContent() {\n this.revealContent = !this.revealContent;\n }\n\n /**\n * Build an item list for the post's header.\n */\n headerItems(): ItemList {\n const items = new ItemList();\n const post = this.props.post;\n const props = { post };\n\n items.add('user', <PostUser post={this.props.post} />, 100);\n items.add('meta', <PostMeta {...props} />);\n\n if (post.isEdited() && !post.isHidden()) {\n items.add('edited', <PostEdited {...props} />);\n }\n\n // If the post is hidden, add a button that allows toggling the visibility\n // of the post's content.\n if (post.isHidden()) {\n items.add(\n 'toggle',\n Button.component({\n className: 'Button Button--default Button--more',\n icon: 'fas fa-ellipsis-h',\n onclick: this.toggleContent.bind(this),\n })\n );\n }\n\n return items;\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport { DiscussionProp } from '../../common/concerns/ComponentProps';\n\n/**\n * The `DiscussionHero` component displays the hero on a discussion page.\n */\nexport default class DiscussionHero<T extends DiscussionProp = DiscussionProp> extends Component<T> {\n view() {\n return (\n <header className=\"Hero DiscussionHero\">\n <div className=\"container\">\n <ul className=\"DiscussionHero-items\">{listItems(this.items().toArray())}</ul>\n </div>\n </header>\n );\n }\n\n /**\n * Build an item list for the contents of the discussion hero.\n *\n * @return {ItemList}\n */\n items() {\n const items = new ItemList();\n const discussion = this.props.discussion;\n const badges = discussion.badges().toArray();\n\n if (badges.length) {\n items.add('badges', <ul className=\"DiscussionHero-badges badges\">{listItems(badges)}</ul>, 10);\n }\n\n items.add('title', <h2 className=\"DiscussionHero-title\">{discussion.title()}</h2>);\n\n return items;\n }\n}\n","import Component, { ComponentProps } from '../../common/Component';\nimport DiscussionListItem from './DiscussionListItem';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Placeholder from '../../common/components/Placeholder';\nimport Discussion from '../../common/models/Discussion';\n\nexport interface DiscussionListProps extends ComponentProps {\n /**\n * A map of parameters used to construct a refined parameter object\n * to send along in the API request to get discussion results.\n */\n params: any;\n}\n\n/**\n * The `DiscussionList` component displays a list of discussions.\n */\nexport default class DiscussionList<T extends DiscussionListProps = DiscussionListProps> extends Component<T> {\n /**\n * Whether or not discussion results are loading.\n */\n loading = true;\n\n /**\n * Whether or not there are more results that can be loaded.\n */\n moreResults = false;\n\n /**\n * The discussions in the discussion list.\n */\n discussions: Discussion[] = [];\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.refresh();\n }\n\n view() {\n const params = this.props.params;\n let loading;\n\n if (this.loading) {\n loading = LoadingIndicator.component();\n } else if (this.moreResults) {\n loading = Button.component({\n children: app.translator.trans('core.forum.discussion_list.load_more_button'),\n className: 'Button',\n onclick: this.loadMore.bind(this),\n });\n }\n\n if (this.discussions.length === 0 && !this.loading) {\n const text = app.translator.trans('core.forum.discussion_list.empty_text');\n return <div className=\"DiscussionList\">{Placeholder.component({ text })}</div>;\n }\n\n return (\n <div className={'DiscussionList' + (this.props.params.q ? ' DiscussionList--searchResults' : '')}>\n <ul className=\"DiscussionList-discussions\">\n {this.discussions.map((discussion) => {\n return (\n <li key={discussion.id()} data-id={discussion.id()}>\n {DiscussionListItem.component({ discussion, params })}\n </li>\n );\n })}\n </ul>\n <div className=\"DiscussionList-loadMore\">{loading}</div>\n </div>\n );\n }\n\n /**\n * Get the parameters that should be passed in the API request to get\n * discussion results.\n *\n * @api\n */\n requestParams(): any {\n const params = { include: ['user', 'lastPostedUser'], filter: {} };\n\n params.sort = this.sortMap()[this.props.params.sort];\n\n if (this.props.params.q) {\n params.filter.q = this.props.params.q;\n\n params.include.push('mostRelevantPost', 'mostRelevantPost.user');\n }\n\n return params;\n }\n\n /**\n * Get a map of sort keys (which appear in the URL, and are used for\n * translation) to the API sort value that they represent.\n */\n sortMap() {\n const map: any = {};\n\n if (this.props.params.q) {\n map.relevance = '';\n }\n map.latest = '-lastPostedAt';\n map.top = '-commentCount';\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n\n return map;\n }\n\n /**\n * Clear and reload the discussion list.\n */\n public refresh(clear = true) {\n if (clear) {\n this.loading = true;\n this.discussions = [];\n }\n\n return this.loadResults().then(\n (results) => {\n this.discussions = [];\n this.parseResults(results);\n },\n () => {\n this.loading = false;\n m.redraw();\n }\n );\n }\n\n /**\n * Load a new page of discussion results.\n *\n * @param offset The index to start the page at.\n */\n loadResults(offset?: number): Promise<Discussion[]> {\n const preloadedDiscussions = app.preloadedApiDocument();\n\n if (preloadedDiscussions) {\n return Promise.resolve(preloadedDiscussions);\n }\n\n const params = this.requestParams();\n params.page = { offset };\n params.include = params.include.join(',');\n\n return app.store.find('discussions', params);\n }\n\n /**\n * Load the next page of discussion results.\n */\n public loadMore() {\n this.loading = true;\n\n this.loadResults(this.discussions.length).then(this.parseResults.bind(this));\n }\n\n /**\n * Parse results and append them to the discussion list.\n */\n parseResults(results: Discussion[]): Discussion[] {\n [].push.apply(this.discussions, results);\n\n this.loading = false;\n this.moreResults = !!results.payload.links.next;\n\n m.redraw();\n\n return results;\n }\n\n /**\n * Remove a discussion from the list if it is present.\n */\n public removeDiscussion(discussion: Discussion) {\n const index = this.discussions.indexOf(discussion);\n\n if (index !== -1) {\n this.discussions.splice(index, 1);\n }\n }\n\n /**\n * Add a discussion to the top of the list.\n */\n public addDiscussion(discussion: Discussion) {\n this.discussions.unshift(discussion);\n }\n}\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport listItems from '../../common/helpers/listItems';\nimport highlight from '../../common/helpers/highlight';\nimport icon from '../../common/helpers/icon';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport Dropdown from '../../common/components/Dropdown';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport LinkButton from '../../common/components/LinkButton';\nimport abbreviateNumber from '../../common/utils/abbreviateNumber';\nimport TerminalPost from './TerminalPost';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport { DiscussionProp } from '../../common/concerns/ComponentProps';\n\nexport interface DiscussionListItemProps extends DiscussionProp {\n params: any;\n}\n\n/**\n * The `DiscussionListItem` component shows a single discussion in the\n * discussion list.\n */\nexport default class DiscussionListItem<T extends DiscussionListItemProps = DiscussionListItemProps> extends Component<T> {\n /**\n * Set up a subtree retainer so that the discussion will not be redrawn\n * unless new data comes in.\n */\n subtree: SubtreeRetainer;\n\n highlightRegExp?: RegExp;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.subtree = new SubtreeRetainer(\n () => this.props.discussion.freshness,\n () => {\n const time = app.session.user && app.session.user.markedAllAsReadAt();\n return time && time.getTime();\n },\n () => this.active()\n );\n }\n\n attrs() {\n return {\n className: classNames('DiscussionListItem', this.active() && 'active', this.props.discussion.isHidden() && 'DiscussionListItem--hidden'),\n };\n }\n\n view() {\n const discussion = this.props.discussion;\n const user = discussion.user();\n const isUnread = discussion.isUnread();\n const isRead = discussion.isRead();\n const showUnread = !this.showRepliesCount() && isUnread;\n let jumpTo = 0;\n const controls = DiscussionControls.controls(discussion, this).toArray();\n const attrs = this.attrs();\n\n if (this.props.params.q) {\n const post = discussion.mostRelevantPost();\n if (post) {\n jumpTo = post.number();\n }\n\n const phrase = this.props.params.q;\n this.highlightRegExp = new RegExp(phrase + '|' + phrase.trim().replace(/\\s+/g, '|'), 'gi');\n } else {\n jumpTo = Math.min(discussion.lastPostNumber(), (discussion.lastReadPostNumber() || 0) + 1);\n }\n\n return (\n <div {...attrs}>\n {controls.length\n ? Dropdown.component({\n icon: 'fas fa-ellipsis-v',\n children: controls,\n className: 'DiscussionListItem-controls',\n buttonClassName: 'Button Button--icon Button--flat Slidable-underneath Slidable-underneath--right',\n })\n : ''}\n\n <a\n className={'Slidable-underneath Slidable-underneath--left Slidable-underneath--elastic' + (isUnread ? '' : ' disabled')}\n onclick={this.markAsRead.bind(this)}\n >\n {icon('fas fa-check')}\n </a>\n\n <div className={classNames('DiscussionListItem-content', 'Slidable-content', isUnread && 'unread', isRead && 'read')}>\n <LinkButton\n href={user ? app.route.user(user) : '#'}\n className=\"DiscussionListItem-author\"\n title={app.translator.transText('core.forum.discussion_list.started_text', {\n user: user,\n ago: humanTime(discussion.createdAt()),\n })}\n oncreate={(vnode) => $(vnode.dom).tooltip({ placement: 'right' })}\n >\n {avatar(user, { title: '' })}\n </LinkButton>\n\n <ul className=\"DiscussionListItem-badges badges\">{listItems(discussion.badges().toArray())}</ul>\n\n <LinkButton href={app.route.discussion(discussion, jumpTo)} className=\"DiscussionListItem-main\">\n <h3 className=\"DiscussionListItem-title\">{highlight(discussion.title(), this.highlightRegExp)}</h3>\n <ul className=\"DiscussionListItem-info\">{listItems(this.infoItems().toArray())}</ul>\n </LinkButton>\n\n <span\n className=\"DiscussionListItem-count\"\n onclick={this.markAsRead.bind(this)}\n title={showUnread ? app.translator.trans('core.forum.discussion_list.mark_as_read_tooltip') : ''}\n >\n {abbreviateNumber(discussion[showUnread ? 'unreadCount' : 'replyCount']())}\n </span>\n </div>\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // If we're on a touch device, set up the discussion row to be slidable.\n // This allows the user to drag the row to either side of the screen to\n // reveal controls.\n if ('ontouchstart' in window) {\n const slidableInstance = slidable(this.$().addClass('Slidable'));\n\n this.$('.DiscussionListItem-controls').on('hidden.bs.dropdown', () => slidableInstance.reset());\n }\n }\n\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n\n return this.subtree.update();\n }\n\n /**\n * Determine whether or not the discussion is currently being viewed.\n */\n active(): boolean {\n const idParam = m.route.param('id');\n\n return !!idParam && idParam.split('-')[0] === this.props.discussion.id();\n }\n\n /**\n * Determine whether or not information about who started the discussion\n * should be displayed instead of information about the most recent reply to\n * the discussion.\n */\n showFirstPost(): boolean {\n return ['newest', 'oldest'].indexOf(this.props.params.sort) !== -1;\n }\n\n /**\n * Determine whether or not the number of replies should be shown instead of\n * the number of unread posts.\n */\n showRepliesCount(): boolean {\n return this.props.params.sort === 'replies';\n }\n\n /**\n * Mark the discussion as read.\n */\n markAsRead() {\n const discussion = this.props.discussion;\n\n if (discussion.isUnread()) {\n discussion.save({ lastReadPostNumber: discussion.lastPostNumber() });\n m.redraw();\n }\n }\n\n /**\n * Build an item list of info for a discussion listing. By default this is\n * just the first/last post indicator.\n */\n infoItems(): ItemList {\n const items = new ItemList();\n\n if (this.props.params.q) {\n const post = this.props.discussion.mostRelevantPost() || this.props.discussion.firstPost();\n\n if (post && post.contentType() === 'comment') {\n const excerpt = highlight(post.contentPlain(), this.highlightRegExp, 175);\n items.add('excerpt', excerpt, -100);\n }\n } else {\n items.add(\n 'terminalPost',\n TerminalPost.component({\n discussion: this.props.discussion,\n lastPost: !this.showFirstPost(),\n })\n );\n }\n\n return items;\n }\n}\n","import Page from './Page';\nimport ItemList from '../../common/utils/ItemList';\nimport DiscussionHero from './DiscussionHero';\nimport PostStream from './PostStream';\nimport PostStreamScrubber from './PostStreamScrubber';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport SplitDropdown from '../../common/components/SplitDropdown';\nimport listItems from '../../common/helpers/listItems';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport Discussion from '../../common/models/Discussion';\nimport Post from '../../common/models/Post';\n\n/**\n * The `DiscussionPage` component displays a whole discussion page, including\n * the discussion list pane, the hero, the posts, and the sidebar.\n */\nexport default class DiscussionPage extends Page {\n /**\n * The discussion that is being viewed.\n */\n discussion: Discussion | null = null;\n\n /**\n * The number of the first post that is currently visible in the viewport.\n */\n near: number | null = null;\n\n stream!: PostStream;\n scrubber!: PostStreamScrubber;\n\n includedPosts: Post[] = [];\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.refresh();\n\n // If the discussion list has been loaded, then we'll enable the pane (and\n // hide it by default). Also, if we've just come from another discussion\n // page, then we don't want Mithril to redraw the whole page – if it did,\n // then the pane would which would be slow and would cause problems with\n // event handlers.\n if (app.cache.discussionList) {\n // TODO app pane\n // app.pane.enable();\n // app.pane.hide();\n }\n\n app.history.push('discussion');\n\n this.bodyClass = 'App--discussion';\n }\n\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n\n // If we have routed to the same discussion as we were viewing previously,\n // cancel the unloading of this controller and instead prompt the post\n // stream to jump to the new 'near' param.\n if (this.discussion) {\n const idParam = m.route.param('id');\n\n if (idParam && idParam.split('-')[0] === this.discussion.id()) {\n const near = m.route.param('near') || '1';\n\n if (near !== String(this.near)) {\n this.stream.goToNumber(near);\n }\n\n this.near = null;\n\n return false;\n }\n }\n\n // If we are indeed navigating away from this discussion, then disable the\n // discussion list pane. Also, if we're composing a reply to this\n // discussion, minimize the composer – unless it's empty, in which case\n // we'll just close it.\n // TODO pane & composer\n // app.pane.disable();\n\n // if (app.composingReplyTo(this.discussion) && !app.composer.component.content()) {\n // app.composer.hide();\n // } else {\n // app.composer.minimize();\n // }\n }\n\n view() {\n const discussion = this.discussion;\n\n // Set up the post stream for this discussion, along with the first page of\n // posts we want to display. Tell the stream to scroll down and highlight\n // the specific post that was routed to.\n const postStream = (\n <PostStream\n discussion={discussion}\n includedPosts={this.includedPosts}\n oninit={(vnode) => {\n this.stream = vnode.state;\n this.scrubber.stream = vnode.state;\n\n this.stream.on('positionChanged', this.positionChanged.bind(this));\n this.stream.goToNumber(m.route.param('near') || (this.includedPosts[0] && this.includedPosts[0].number()), true);\n }}\n />\n );\n\n return (\n <div className=\"DiscussionPage\">\n {app.cache.discussionList ? (\n <div className=\"DiscussionPage-list\" oncreate={this.oncreatePane.bind(this)} onbeforeupdate={() => false}>\n {!$('.App-navigation').is(':visible') ? app.cache.discussionList.render() : ''}\n </div>\n ) : (\n ''\n )}\n\n <div className=\"DiscussionPage-discussion\">\n {discussion\n ? [\n DiscussionHero.component({ discussion }),\n <div className=\"container\">\n <nav className=\"DiscussionPage-nav\">\n <ul>{listItems(this.sidebarItems().toArray())}</ul>\n </nav>\n <div className=\"DiscussionPage-stream\">{postStream}</div>\n </div>,\n ]\n : LoadingIndicator.component({ className: 'LoadingIndicator--block' })}\n </div>\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n if (this.discussion) {\n app.setTitle(this.discussion.title());\n }\n }\n\n /**\n * Clear and reload the discussion.\n */\n refresh() {\n this.near = Number(m.route.param('near') || 0);\n this.discussion = null;\n\n const preloadedDiscussion = app.preloadedApiDocument();\n if (preloadedDiscussion) {\n // We must wrap this in a setTimeout because if we are mounting this\n // component for the first time on page load, then any calls to m.redraw\n // will be ineffective and thus any configs (scroll code) will be run\n // before stuff is drawn to the page.\n setTimeout(this.show.bind(this, preloadedDiscussion as Discussion), 0);\n } else {\n const params = this.requestParams();\n\n app.store.find('discussions', m.route.param('id').split('-')[0], params).then(this.show.bind(this));\n }\n\n m.redraw();\n }\n\n /**\n * Get the parameters that should be passed in the API request to get the\n * discussion.\n */\n requestParams(): any {\n return {\n page: { near: this.near },\n };\n }\n\n /**\n * Initialize the component to display the given discussion.\n */\n show(discussion: Discussion) {\n this.discussion = discussion;\n\n app.history.push('discussion', discussion.title());\n app.setTitleCount(0);\n\n // When the API responds with a discussion, it will also include a number of\n // posts. Some of these posts are included because they are on the first\n // page of posts we want to display (determined by the `near` parameter) –\n // others may be included because due to other relationships introduced by\n // extensions. We need to distinguish the two so we don't end up displaying\n // the wrong posts. We do so by filtering out the posts that don't have\n // the 'discussion' relationship linked, then sorting and splicing.\n if (discussion.payload && discussion.payload.included) {\n const discussionId = discussion.id();\n\n this.includedPosts = discussion.payload.included\n .filter(\n (record) =>\n record.type === 'posts' &&\n record.relationships &&\n record.relationships.discussion &&\n record.relationships.discussion.data.id === discussionId\n )\n .map((record) => app.store.getById('posts', record.id))\n .sort((a, b) => a.id() - b.id())\n .slice(0, 20);\n }\n\n m.redraw();\n }\n\n /**\n * Configure the discussion list pane.\n */\n oncreatePane(vnode) {\n const $list = $(vnode.dom);\n\n // When the mouse enters and leaves the discussions pane, we want to show\n // and hide the pane respectively. We also create a 10px 'hot edge' on the\n // left of the screen to activate the pane.\n\n // TODO pane\n // const pane = app.pane;\n // $list.hover(pane.show.bind(pane), pane.onmouseleave.bind(pane));\n //\n // const hotEdge = e => {\n // if (e.pageX < 10) pane.show();\n // };\n // $(document).on('mousemove', hotEdge);\n // vnode.dom.onunload = () => $(document).off('mousemove', hotEdge);\n\n // If the discussion we are viewing is listed in the discussion list, then\n // we will make sure it is visible in the viewport – if it is not we will\n // scroll the list down to it.\n const $discussion = $list.find('.DiscussionListItem.active');\n if ($discussion.length) {\n const listTop = $list.offset().top;\n const listBottom = listTop + $list.outerHeight();\n const discussionTop = $discussion.offset().top;\n const discussionBottom = discussionTop + $discussion.outerHeight();\n\n if (discussionTop < listTop || discussionBottom > listBottom) {\n $list.scrollTop($list.scrollTop() - listTop + discussionTop);\n }\n }\n }\n\n /**\n * Build an item list for the contents of the sidebar.\n */\n sidebarItems(): ItemList {\n const items = new ItemList();\n\n items.add(\n 'controls',\n SplitDropdown.component({\n children: DiscussionControls.controls(this.discussion, this).toArray(),\n icon: 'fas fa-ellipsis-v',\n className: 'App-primaryControl',\n buttonClassName: 'Button--primary',\n })\n );\n\n items.add('scrubber', <PostStreamScrubber oninit={(vnode) => (this.scrubber = vnode.state)} className=\"App-titleControl\" />, -100);\n\n return items;\n }\n\n /**\n * When the posts that are visible in the post stream change (i.e. the user\n * scrolls up or down), then we update the URL and mark the posts as read.\n */\n positionChanged(startNumber: number, endNumber: number) {\n const discussion = this.discussion;\n\n if (!discussion) return;\n\n // Construct a URL to this discussion with the updated position, then\n // replace it into the window's history and our own history stack.\n const url = app.route.discussion(discussion, (this.near = startNumber));\n\n m.route.set(url, true, { replace: true });\n\n app.history.push('discussion', discussion.title());\n\n // If the user hasn't read past here before, then we'll update their read\n // state and redraw.\n if (app.session.user && endNumber > (discussion.lastReadPostNumber() || 0)) {\n discussion.save({ lastReadPostNumber: endNumber });\n m.redraw();\n }\n }\n}\n","import EventPost from './EventPost';\n\n/**\n * The `DiscussionRenamedPost` component displays a discussion event post\n * indicating that the discussion has been renamed.\n */\nexport default class DiscussionRenamedPost extends EventPost {\n icon() {\n return 'fas fa-pencil-alt';\n }\n\n description(data) {\n const renamed = app.translator.trans('core.forum.post_stream.discussion_renamed_text', data);\n const oldName = app.translator.transText('core.forum.post_stream.discussion_renamed_old_tooltip', data);\n\n return <span title={oldName}>{renamed}</span>;\n }\n\n descriptionData() {\n const post = this.props.post;\n const oldTitle = post.content()[0];\n const newTitle = post.content()[1];\n\n return {\n old: oldTitle,\n new: <strong className=\"DiscussionRenamedPost-new\">{newTitle}</strong>,\n };\n }\n}\n","import highlight from '../../common/helpers/highlight';\nimport LinkButton from '../../common/components/LinkButton';\nimport SearchSource from './SearchSource';\nimport Discussion from '../../common/models/Discussion';\n\n/**\n * The `DiscussionsSearchSource` finds and displays discussion search results in\n * the search dropdown.\n */\nexport default class DiscussionsSearchSource extends SearchSource {\n protected results: { [key: string]: Discussion[] } = {};\n\n search(query: string) {\n query = query.toLowerCase();\n\n this.results[query] = [];\n\n const params = {\n filter: { q: query },\n page: { limit: 3 },\n include: 'mostRelevantPost',\n };\n\n return app.store.find<Discussion>('discussions', params).then((results) => (this.results[query] = results));\n }\n\n view(query: string) {\n query = query.toLowerCase();\n\n const results = this.results[query] || [];\n\n return [\n <li className=\"Dropdown-header\">{app.translator.trans('core.forum.search.discussions_heading')}</li>,\n <li>\n {LinkButton.component({\n icon: 'fas fa-search',\n children: app.translator.trans('core.forum.search.all_discussions_button', { query }),\n href: app.route('index', { q: query }),\n })}\n </li>,\n results.map((discussion) => {\n const mostRelevantPost = discussion.mostRelevantPost();\n\n return (\n <li className=\"DiscussionSearchResult\" data-index={'discussions' + discussion.id()}>\n <m.route.Link href={app.route.discussion(discussion, mostRelevantPost && mostRelevantPost.number())}>\n <div className=\"DiscussionSearchResult-title\">{highlight(discussion.title(), query)}</div>\n {mostRelevantPost ? (\n <div className=\"DiscussionSearchResult-excerpt\">{highlight(mostRelevantPost.contentPlain(), query, 100)}</div>\n ) : (\n ''\n )}\n </m.route.Link>\n </li>\n );\n }),\n ];\n }\n}\n","import UserPage from './UserPage';\nimport DiscussionList from './DiscussionList';\n\n/**\n * The `DiscussionsUserPage` component shows a discussion list inside of a user\n * page.\n */\nexport default class DiscussionsUserPage extends UserPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n return (\n <div className=\"DiscussionsUserPage\">\n {DiscussionList.component({\n params: {\n q: `author:${this.user.username()}`,\n sort: 'newest',\n },\n })}\n </div>\n );\n }\n}\n","import Stream from 'mithril/stream';\n\nimport Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\nimport GroupBadge from '../../common/components/GroupBadge';\nimport Group from '../../common/models/Group';\nimport ItemList from '../../common/utils/ItemList';\n\nimport User from '../../common/models/User';\nimport { UserProp } from '../../common/concerns/ComponentProps';\n\n/**\n * The `EditUserModal` component displays a modal dialog with a login form.\n */\nexport default class EditUserModal extends Modal<UserProp> {\n username!: Stream<string>;\n email!: Stream<string>;\n isEmailConfirmed!: Stream<boolean>;\n setPassword!: Stream<boolean>;\n password!: Stream<string>;\n\n groups: { [key: string]: Stream<boolean> } = {};\n\n oninit(vnode) {\n super.oninit(vnode);\n\n const user: User = this.props.user;\n\n this.username = m.prop(user.username() || '');\n this.email = m.prop(user.email() || '');\n this.isEmailConfirmed = m.prop(user.isEmailConfirmed() || false);\n this.setPassword = m.prop(false as boolean);\n this.password = m.prop(user.password() || '');\n this.groups = {};\n\n app.store\n .all<Group>('groups')\n .filter((group) => [Group.GUEST_ID, Group.MEMBER_ID].indexOf(group.id()) === -1)\n .forEach((group) => (this.groups[group.id()] = m.prop(user.groups().indexOf(group) !== -1)));\n }\n\n className() {\n return 'EditUserModal Modal--small';\n }\n\n title() {\n return app.translator.transText('core.forum.edit_user.title');\n }\n\n content() {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form\">{this.fields().toArray()}</div>\n </div>\n );\n }\n\n fields() {\n const items = new ItemList();\n\n items.add(\n 'username',\n <div className=\"Form-group\">\n <label>{app.translator.transText('core.forum.edit_user.username_heading')}</label>\n <input className=\"FormControl\" placeholder={app.translator.transText('core.forum.edit_user.username_label')} bidi={this.username} />\n </div>,\n 40\n );\n\n if (app.session.user !== this.props.user) {\n items.add(\n 'email',\n <div className=\"Form-group\">\n <label>{app.translator.trans('core.forum.edit_user.email_heading')}</label>\n <div>\n <input className=\"FormControl\" placeholder={app.translator.transText('core.forum.edit_user.email_label')} bidi={this.email} />\n </div>\n {!this.isEmailConfirmed() && (\n <div>\n {Button.component({\n className: 'Button Button--block',\n children: app.translator.trans('core.forum.edit_user.activate_button'),\n loading: this.loading,\n onclick: this.activate.bind(this),\n })}\n </div>\n )}\n </div>,\n 30\n );\n\n items.add(\n 'password',\n <div className=\"Form-group\">\n <label>{app.translator.trans('core.forum.edit_user.password_heading')}</label>\n <div>\n <label className=\"checkbox\">\n <input\n type=\"checkbox\"\n onchange={(e) => {\n this.setPassword(e.target.checked);\n m.redraw();\n if (e.target.checked) this.$('[name=password]').select();\n }}\n />\n {app.translator.trans('core.forum.edit_user.set_password_label')}\n </label>\n {this.setPassword() && (\n <input\n className=\"FormControl\"\n type=\"password\"\n name=\"password\"\n placeholder={app.translator.transText('core.forum.edit_user.password_label')}\n bidi={this.password}\n />\n )}\n </div>\n </div>,\n 20\n );\n }\n\n items.add(\n 'groups',\n <div className=\"Form-group EditUserModal-groups\">\n <label>{app.translator.trans('core.forum.edit_user.groups_heading')}</label>\n <div>\n {Object.keys(this.groups)\n .map((id) => app.store.getById<Group>('groups', id))\n .map((group) => (\n <label className=\"checkbox\">\n <input\n type=\"checkbox\"\n bidi={this.groups[group.id()]}\n disabled={this.props.user.id() === '1' && group.id() === Group.ADMINISTRATOR_ID}\n />\n <GroupBadge group={group} label={''} /> {group.nameSingular()}\n </label>\n ))}\n </div>\n </div>,\n 10\n );\n\n items.add(\n 'submit',\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.edit_user.submit_button'),\n })}\n </div>,\n -10\n );\n\n return items;\n }\n\n activate() {\n this.loading = true;\n const data = {\n username: this.username(),\n isEmailConfirmed: true,\n };\n\n return this.props.user\n .save(data, { errorHandler: this.onerror.bind(this) })\n .then(() => {\n this.isEmailConfirmed(true);\n this.loading = false;\n m.redraw();\n })\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n data() {\n const groups = Object.keys(this.groups)\n .filter((id) => this.groups[id]())\n .map((id) => app.store.getById<Group>('groups', id));\n\n const data: any = {\n username: this.username(),\n relationships: { groups },\n };\n\n if (app.session.user !== this.props.user) {\n data.email = this.email();\n }\n\n if (this.setPassword()) {\n data.password = this.password();\n }\n\n return data;\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n this.props.user\n .save(this.data(), { errorHandler: this.onerror.bind(this) })\n .then(this.hide.bind(this))\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\n","import Post from './Post';\nimport { ucfirst } from '../../common/utils/string';\nimport usernameHelper from '../../common/helpers/username';\nimport icon from '../../common/helpers/icon';\n\ninterface DescriptionData {\n [key: string]: any;\n}\n\n/**\n * The `EventPost` component displays a post which indicating a discussion\n * event, like a discussion being renamed or stickied. Subclasses must implement\n * the `icon` and `description` methods.\n */\nexport default abstract class EventPost extends Post {\n attrs() {\n const attrs = super.attrs();\n\n attrs.className = classNames(attrs.className, 'EventPost', ucfirst(this.props.post.contentType()) + 'Post');\n\n return attrs;\n }\n\n content() {\n const user = this.props.post.user();\n const username = usernameHelper(user);\n const data: DescriptionData = Object.assign(this.descriptionData(), {\n user,\n username: user ? (\n <m.route.Link className=\"EventPost-user\" href={app.route.user(user)}>\n {username}\n </m.route.Link>\n ) : (\n username\n ),\n });\n\n return super\n .content()\n .concat([icon(this.icon(), { className: 'EventPost-icon' }), <div class=\"EventPost-info\">{this.description(data)}</div>]);\n }\n\n /**\n * Get the name of the event icon.\n */\n abstract icon(): string;\n\n /**\n * Get the translation data for the description of the event.\n */\n abstract descriptionData(): DescriptionData;\n\n /**\n * Get the description text for the event.\n *\n * @return The description to render in the DOM\n */\n description(data: DescriptionData): any {\n return app.translator.transChoice(this.descriptionKey(), data.count, data);\n }\n\n /**\n * Get the translation key for the description of the event.\n */\n descriptionKey(): string {\n return '';\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `HeaderPrimary` component displays primary header controls. On the\n * default skin, these are shown just to the right of the forum title.\n */\nexport default class HeaderPrimary extends Component {\n view() {\n return <ul className=\"Header-controls\">{listItems(this.items().toArray())}</ul>;\n }\n\n /**\n * Build an item list for the controls.\n */\n items(): ItemList {\n return new ItemList();\n }\n}\n","import { Vnode } from 'mithril';\n\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport LogInModal from './LogInModal';\nimport SignUpModal from './SignUpModal';\nimport SessionDropdown from './SessionDropdown';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport NotificationsDropdown from './NotificationsDropdown';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\nimport Search from './Search';\n\n/**\n * The `HeaderSecondary` component displays secondary header controls, such as\n * the search box and the user menu. On the default skin, these are shown on the\n * right side of the header.\n */\nexport default class HeaderSecondary extends Component {\n view() {\n return <ul className=\"Header-controls\">{listItems(this.items().toArray())}</ul>;\n }\n\n /**\n * Build an item list for the controls.\n */\n items(): ItemList {\n const items = new ItemList();\n\n items.add('search', Search.component(), 30);\n\n if (app.forum.attribute('showLanguageSelector') && Object.keys(app.data.locales).length > 1) {\n const locales: Vnode<any, any>[] = [];\n\n for (const locale in app.data.locales) {\n if (!app.data.locales.hasOwnProperty(locale)) continue;\n\n locales.push(\n Button.component({\n active: app.data.locale === locale,\n children: app.data.locales[locale],\n icon: app.data.locale === locale ? 'fas fa-check' : true,\n onclick: () => {\n if (app.session.user) {\n app.session.user.savePreferences({ locale }).then(() => window.location.reload());\n } else {\n document.cookie = `locale=${locale}; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT`;\n window.location.reload();\n }\n },\n })\n );\n }\n\n items.add(\n 'locale',\n SelectDropdown.component({\n children: locales,\n buttonClassName: 'Button Button--link',\n }),\n 20\n );\n }\n\n if (app.session.user) {\n items.add('notifications', <NotificationsDropdown />, 10);\n items.add('session', <SessionDropdown />, 0);\n } else {\n if (app.forum.attribute('allowSignUp')) {\n items.add(\n 'signUp',\n Button.component({\n children: app.translator.trans('core.forum.header.sign_up_link'),\n className: 'Button Button--link',\n onclick: () => app.modal.show(SignUpModal),\n }),\n 10\n );\n }\n ``;\n\n items.add(\n 'logIn',\n Button.component({\n children: app.translator.trans('core.forum.header.log_in_link'),\n className: 'Button Button--link',\n onclick: () => app.modal.show(LogInModal),\n }),\n 0\n );\n }\n\n return items;\n }\n}\n","import { Params } from 'mithril';\n\nimport { extend } from '../../common/extend';\nimport listItems from '../../common/helpers/listItems';\nimport Discussion from '../../common/models/Discussion';\nimport ItemList from '../../common/utils/ItemList';\n\nimport Button from '../../common/components/Button';\nimport Dropdown from '../../common/components/Dropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport SelectDropdown from '../../common/components/SelectDropdown';\n// import DiscussionComposer from './DiscussionComposer';\nimport DiscussionList from './DiscussionList';\nimport DiscussionPage from './DiscussionPage';\nimport LogInModal from './LogInModal';\nimport Page from './Page';\nimport WelcomeHero from './WelcomeHero';\n\n/**\n * The `IndexPage` component displays the index page, including the welcome\n * hero, the sidebar, and the discussion list.\n */\nexport default class IndexPage extends Page {\n private lastDiscussion?: Discussion;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n // If the user is returning from a discussion page, then take note of which\n // discussion they have just visited. After the view is rendered, we will\n // scroll down so that this discussion is in view.\n if (app.previous instanceof DiscussionPage) {\n this.lastDiscussion = app.previous.discussion;\n }\n\n // If the user is coming from the discussion list, then they have either\n // just switched one of the parameters (filter, sort, search) or they\n // probably want to refresh the results. We will clear the discussion list\n // cache so that results are reloaded.\n if (app.previous instanceof IndexPage) {\n app.cache.discussionList = null;\n }\n\n const params = this.params();\n\n if (app.cache.discussionList) {\n // Compare the requested parameters (sort, search query) to the ones that\n // are currently present in the cached discussion list. If they differ, we\n // will clear the cache and set up a new discussion list component with\n // the new parameters.\n Object.keys(params).some((key) => {\n if (app.cache.discussionList!.props.params[key] !== params[key]) {\n app.cache.discussionList = null;\n return true;\n }\n });\n }\n\n if (!app.cache.discussionList) {\n app.cache.discussionList = new DiscussionList({ params, oninit: (vnode) => (app.cache.discussionList = vnode.state) });\n }\n\n app.history.push('index', app.translator.transText('core.forum.header.back_to_index_tooltip'));\n\n this.bodyClass = 'App--index';\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n // Save the scroll position so we can restore it when we return to the\n // discussion list.\n app.cache.scrollTop = $(window).scrollTop();\n }\n\n view() {\n if (!app.cache.discussionList) return;\n\n const discussionList = app.cache.discussionList.render();\n\n return (\n <div className=\"IndexPage\">\n {this.hero()}\n <div className=\"container\">\n <div className=\"sideNavContainer\">\n <nav className=\"IndexPage-nav sideNav\">\n <ul>{listItems(this.sidebarItems().toArray())}</ul>\n </nav>\n <div className=\"IndexPage-results sideNavOffset\">\n <div className=\"IndexPage-toolbar\">\n <ul className=\"IndexPage-toolbar-view\">{listItems(this.viewItems().toArray())}</ul>\n <ul className=\"IndexPage-toolbar-action\">{listItems(this.actionItems().toArray())}</ul>\n </div>\n {discussionList}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n const $app = $('#app');\n\n extend(vnode.dom, 'onunload', () => $app.css('min-height', ''));\n\n app.setTitle('');\n app.setTitleCount(0);\n\n // Work out the difference between the height of this hero and that of the\n // previous hero. Maintain the same scroll position relative to the bottom\n // of the hero so that the sidebar doesn't jump around.\n const oldHeroHeight = app.cache.heroHeight;\n const heroHeight = (app.cache.heroHeight = this.$('.Hero').outerHeight() || 0);\n const scrollTop = app.cache.scrollTop;\n\n $app.css('min-height', $(window).height() + heroHeight);\n\n // Scroll to the remembered position. We do this after a short delay so that\n // it happens after the browser has done its own \"back button\" scrolling,\n // which isn't right. https://github.com/flarum/core/issues/835\n const scroll = () => $(window).scrollTop(scrollTop - oldHeroHeight + heroHeight);\n scroll();\n setTimeout(scroll, 1);\n\n // If we've just returned from a discussion page, then the constructor will\n // have set the `lastDiscussion` property. If this is the case, we want to\n // scroll down to that discussion so that it's in view.\n if (this.lastDiscussion) {\n const $discussion = this.$(`.DiscussionListItem[data-id=\"${this.lastDiscussion.id()}\"]`);\n\n if ($discussion.length) {\n const indexTop = $('#header').outerHeight();\n const indexBottom = $(window).height();\n const discussionTop = $discussion.offset().top;\n const discussionBottom = discussionTop + $discussion.outerHeight();\n\n if (discussionTop < scrollTop + indexTop || discussionBottom > scrollTop + indexBottom) {\n $(window).scrollTop(discussionTop - indexTop);\n }\n }\n }\n }\n\n /**\n * Get the component to display as the hero.\n */\n hero() {\n return <WelcomeHero />;\n }\n\n /**\n * Build an item list for the sidebar of the index page. By default this is a\n * \"New Discussion\" button, and then a DropdownSelect component containing a\n * list of navigation items.\n */\n sidebarItems(): ItemList {\n const items = new ItemList();\n const canStartDiscussion = app.forum.attribute('canStartDiscussion') || !app.session.user;\n\n items.add(\n 'newDiscussion',\n Button.component({\n children: app.translator.trans(\n canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button'\n ),\n icon: 'fas fa-edit',\n className: 'Button Button--primary IndexPage-newDiscussion',\n itemClassName: 'App-primaryControl',\n onclick: this.newDiscussionAction.bind(this),\n disabled: !canStartDiscussion,\n })\n );\n\n items.add(\n 'nav',\n SelectDropdown.component({\n children: this.navItems().toArray(),\n buttonClassName: 'Button',\n className: 'App-titleControl',\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar of the index page. By\n * default this is just the 'All Discussions' link.\n */\n navItems(): ItemList {\n const items = new ItemList();\n const params = this.stickyParams();\n\n items.add(\n 'allDiscussions',\n LinkButton.component({\n href: app.route('index', params),\n children: app.translator.trans('core.forum.index.all_discussions_link'),\n icon: 'far fa-comments',\n }),\n 100\n );\n\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems(): ItemList {\n const items = new ItemList();\n const sortMap = app.cache.discussionList.sortMap();\n\n const sortOptions = {};\n for (const i in sortMap) {\n sortOptions[i] = app.translator.trans('core.forum.index_sort.' + i + '_button');\n }\n\n items.add(\n 'sort',\n Dropdown.component({\n buttonClassName: 'Button',\n label: sortOptions[this.params().sort] || Object.keys(sortMap).map((key) => sortOptions[key])[0],\n children: Object.keys(sortOptions).map((value) => {\n const label = sortOptions[value];\n const active = (this.params().sort || Object.keys(sortMap)[0]) === value;\n\n return Button.component({\n children: label,\n icon: active ? 'fas fa-check' : true,\n onclick: this.changeSort.bind(this, value),\n active: active,\n });\n }),\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems(): ItemList {\n const items = new ItemList();\n\n items.add(\n 'refresh',\n Button.component({\n title: app.translator.transText('core.forum.index.refresh_tooltip'),\n icon: 'fas fa-sync',\n className: 'Button Button--icon',\n onclick: () => {\n app.cache.discussionList.refresh();\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n },\n })\n );\n\n if (app.session.user) {\n items.add(\n 'markAllAsRead',\n Button.component({\n title: app.translator.transText('core.forum.index.mark_all_as_read_tooltip'),\n icon: 'fas fa-check',\n className: 'Button Button--icon',\n onclick: this.markAllAsRead.bind(this),\n })\n );\n }\n\n return items;\n }\n\n /**\n * Return the current search query, if any. This is implemented to activate\n * the search box in the header.\n *\n * @see Search\n */\n searching(): string {\n return this.params().q;\n }\n\n /**\n * Redirect to the index page without a search filter. This is called when the\n * 'x' is clicked in the search box in the header.\n *\n * @see Search\n */\n clearSearch() {\n const params = this.params();\n delete params.q;\n\n m.route.set(app.route(this.props.routeName, params));\n }\n\n /**\n * Redirect to the index page using the given sort parameter.\n */\n changeSort(sort: string) {\n const params = this.params();\n\n if (sort === Object.keys(app.cache.discussionList.sortMap())[0]) {\n delete params.sort;\n } else {\n params.sort = sort;\n }\n\n m.route(app.route(this.props.routeName, params));\n }\n\n /**\n * Get URL parameters that stick between filter changes.\n *\n * @return {Object}\n */\n stickyParams(): Params {\n return {\n sort: m.route.param('sort'),\n q: m.route.param('q'),\n };\n }\n\n /**\n * Get parameters to pass to the DiscussionList component.\n *\n * @return {Object}\n */\n params() {\n const params = this.stickyParams();\n\n params.filter = m.route.param('filter');\n\n return params;\n }\n\n /**\n * Open the composer for a new discussion or prompt the user to login.\n *\n * @return {Promise}\n */\n newDiscussionAction(): Promise<void> {\n if (app.session.user) {\n // const component = new DiscussionComposer({ user: app.session.user });\n\n // app.composer.load(component);\n // app.composer.show();\n\n return Promise.resolve();\n } else {\n app.modal.show(LogInModal);\n\n return Promise.reject();\n }\n }\n\n /**\n * Mark all discussions as read.\n */\n markAllAsRead(): void {\n const confirmation = confirm(app.translator.transText('core.forum.index.mark_all_as_read_confirmation'));\n\n if (confirmation) {\n app.session.user.save({ markedAllAsReadAt: new Date() });\n }\n }\n}\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\n\n/**\n * The `LoadingPost` component shows a placeholder that looks like a post,\n * indicating that the post is loading.\n */\nexport default class LoadingPost extends Component {\n view() {\n return (\n <div className=\"Post CommentPost LoadingPost\">\n <header className=\"Post-header\">\n {avatar(null, { className: 'PostUser-avatar' })}\n <div className=\"fakeText\" />\n </header>\n\n <div className=\"Post-body\">\n <div className=\"fakeText\" />\n <div className=\"fakeText\" />\n <div className=\"fakeText\" />\n </div>\n </div>\n );\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `LogInButtons` component displays a collection of social login buttons.\n */\nexport default class LogInButtons extends Component {\n view() {\n return <div className=\"LogInButtons\">{this.items().toArray()}</div>;\n }\n\n /**\n * Build a list of LogInButton components.\n */\n items(): ItemList {\n return new ItemList();\n }\n}\n","import Stream from 'mithril/stream';\n\nimport { ComponentProps } from '../../common/Component';\nimport Modal from '../../common/components/Modal';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\n\nimport LogInButtons from './LogInButtons';\nimport SignUpModal from './SignUpModal';\n\nexport interface LogInModalProps extends ComponentProps {\n identification?: string;\n password?: string;\n remember?: boolean;\n}\n\n/**\n * The `LogInModal` component displays a modal dialog with a login form.\n */\nexport default class LogInModal extends Modal<LogInModalProps> {\n /**\n * The value of the identification input.\n */\n identification!: Stream<string>;\n\n /**\n * The value of the password input.\n */\n password!: Stream<string>;\n\n /**\n * The value of the remember me input.\n */\n remember!: Stream<boolean>;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.identification = m.prop(this.props.identification || '');\n\n this.password = m.prop(this.props.password || '');\n\n this.remember = m.prop(!!this.props.remember);\n }\n\n className(): string {\n return 'LogInModal Modal--small';\n }\n\n title(): string {\n return app.translator.transText('core.forum.log_in.title');\n }\n\n content() {\n return [<div className=\"Modal-body\">{this.body()}</div>, <div className=\"Modal-footer\">{this.footer()}</div>];\n }\n\n body() {\n return [<LogInButtons />, <div className=\"Form Form--centered\">{this.fields().toArray()}</div>];\n }\n\n fields() {\n const items = new ItemList();\n\n items.add(\n 'identification',\n <div className=\"Form-group\">\n <input\n className=\"FormControl\"\n name=\"identification\"\n type=\"text\"\n placeholder={app.translator.transText('core.forum.log_in.username_or_email_placeholder')}\n bidi={this.identification}\n disabled={this.loading}\n />\n </div>,\n 30\n );\n\n items.add(\n 'password',\n <div className=\"Form-group\">\n <input\n className=\"FormControl\"\n name=\"password\"\n type=\"password\"\n placeholder={app.translator.transText('core.forum.log_in.password_placeholder')}\n bidi={this.password}\n disabled={this.loading}\n />\n </div>,\n 20\n );\n\n items.add(\n 'remember',\n <div className=\"Form-group\">\n <div>\n <label className=\"checkbox\">\n <input type=\"checkbox\" bidi={this.remember} disabled={this.loading} />\n {app.translator.trans('core.forum.log_in.remember_me_label')}\n </label>\n </div>\n </div>,\n 10\n );\n\n items.add(\n 'submit',\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.log_in.submit_button'),\n })}\n </div>,\n -10\n );\n\n return items;\n }\n\n footer() {\n return [\n <p className=\"LogInModal-forgotPassword\">\n <a onclick={this.forgotPassword.bind(this)}>{app.translator.trans('core.forum.log_in.forgot_password_link')}</a>\n </p>,\n\n app.forum.attribute('allowSignUp') && (\n <p className=\"LogInModal-signUp\">\n {app.translator.trans('core.forum.log_in.sign_up_text', { a: <a onclick={this.signUp.bind(this)} /> })}\n </p>\n ),\n ];\n }\n\n /**\n * Open the forgot password modal, prefilling it with an email if the user has\n * entered one.\n *\n * @public\n */\n forgotPassword() {\n const email = this.identification();\n const props = email.indexOf('@') !== -1 ? { email } : undefined;\n\n app.modal.show(ForgotPasswordModal, props);\n }\n\n /**\n * Open the sign up modal, prefilling it with an email/username/password if\n * the user has entered one.\n *\n * @public\n */\n signUp() {\n const props = { password: this.password() };\n const identification = this.identification();\n props[identification.indexOf('@') !== -1 ? 'email' : 'username'] = identification;\n\n app.modal.show(SignUpModal, props);\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.$(`[name=\"${this.identification() ? 'password' : 'identification'}\"]`).select();\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n const identification = this.identification();\n const password = this.password();\n const remember = this.remember();\n\n app.session\n .login({ identification, password, remember }, { errorHandler: this.onerror.bind(this) })\n .then(() => window.location.reload(), this.loaded.bind(this));\n }\n\n onerror(error) {\n if (error.status === 401) {\n error.alert.attrs.children = app.translator.trans('core.forum.log_in.invalid_login_message');\n }\n\n super.onerror(error);\n }\n}\n","import Component, { ComponentProps } from '../../common/Component';\nimport Checkbox from '../../common/components/Checkbox';\nimport icon from '../../common/helpers/icon';\nimport ItemList from '../../common/utils/ItemList';\nimport User from '../../common/models/User';\n\nexport interface NotificationGridProps extends ComponentProps {\n user: User;\n}\n\nexport type NotificationItem = {\n /**\n * The name of the notification type/method.\n */\n name: string;\n\n /**\n * The icon to display in the column header/notification grid row.\n */\n icon: string;\n\n /**\n * The label to display in the column header/notification grid row.\n */\n label: string;\n};\n\n/**\n * The `NotificationGrid` component displays a table of notification types and\n * methods, allowing the user to toggle each combination.\n */\nexport default class NotificationGrid extends Component<NotificationGridProps> {\n /**\n * Information about the available notification methods.\n */\n methods = this.notificationMethods().toArray();\n\n /**\n * A map of notification type-method combinations to the checkbox instances\n * that represent them.\n */\n inputs = {};\n\n /**\n * Information about the available notification types.\n */\n types = this.notificationTypes().toArray();\n\n oninit(vnode) {\n super.oninit(vnode);\n\n // For each of the notification type-method combinations, create and store a\n // new checkbox component instance, which we will render in the view.\n this.types.forEach((type) =>\n this.methods.forEach((method) => {\n const key = this.preferenceKey(type.name, method.name);\n const preference = this.props.user.preferences()[key];\n\n this.inputs[key] = new Checkbox({\n state: !!preference,\n disabled: typeof preference === 'undefined',\n onchange: () => this.toggle([key]),\n oninit: (vnode) => (this.inputs[key] = vnode.state),\n });\n })\n );\n }\n\n view() {\n return (\n <table className=\"NotificationGrid\">\n <thead>\n <tr>\n <td />\n {this.methods.map((method) => (\n <th className=\"NotificationGrid-groupToggle\" onclick={this.toggleMethod.bind(this, method.name)}>\n {icon(method.icon)} {method.label}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {this.types.map((type) => (\n <tr>\n <td className=\"NotificationGrid-groupToggle\" onclick={this.toggleType.bind(this, type.name)}>\n {icon(type.icon)} {type.label}\n </td>\n {this.methods.map((method) => (\n <td className=\"NotificationGrid-checkbox\">{this.inputs[this.preferenceKey(type.name, method.name)].render()}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.$('thead .NotificationGrid-groupToggle').bind('mouseenter mouseleave', function (e) {\n const i = parseInt($(this).index(), 10) + 1;\n $(this)\n .parents('table')\n .find('td:nth-child(' + i + ')')\n .toggleClass('highlighted', e.type === 'mouseenter');\n });\n\n this.$('tbody .NotificationGrid-groupToggle').bind('mouseenter mouseleave', function (e) {\n $(this)\n .parent()\n .find('td')\n .toggleClass('highlighted', e.type === 'mouseenter');\n });\n }\n\n /**\n * Toggle the state of the given preferences, based on the value of the first\n * one.\n */\n toggle(keys: string[]) {\n const user = this.props.user;\n const preferences = user.preferences();\n const enabled = !preferences[keys[0]];\n\n keys.forEach((key) => {\n const control = this.inputs[key];\n\n control.loading = true;\n control.props.state = enabled;\n preferences[key] = control.props.state = enabled;\n });\n\n m.redraw();\n\n user.save({ preferences }).then(() => {\n keys.forEach((key) => (this.inputs[key].loading = false));\n\n m.redraw();\n });\n }\n\n /**\n * Toggle all notification types for the given method.\n */\n toggleMethod(method: string) {\n const keys = this.types.map((type) => this.preferenceKey(type.name, method)).filter((key) => !this.inputs[key].props.disabled);\n\n this.toggle(keys);\n }\n\n /**\n * Toggle all notification methods for the given type.\n */\n toggleType(type: string) {\n const keys = this.methods.map((method) => this.preferenceKey(type, method.name)).filter((key) => !this.inputs[key].props.disabled);\n\n this.toggle(keys);\n }\n\n /**\n * Get the name of the preference key for the given notification type-method\n * combination.\n */\n preferenceKey(type: string, method: string): string {\n return `notify_${type}_${method}`;\n }\n\n /**\n * Build an item list for the notification methods to display in the grid.\n *\n * @see {NotificationItem}\n */\n notificationMethods() {\n const items = new ItemList<NotificationItem>();\n\n items.add('alert', {\n name: 'alert',\n icon: 'fas fa-bell',\n label: app.translator.trans('core.forum.settings.notify_by_web_heading'),\n });\n\n items.add('email', {\n name: 'email',\n icon: 'far fa-envelope',\n label: app.translator.trans('core.forum.settings.notify_by_email_heading'),\n });\n\n return items;\n }\n\n /**\n * Build an item list for the notification types to display in the grid.\n *\n * @see {NotificationItem}\n */\n notificationTypes() {\n const items = new ItemList<NotificationItem>();\n\n items.add('discussionRenamed', {\n name: 'discussionRenamed',\n icon: 'fas fa-pencil-alt',\n label: app.translator.trans('core.forum.settings.notify_discussion_renamed_label'),\n });\n\n return items;\n }\n}\n","import app from '../app';\n\nimport Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Notification from '../../common/models/Notification';\nimport Discussion from '../../common/models/Discussion';\n\n/**\n * The `NotificationList` component displays a list of the logged-in user's\n * notifications, grouped by discussion.\n */\nexport default class NotificationList extends Component {\n /**\n * Whether or not the notifications are loading.\n */\n loading: boolean = false;\n\n /**\n * Whether or not there are more results that can be loaded.\n */\n moreResults: boolean = false;\n\n private $scrollParent: ZeptoCollection;\n private scrollHandler: () => void;\n\n view() {\n const pages = app.cache.notifications || [];\n\n return (\n <div className=\"NotificationList\">\n <div className=\"NotificationList-header\">\n <div className=\"App-primaryControl\">\n {Button.component({\n className: 'Button Button--icon Button--link',\n icon: 'fas fa-check',\n title: app.translator.transText('core.forum.notifications.mark_all_as_read_tooltip'),\n onclick: this.markAllAsRead.bind(this),\n })}\n </div>\n\n <h4 className=\"App-titleControl App-titleControl--text\">{app.translator.trans('core.forum.notifications.title')}</h4>\n </div>\n\n <div className=\"NotificationList-content\">\n {pages.length\n ? pages.map((notifications) => {\n const groups: { discussion: Discussion; notifications: Notification[] }[] = [];\n const discussions = {};\n\n notifications.forEach((notification) => {\n const subject = notification.subject();\n\n if (typeof subject === 'undefined') return;\n\n // Get the discussion that this notification is related to. If it's not\n // directly related to a discussion, it may be related to a post or\n // other entity which is related to a discussion.\n let discussion: any = false;\n if (subject instanceof Discussion) discussion = subject;\n else if (subject && subject.discussion) discussion = subject.discussion();\n\n // If the notification is not related to a discussion directly or\n // indirectly, then we will assign it to a neutral group.\n const key = discussion ? discussion.id() : 0;\n discussions[key] = discussions[key] || { discussion: discussion, notifications: [] };\n discussions[key].notifications.push(notification);\n\n if (groups.indexOf(discussions[key]) === -1) {\n groups.push(discussions[key]);\n }\n });\n\n return groups.map((group) => {\n const badges = group.discussion?.badges().toArray();\n\n return (\n <div className=\"NotificationGroup\">\n {group.discussion ? (\n <m.route.Link className=\"NotificationGroup-header\" href={app.route.discussion(group.discussion)}>\n {badges && badges.length ? (\n <ul className=\"NotificationGroup-badges badges\">{listItems(badges)}</ul>\n ) : (\n ''\n )}\n {group.discussion.title()}\n </m.route.Link>\n ) : (\n <div className=\"NotificationGroup-header\">{app.forum.attribute('title')}</div>\n )}\n\n <ul className=\"NotificationGroup-content\">\n {group.notifications.map((notification) => {\n const NotificationComponent = app.notificationComponents[notification.contentType()];\n return NotificationComponent ? <li>{NotificationComponent.component({ notification })}</li> : '';\n })}\n </ul>\n </div>\n );\n });\n })\n : ''}\n {this.loading ? (\n <LoadingIndicator className=\"LoadingIndicator--block\" />\n ) : pages.length ? (\n ''\n ) : (\n <div className=\"NotificationList-empty\">{app.translator.trans('core.forum.notifications.empty_text')}</div>\n )}\n </div>\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n const $notifications = this.$('.NotificationList-content');\n const $scrollParent = (this.$scrollParent = $notifications.css('overflow') === 'auto' ? $notifications : $(window));\n\n this.scrollHandler = () => {\n const scrollTop = $scrollParent.scrollTop();\n const viewportHeight = $scrollParent.height();\n const contentTop = $scrollParent === $notifications ? 0 : $notifications.offset().top;\n const contentHeight = $notifications[0].scrollHeight;\n\n if (this.moreResults && !this.loading && scrollTop + viewportHeight >= contentTop + contentHeight) {\n this.loadMore();\n }\n };\n\n $scrollParent.on('scroll', this.scrollHandler);\n\n this.load();\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n this.$scrollParent.off('scroll', this.scrollHandler);\n }\n\n /**\n * Load notifications into the application's cache if they haven't already\n * been loaded.\n */\n load() {\n if (app.session.user.newNotificationCount()) {\n delete app.cache.notifications;\n }\n\n if (app.cache.notifications) {\n return;\n }\n\n app.session.user.pushAttributes({ newNotificationCount: 0 });\n\n this.loadMore();\n }\n\n /**\n * Load the next page of notification results.\n */\n loadMore() {\n this.loading = true;\n m.redraw();\n\n const params = app.cache.notifications ? { page: { offset: app.cache.notifications.length * 10 } } : null;\n\n return app.store\n .find<Notification>('notifications', params)\n .then(this.parseResults.bind(this))\n .catch(() => {})\n .then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n /**\n * Parse results and append them to the notification list.\n */\n parseResults(results: Notification[]): Notification[] {\n app.cache.notifications = app.cache.notifications || [];\n\n if (results.length) app.cache.notifications.push(results);\n\n this.moreResults = !!results.payload.links.next;\n\n return results;\n }\n\n /**\n * Mark all of the notifications as read.\n */\n markAllAsRead() {\n if (!app.cache.notifications) return;\n\n app.session.user.pushAttributes({ unreadNotificationCount: 0 });\n\n app.cache.notifications.forEach((notifications) => {\n notifications.forEach((notification) => notification.pushAttributes({ isRead: true }));\n });\n\n app.request({\n url: `${app.forum.attribute('apiUrl')}/notifications/read`,\n method: 'POST',\n });\n }\n}\n","import Dropdown from '../../common/components/Dropdown';\nimport icon from '../../common/helpers/icon';\nimport NotificationList from './NotificationList';\n\nexport default class NotificationsDropdown extends Dropdown {\n list = (<NotificationList />);\n\n static initProps(props) {\n props.className = props.className || 'NotificationsDropdown';\n props.buttonClassName = props.buttonClassName || 'Button Button--flat';\n props.menuClassName = props.menuClassName || 'Dropdown-menu--right';\n props.label = props.label || app.translator.transText('core.forum.notifications.tooltip');\n props.icon = props.icon || 'fas fa-bell';\n\n super.initProps(props);\n }\n\n getButton() {\n const newNotifications = this.getNewCount();\n const vdom = super.getButton();\n\n vdom.attrs.title = this.props.label;\n\n vdom.attrs.className += newNotifications ? ' new' : '';\n vdom.attrs.onclick = this.onclick.bind(this);\n\n return vdom;\n }\n\n getButtonContent() {\n const unread = this.getUnreadCount();\n\n return [\n icon(this.props.icon!, { className: 'Button-icon' }),\n unread ? <span className=\"NotificationsDropdown-unread\">{unread}</span> : '',\n <span className=\"Button-label\">{this.props.label}</span>,\n ];\n }\n\n getMenu() {\n return (\n <div className={'Dropdown-menu ' + this.props.menuClassName} onclick={this.menuClick.bind(this)}>\n {this.showing && this.list}\n </div>\n );\n }\n\n onclick() {\n if (app.drawer.isOpen()) {\n this.goToRoute();\n }\n }\n\n goToRoute() {\n m.route.set(app.route('notifications'));\n }\n\n getUnreadCount() {\n return app.session.user.unreadNotificationCount();\n }\n\n getNewCount() {\n return app.session.user.newNotificationCount();\n }\n\n menuClick(e: MouseEvent) {\n // Don't close the notifications dropdown if the user is opening a link in a\n // new tab or window.\n if (e.shiftKey || e.metaKey || e.ctrlKey || e.which === 2) e.stopPropagation();\n }\n}\n","import app from '../app';\n\nimport Page from './Page';\nimport NotificationList from './NotificationList';\n\n/**\n * The `NotificationsPage` component shows the notifications list. It is only\n * used on mobile devices where the notifications dropdown is within the drawer.\n */\nexport default class NotificationsPage extends Page {\n list = (<NotificationList />);\n\n oninit(vnode) {\n super.oninit(vnode);\n\n app.history.push('notifications');\n\n this.bodyClass = 'App--notifications';\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n m.redraw();\n }\n\n view() {\n return <div className=\"NotificationsPage\">{this.list}</div>;\n }\n}\n","import Component from '../../common/Component';\n\n/**\n * The `Page` component\n */\nexport default abstract class Page extends Component {\n /**\n * A class name to apply to the body while the route is active.\n */\n bodyClass: string = '';\n\n oninit(vnode) {\n super.oninit(vnode);\n\n if (this.bodyClass) {\n $('#app').addClass(this.bodyClass);\n }\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n app.previous = app.current;\n app.current = this;\n\n app.drawer.hide();\n app.modal.close();\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n $('#app').removeClass(this.bodyClass);\n }\n}\n","import Component, { ComponentProps } from '../../common/Component';\nimport Dropdown from '../../common/components/Dropdown';\nimport PostControls from '../utils/PostControls';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport { PostProp } from '../../common/concerns/ComponentProps';\n\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n *\n * @abstract\n */\nexport default class Post<T extends PostProp = PostProp> extends Component<T> {\n loading = false;\n controlsOpen = false;\n\n /**\n * Set up a subtree retainer so that the post will not be redrawn\n * unless new data comes in.\n */\n subtree = new SubtreeRetainer(\n () => this.props.post.freshness,\n () => {\n const user = this.props.post.user();\n return user?.freshness;\n },\n () => this.controlsOpen\n );\n\n view() {\n const controls = PostControls.controls(this.props.post, this).toArray();\n const attrs = this.attrs();\n\n attrs.className = classNames(this.classes(attrs.className));\n\n return (\n <article {...attrs}>\n <div>\n {this.content()}\n <aside className=\"Post-actions\">\n <ul>\n {listItems(this.actionItems().toArray())}\n {controls.length ? (\n <li>\n <Dropdown\n className=\"Post-controls\"\n buttonClassName=\"Button Button--icon Button--flat\"\n menuClassName=\"Dropdown-menu--right\"\n icon=\"fas fa-ellipsis-h\"\n onshow={() => this.$('.Post-actions').addClass('open')}\n onhide={() => this.$('.Post-actions').removeClass('open')}\n >\n {controls}\n </Dropdown>\n </li>\n ) : (\n ''\n )}\n </ul>\n </aside>\n <footer className=\"Post-footer\">\n <ul>{listItems(this.footerItems().toArray())}</ul>\n </footer>\n </div>\n </article>\n );\n }\n\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n\n return this.subtree.update();\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n const $actions = this.$('.Post-actions');\n const $controls = this.$('.Post-controls');\n\n $actions.toggleClass('open', $controls.hasClass('open'));\n }\n\n /**\n * Get attributes for the post element.\n */\n attrs(): ComponentProps {\n return {};\n }\n\n /**\n * Get the post's content.\n */\n content(): any[] {\n return [];\n }\n\n classes(existing) {\n let classes = (existing || '').split(' ').concat(['Post']);\n\n if (this.loading) {\n classes.push('Post--loading');\n }\n\n if (this.props.post.user() === app.session.user) {\n classes.push('Post--by-actor');\n }\n\n return classes;\n }\n\n /**\n * Build an item list for the post's actions.\n */\n actionItems() {\n return new ItemList();\n }\n\n /**\n * Build an item list for the post's footer.\n */\n footerItems() {\n return new ItemList();\n }\n}\n","import Component from '../../common/Component';\nimport { PostProp } from '../../common/concerns/ComponentProps';\nimport humanTime from '../../common/utils/humanTime';\n\n/**\n * The `PostEdited` component displays information about when and by whom a post\n * was edited.\n */\nexport default class PostEdited extends Component<PostProp> {\n shouldUpdateTooltip = false;\n oldEditedInfo?: string;\n\n view() {\n const post = this.props.post;\n const editedUser = post.editedUser();\n const editedInfo = app.translator.transText('core.forum.post.edited_tooltip', { user: editedUser, ago: humanTime(post.editedAt()) });\n\n if (editedInfo !== this.oldEditedInfo) {\n this.shouldUpdateTooltip = true;\n this.oldEditedInfo = editedInfo;\n }\n\n return (\n <span className=\"PostEdited\" title={editedInfo}>\n {app.translator.trans('core.forum.post.edited_text')}\n </span>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.$().tooltip();\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n\n if (this.shouldUpdateTooltip) {\n this.$().tooltip('destroy').tooltip();\n this.shouldUpdateTooltip = false;\n }\n }\n}\n","import Component from '../../common/Component';\nimport { PostProp } from '../../common/concerns/ComponentProps';\nimport humanTime from '../../common/helpers/humanTime';\nimport fullTime from '../../common/helpers/fullTime';\nimport Post from '../../common/models/Post';\n\nexport default class PostMeta extends Component<PostProp> {\n view() {\n const post = this.props.post;\n const time = post.createdAt();\n const permalink = this.getPermalink(post);\n const touch = 'ontouchstart' in document.documentElement;\n\n // When the dropdown menu is shown, select the contents of the permalink\n // input so that the user can quickly copy the URL.\n const selectPermalink = function (this: HTMLElement) {\n setTimeout(() => $(this).parent().find('.PostMeta-permalink').select());\n };\n\n return (\n <div className=\"Dropdown PostMeta\">\n <a className=\"Dropdown-toggle\" onclick={selectPermalink} data-toggle=\"dropdown\">\n {humanTime(time)}\n </a>\n\n <div className=\"Dropdown-menu dropdown-menu\">\n <span className=\"PostMeta-number\">{app.translator.trans('core.forum.post.number_tooltip', { number: post.number() })}</span>{' '}\n <span className=\"PostMeta-time\">{fullTime(time)}</span> <span className=\"PostMeta-ip\">{post.data.attributes.ipAddress}</span>\n {touch ? (\n <a className=\"Button PostMeta-permalink\" href={permalink}>\n {permalink}\n </a>\n ) : (\n <input className=\"FormControl PostMeta-permalink\" value={permalink} onclick={(e) => e.stopPropagation()} />\n )}\n </div>\n </div>\n );\n }\n\n /**\n * Get the permalink for the given post.\n */\n getPermalink(post: Post): string {\n return window.location.origin + app.route.post(post);\n }\n}\n","import app from '../app';\nimport { Attributes } from 'mithril';\n\nimport Component from '../../common/Component';\nimport ScrollListener from '../../common/utils/ScrollListener';\nimport PostLoading from './LoadingPost';\nimport anchorScroll from '../../common/utils/anchorScroll';\nimport ReplyPlaceholder from './ReplyPlaceholder';\nimport Button from '../../common/components/Button';\nimport Discussion from '../../common/models/Discussion';\nimport Post from '../../common/models/Post';\nimport Evented from '../../common/utils/Evented';\nimport { DiscussionProp } from '../../common/concerns/ComponentProps';\n\nexport interface PostStreamProps extends DiscussionProp {\n includedPosts: Post[];\n}\n\ninterface PostStream<T extends PostStreamProps = PostStreamProps> extends Component<T>, Evented {}\n\n/**\n * The `PostStream` component displays an infinitely-scrollable wall of posts in\n * a discussion. Posts that have not loaded will be displayed as placeholders.\n */\nclass PostStream<T extends PostStreamProps = PostStreamProps> extends Component<T> {\n /**\n * The number of posts to load per page.\n */\n static loadCount = 20;\n\n /**\n * The discussion to display the post stream for.\n */\n discussion: Discussion;\n\n /**\n * Whether or not the infinite-scrolling auto-load functionality is\n * disabled.\n */\n paused = false;\n\n scrollListener = new ScrollListener(this.onscroll.bind(this));\n loadPageTimeouts = {};\n pagesLoading = 0;\n\n calculatePositionTimeout: number = 0;\n visibleStart: number = 0;\n visibleEnd: number = 0;\n viewingEnd: boolean = true;\n\n constructor(...args) {\n super(...args);\n\n this.discussion = this.props.discussion;\n }\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.discussion = this.props.discussion;\n\n this.show(this.props.includedPosts);\n }\n\n /**\n * Load and scroll to a post with a certain number.\n *\n * @param number The post number to go to. If 'reply', go to\n * the last post and scroll the reply preview into view.\n * @param noAnimation\n */\n goToNumber(number: string | number | 'reply', noAnimation?: boolean): Promise<void> {\n // If we want to go to the reply preview, then we will go to the end of the\n // discussion and then scroll to the very bottom of the page.\n if (number === 'reply') {\n return this.goToLast().then(() => {\n $('html,body').animate(\n {\n scrollTop: $(document).height() - $(window).height(),\n },\n 'fast',\n () => {\n this.flashItem(this.$('.PostStream-item:last-child'));\n }\n );\n });\n }\n\n this.paused = true;\n\n const promise = this.loadNearNumber(number);\n\n m.redraw();\n\n return promise.then(() => {\n m.redraw();\n\n this.scrollToNumber(number, noAnimation).then(this.unpause.bind(this));\n });\n }\n\n /**\n * Load and scroll to a certain index within the discussion.\n *\n * @param index\n * @param backwards Whether or not to load backwards from the given\n * index.\n * @param noAnimation\n */\n goToIndex(index: number, backwards?: boolean, noAnimation?: boolean): Promise<void> {\n this.paused = true;\n\n return this.loadNearIndex(index).then(() => {\n m.redraw.sync();\n\n anchorScroll(this.$('.PostStream-item:' + (backwards ? 'last' : 'first')), () => m.redraw());\n\n return this.scrollToIndex(index, noAnimation, backwards).then(this.unpause.bind(this));\n });\n }\n\n /**\n * Load and scroll up to the first post in the discussion.\n */\n goToFirst(): Promise<void> {\n return this.goToIndex(0);\n }\n\n /**\n * Load and scroll down to the last post in the discussion.\n */\n goToLast(): Promise<void> {\n return this.goToIndex(this.count() - 1, true);\n }\n\n /**\n * Update the stream so that it loads and includes the latest posts in the\n * discussion, if the end is being viewed.\n */\n update(): Promise<void> {\n if (!this.viewingEnd) return Promise.resolve();\n\n this.visibleEnd = this.count();\n\n return this.loadRange(this.visibleStart, this.visibleEnd).then(() => m.redraw());\n }\n\n /**\n * Get the total number of posts in the discussion.\n */\n count(): number {\n return this.discussion.postIds().length;\n }\n\n /**\n * Make sure that the given index is not outside of the possible range of\n * indexes in the discussion.\n */\n protected sanitizeIndex(index: number) {\n return Math.max(0, Math.min(this.count(), index));\n }\n\n /**\n * Set up the stream with the given array of posts.\n */\n show(posts: Post[]) {\n this.visibleStart = posts.length ? this.discussion.postIds().indexOf(posts[0].id()) : 0;\n this.visibleEnd = this.visibleStart + posts.length;\n }\n\n /**\n * Reset the stream so that a specific range of posts is displayed. If a range\n * is not specified, the first page of posts will be displayed.\n */\n reset(start?: number, end?: number) {\n this.visibleStart = start || 0;\n this.visibleEnd = this.sanitizeIndex(end || this.constructor.loadCount);\n }\n\n /**\n * Get the visible page of posts.\n */\n posts(): (Post | null)[] {\n return this.discussion\n .postIds()\n .slice(this.visibleStart, this.visibleEnd)\n .map((id) => {\n const post = app.store.getById<Post>('posts', id);\n\n return post && post.discussion() && typeof post.canEdit() !== 'undefined' ? post : null;\n });\n }\n\n view() {\n function fadeIn(vnode) {\n if (!vnode.state.fadedIn) $(vnode.dom).hide().fadeIn();\n vnode.state.fadedIn = true;\n }\n\n let lastTime;\n\n this.visibleEnd = this.sanitizeIndex(this.visibleEnd);\n this.viewingEnd = this.visibleEnd === this.count();\n\n const posts = this.posts();\n const postIds = this.discussion.postIds();\n\n const items = posts.map((post, i) => {\n let content;\n const attrs: Attributes = { 'data-index': this.visibleStart + i };\n\n if (post) {\n const time = post.createdAt();\n const PostComponent = app.postComponents[post.contentType()];\n content = PostComponent ? <PostComponent post={post} /> : '';\n\n attrs.key = 'post' + post.id();\n attrs.oncreate = fadeIn;\n attrs['data-time'] = time.toISOString();\n attrs['data-number'] = post.number();\n attrs['data-id'] = post.id();\n attrs['data-type'] = post.contentType();\n\n // If the post before this one was more than 4 hours ago, we will\n // display a 'time gap' indicating how long it has been in between\n // the posts.\n const dt = time.valueOf() - lastTime;\n\n if (dt > 1000 * 60 * 60 * 24 * 4) {\n content = [\n <div className=\"PostStream-timeGap\">\n <span>\n {app.translator.trans('core.forum.post_stream.time_lapsed_text', { period: dayjs(time).from(dayjs(lastTime), true) })}\n </span>\n </div>,\n content,\n ];\n }\n\n lastTime = time;\n } else {\n attrs.key = 'post' + postIds[this.visibleStart + i];\n\n content = <PostLoading />;\n }\n\n return (\n <div className=\"PostStream-item\" {...attrs}>\n {content}\n </div>\n );\n });\n\n if (!this.viewingEnd && posts[this.visibleEnd - this.visibleStart - 1]) {\n items.push(\n <div className=\"PostStream-loadMore\" key=\"loadMore\">\n <Button className=\"Button\" onclick={this.loadNext.bind(this)}>\n {app.translator.trans('core.forum.post_stream.load_more_button')}\n </Button>\n </div>\n );\n }\n\n // If we're viewing the end of the discussion, the user can reply, and\n // is not already doing so, then show a 'write a reply' placeholder.\n if (this.viewingEnd && (!app.session.user || this.discussion.canReply())) {\n items.push(\n <div className=\"PostStream-item\" key=\"reply\">\n {ReplyPlaceholder.component({ discussion: this.discussion })}\n </div>\n );\n }\n\n return <div className=\"PostStream\">{items}</div>;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.scrollListener.start();\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n this.scrollListener.stop();\n clearTimeout(this.calculatePositionTimeout);\n }\n\n /**\n * When the window is scrolled, check if either extreme of the post stream is\n * in the viewport, and if so, trigger loading the next/previous page.\n */\n onscroll(top: number) {\n if (this.paused) return;\n\n const marginTop = this.getMarginTop();\n const viewportHeight = $(window).height() - marginTop;\n const viewportTop = top + marginTop;\n const loadAheadDistance = 300;\n\n if (this.visibleStart > 0) {\n const $item = this.$(`.PostStream-item[data-index=\"${this.visibleStart}\"]`);\n\n if ($item.length && $item.offset().top > viewportTop - loadAheadDistance) {\n this.loadPrevious();\n }\n }\n\n if (this.visibleEnd < this.count()) {\n const $item = this.$(`.PostStream-item[data-index=\"${this.visibleEnd - 1}\"]`);\n\n if ($item.length && $item.offset().top + $item.outerHeight(true) < viewportTop + viewportHeight + loadAheadDistance) {\n this.loadNext();\n }\n }\n\n // Throttle calculation of our position (start/end numbers of posts in the\n // viewport) to 100ms.\n clearTimeout(this.calculatePositionTimeout);\n this.calculatePositionTimeout = setTimeout(this.calculatePosition.bind(this), 100);\n }\n\n /**\n * Load the next page of posts.\n */\n loadNext() {\n const start = this.visibleEnd;\n const end = (this.visibleEnd = this.sanitizeIndex(this.visibleEnd + this.constructor.loadCount));\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start - this.constructor.loadCount * 2;\n if (twoPagesAway > this.visibleStart && twoPagesAway >= 0) {\n this.visibleStart = twoPagesAway + this.constructor.loadCount + 1;\n\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n this.loadPageTimeouts[twoPagesAway] = null;\n this.pagesLoading--;\n }\n }\n\n this.loadPage(start, end);\n }\n\n /**\n * Load the previous page of posts.\n */\n loadPrevious() {\n const end = this.visibleStart;\n const start = (this.visibleStart = this.sanitizeIndex(this.visibleStart - this.constructor.loadCount));\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start + this.constructor.loadCount * 2;\n if (twoPagesAway < this.visibleEnd && twoPagesAway <= this.count()) {\n this.visibleEnd = twoPagesAway;\n\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n this.loadPageTimeouts[twoPagesAway] = null;\n this.pagesLoading--;\n }\n }\n\n this.loadPage(start, end, true);\n }\n\n /**\n * Load a page of posts into the stream and redraw.\n */\n loadPage(start: number, end: number, backwards?: boolean) {\n const redraw = () => {\n if (start < this.visibleStart || end > this.visibleEnd) return;\n\n const anchorIndex = backwards ? this.visibleEnd - 1 : this.visibleStart;\n anchorScroll(`.PostStream-item[data-index=\"${anchorIndex}\"]`, () => m.redraw(true));\n\n this.unpause();\n };\n redraw();\n\n this.loadPageTimeouts[start] = setTimeout(\n () => {\n this.loadRange(start, end).then(() => {\n redraw();\n this.pagesLoading--;\n });\n this.loadPageTimeouts[start] = null;\n },\n this.pagesLoading ? 1000 : 0\n );\n\n this.pagesLoading++;\n }\n\n /**\n * Load and inject the specified range of posts into the stream, without\n * clearing it.\n */\n loadRange(start?: number, end?: number): Promise<Post[]> {\n const loadIds: string[] = [];\n const loaded: Post[] = [];\n\n this.discussion\n .postIds()\n .slice(start, end)\n .forEach((id) => {\n const post = app.store.getById<Post>('posts', id);\n\n if (post && post.discussion() && typeof post.canEdit() !== 'undefined') {\n loaded.push(post);\n } else {\n loadIds.push(id);\n }\n });\n\n return loadIds.length ? app.store.find('posts', loadIds) : Promise.resolve(loaded);\n }\n\n /**\n * Clear the stream and load posts near a certain number. Returns a promise.\n * If the post with the given number is already loaded, the promise will be\n * resolved immediately.\n */\n loadNearNumber(number: string | number): Promise<void> {\n if (this.posts().some((post) => post && Number(post.number()) === Number(number))) {\n return Promise.resolve();\n }\n\n this.reset();\n\n return app.store\n .find<Post>('posts', {\n filter: { discussion: this.discussion.id() },\n page: { near: number },\n })\n .then(this.show.bind(this));\n }\n\n /**\n * Clear the stream and load posts near a certain index. A page of posts\n * surrounding the given index will be loaded. Returns a promise. If the given\n * index is already loaded, the promise will be resolved immediately.\n */\n loadNearIndex(index: number): Promise {\n if (index >= this.visibleStart && index <= this.visibleEnd) {\n return Promise.resolve();\n }\n\n const start = this.sanitizeIndex(index - this.constructor.loadCount / 2);\n const end = start + this.constructor.loadCount;\n\n this.reset(start, end);\n\n return this.loadRange(start, end).then(this.show.bind(this));\n }\n\n /**\n * Work out which posts (by number) are currently visible in the viewport, and\n * fire an event with the information.\n */\n calculatePosition() {\n const marginTop = this.getMarginTop();\n const $window = $(window);\n const viewportHeight = $window.height() - marginTop;\n const scrollTop = $window.scrollTop() + marginTop;\n let startNumber;\n let endNumber;\n\n this.$('.PostStream-item').each((index, item: HTMLElement) => {\n const $item = $(item);\n const top = $item.offset().top;\n const height = $item.outerHeight(true);\n\n if (top + height > scrollTop) {\n if (!startNumber) {\n startNumber = endNumber = $item.data('number');\n }\n\n if (top + height < scrollTop + viewportHeight) {\n if ($item.data('number')) {\n endNumber = $item.data('number');\n }\n } else return false;\n }\n\n return true;\n });\n\n if (startNumber) {\n this.trigger('positionChanged', startNumber || 1, endNumber);\n }\n }\n\n /**\n * Get the distance from the top of the viewport to the point at which we\n * would consider a post to be the first one visible.\n */\n getMarginTop(): number {\n return this.$() && $('#header').outerHeight() + parseInt(this.$().css('margin-top'), 10);\n }\n\n /**\n * Scroll down to a certain post by number and 'flash' it.\n */\n scrollToNumber(number: string | number, noAnimation?: boolean): Promise<void> {\n const $item = this.$(`.PostStream-item[data-number=\"${number}\"]`);\n\n return this.scrollToItem($item, noAnimation).then(() => this.flashItem($item));\n }\n\n /**\n * Scroll down to a certain post by index.\n *\n * @param index\n * @param noAnimation\n * @param bottom Whether or not to scroll to the bottom of the post\n * at the given index, instead of the top of it.\n */\n scrollToIndex(index: number, noAnimation?: boolean, bottom?: boolean): Promise<void> {\n const $item = this.$(`.PostStream-item[data-index=\"${index}\"]`);\n\n return this.scrollToItem($item, noAnimation, true, bottom);\n }\n\n /**\n * Scroll down to the given post.\n *\n * @param $item\n * @param noAnimation\n * @param force Whether or not to force scrolling to the item, even\n * if it is already in the viewport.\n * @param bottom Whether or not to scroll to the bottom of the post\n * at the given index, instead of the top of it.\n */\n scrollToItem($item, noAnimation?: boolean, force?: boolean, bottom?: boolean): Promise<void> {\n const $container = $('html, body');\n\n if ($item.length) {\n const itemTop = $item.offset().top - this.getMarginTop();\n const itemBottom = $item.offset().top + $item.height();\n const scrollTop = $container.scrollTop();\n const scrollBottom = scrollTop + $(window).height();\n\n // If the item is already in the viewport, we may not need to scroll.\n // If we're scrolling to the bottom of an item, then we'll make sure the\n // bottom will line up with the top of the composer.\n if (force || itemTop < scrollTop || itemBottom > scrollBottom) {\n // TODO const top = bottom ? itemBottom - $(window).height() + app.composer.computedHeight() : $item.is(':first-child') ? 0 : itemTop;\n const top = bottom ? itemBottom - $(window).height() : $item.is(':first-child') ? 0 : itemTop;\n\n return new Promise<void>((resolve) => {\n if (noAnimation) {\n $container.scrollTop(top);\n resolve();\n } else if (top !== scrollTop) {\n $container.animateScrollTop(top, 'fast', resolve);\n } else {\n resolve();\n }\n });\n }\n }\n\n return Promise.resolve();\n }\n\n /**\n * 'Flash' the given post, drawing the user's attention to it.\n *\n * @param {jQuery} $item\n */\n flashItem($item) {\n $item.addClass('flash').one('animationend webkitAnimationEnd', () => $item.removeClass('flash'));\n }\n\n /**\n * Resume the stream's ability to auto-load posts on scroll.\n */\n unpause() {\n this.paused = false;\n this.scrollListener.update();\n this.trigger('unpaused');\n }\n}\n\nObject.assign(PostStream.prototype, Evented.prototype);\n\nexport default PostStream;\n","import Component from '../../common/Component';\nimport icon from '../../common/helpers/icon';\nimport ScrollListener from '../../common/utils/ScrollListener';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport formatNumber from '../../common/utils/formatNumber';\nimport PostStream from './PostStream';\nimport { EventHandler } from '../../common/utils/Evented';\n\n/**\n * The `PostStreamScrubber` component displays a scrubber which can be used to\n * navigate/scrub through a post stream.\n */\nexport default class PostStreamScrubber extends Component {\n handlers: { [key: string]: EventHandler } = {};\n\n /**\n * The index of the post that is currently at the top of the viewport.\n */\n index: number = 0;\n\n /**\n * The number of posts that are currently visible in the viewport.\n */\n visible: number = 1;\n\n /**\n * The description to render on the scrubber.\n */\n description: string = '';\n\n // Define a handler to update the state of the scrollbar to reflect the\n // current scroll position of the page.\n scrollListener = new ScrollListener(this.onscroll.bind(this));\n\n // Create a subtree retainer that will always cache the subtree after the\n // initial draw. We render parts of the scrubber using this because we\n // modify their DOM directly, and do not want Mithril messing around with\n // our changes.\n subtree = new SubtreeRetainer(() => true);\n\n // When the mouse is pressed on the scrollbar handle, we capture some\n // information about its current position. We will store this\n // information in an object and pass it on to the document's\n // mousemove/mouseup events later.\n dragging = false;\n mouseStart = 0;\n indexStart = 0;\n\n // Added when Component is initialized through `oninit` prop\n stream!: PostStream;\n\n view() {\n const count = this.count();\n const unreadCount = this.stream?.discussion.unreadCount() || 0;\n const unreadPercent = count ? Math.min(count - this.index, unreadCount) / count : 0;\n\n const viewing = app.translator.transChoice('core.forum.post_scrubber.viewing_text', count, {\n index: (\n <span className=\"Scrubber-index\" onbeforeupdate={() => this.subtree.update()}>\n {formatNumber(Math.min(Math.ceil(this.index + this.visible), count))}\n </span>\n ),\n count: <span className=\"Scrubber-count\">{formatNumber(count)}</span>,\n });\n\n function styleUnread(vnode) {\n const $element = $(vnode.dom);\n const newStyle = {\n top: 100 - unreadPercent * 100 + '%',\n height: unreadPercent * 100 + '%',\n display: unreadCount == 0 && 'none',\n };\n\n if (vnode.state.oldStyle) {\n $element.css(vnode.state.oldStyle).animate(newStyle);\n } else {\n $element.css(newStyle);\n }\n\n vnode.state.oldStyle = newStyle;\n }\n\n return (\n <div className={'PostStreamScrubber Dropdown ' + (this.disabled() ? 'disabled ' : '') + (this.props.className || '')}>\n <button className=\"Button Dropdown-toggle\" data-toggle=\"dropdown\">\n {viewing} {icon('fas fa-sort')}\n </button>\n\n <div className=\"Dropdown-menu dropdown-menu\">\n <div className=\"Scrubber\">\n <a className=\"Scrubber-first\" onclick={this.goToFirst.bind(this)}>\n {icon('fas fa-angle-double-up')} {app.translator.trans('core.forum.post_scrubber.original_post_link')}\n </a>\n\n <div className=\"Scrubber-scrollbar\">\n <div className=\"Scrubber-before\" />\n <div className=\"Scrubber-handle\">\n <div className=\"Scrubber-bar\" />\n <div className=\"Scrubber-info\">\n <strong>{viewing}</strong>\n <span className=\"Scrubber-description\" onbeforeupdate={() => this.subtree.update()}>\n {this.description}\n </span>\n </div>\n </div>\n <div className=\"Scrubber-after\" />\n\n <div className=\"Scrubber-unread\" oncreate={styleUnread} onupdate={styleUnread}>\n {app.translator.trans('core.forum.post_scrubber.unread_text', { count: unreadCount })}\n </div>\n </div>\n\n <a className=\"Scrubber-last\" onclick={this.goToLast.bind(this)}>\n {icon('fas fa-angle-double-down')} {app.translator.trans('core.forum.post_scrubber.now_link')}\n </a>\n </div>\n </div>\n </div>\n );\n }\n\n /**\n * Go to the first post in the discussion.\n */\n goToFirst() {\n this.stream.goToFirst();\n this.index = 0;\n this.renderScrollbar(true);\n }\n\n /**\n * Go to the last post in the discussion.\n */\n goToLast() {\n this.stream.goToLast();\n this.index = this.count();\n this.renderScrollbar(true);\n }\n\n /**\n * Get the number of posts in the discussion.\n */\n count(): number {\n return this.stream?.count() || 0;\n }\n\n /**\n * When the stream is unpaused, update the scrubber to reflect its position.\n */\n streamWasUnpaused() {\n this.update(window.pageYOffset);\n this.renderScrollbar(true);\n }\n\n /**\n * Check whether or not the scrubber should be disabled, i.e. if all of the\n * posts are visible in the viewport.\n */\n disabled(): boolean {\n return this.visible >= this.count();\n }\n\n /**\n * When the page is scrolled, update the scrollbar to reflect the visible\n * posts.\n */\n onscroll(top: number) {\n const stream = this.stream;\n\n if (!stream || stream.paused || !stream.$()) return;\n\n this.update(top);\n this.renderScrollbar();\n }\n\n /**\n * Update the index/visible/description properties according to the window's\n * current scroll position.\n */\n update(scrollTop: number = 0) {\n const stream = this.stream;\n\n const marginTop = stream.getMarginTop();\n const viewportTop = scrollTop + marginTop;\n const viewportHeight = $(window).height() - marginTop;\n\n // Before looping through all of the posts, we reset the scrollbar\n // properties to a 'default' state. These values reflect what would be\n // seen if the browser were scrolled right up to the top of the page,\n // and the viewport had a height of 0.\n const $items = stream.$('.PostStream-item[data-index]');\n let index = $items.first().data('index') || 0;\n let visible = 0;\n let period = '';\n\n // Now loop through each of the items in the discussion. An 'item' is\n // either a single post or a 'gap' of one or more posts that haven't\n // been loaded yet.\n $items.each(function (this: HTMLElement) {\n const $this = $(this);\n const top = $this.offset().top;\n const height = $this.outerHeight(true);\n\n // If this item is above the top of the viewport, skip to the next\n // one. If it's below the bottom of the viewport, break out of the\n // loop.\n if (top + height < viewportTop) {\n return true;\n }\n if (top > viewportTop + viewportHeight) {\n return false;\n }\n\n // Work out how many pixels of this item are visible inside the viewport.\n // Then add the proportion of this item's total height to the index.\n const visibleTop = Math.max(0, viewportTop - top);\n const visibleBottom = Math.min(height, viewportTop + viewportHeight - top);\n const visiblePost = visibleBottom - visibleTop;\n\n if (top <= viewportTop) {\n index = parseFloat($this.data('index')) + visibleTop / height;\n }\n\n if (visiblePost > 0) {\n visible += visiblePost / height;\n }\n\n // If this item has a time associated with it, then set the\n // scrollbar's current period to a formatted version of this time.\n const time = $this.data('time');\n if (time) period = time;\n\n return true;\n });\n\n this.index = index;\n this.visible = visible;\n this.description = period ? dayjs(period).format('MMMM YYYY') : '';\n }\n\n onremove(vnode) {\n super.onremove(vnode);\n\n this.ondestroy();\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // When the post stream begins loading posts at a certain index, we want our\n // scrubber scrollbar to jump to that position.\n this.stream.on('unpaused', (this.handlers.streamWasUnpaused = this.streamWasUnpaused.bind(this)));\n this.stream.on('update', () => this.update());\n\n this.scrollListener.start();\n\n // Whenever the window is resized, adjust the height of the scrollbar\n // so that it fills the height of the sidebar.\n $(window)\n .on('resize', (this.handlers.onresize = this.onresize.bind(this)))\n .resize();\n\n // When any part of the whole scrollbar is clicked, we want to jump to\n // that position.\n this.$('.Scrubber-scrollbar')\n .on('click', this.onclick.bind(this))\n\n // Now we want to make the scrollbar handle draggable. Let's start by\n // preventing default browser events from messing things up.\n .css({ cursor: 'pointer', 'user-select': 'none' })\n .on('dragstart mousedown touchstart', (e) => e.preventDefault());\n\n this.$('.Scrubber-handle')\n .css('cursor', 'move')\n .on('mousedown touchstart', this.onmousedown.bind(this) as ZeptoEventHandler)\n\n // Exempt the scrollbar handle from the 'jump to' click event.\n .click((e) => e.stopPropagation());\n\n // When the mouse moves and when it is released, we pass the\n // information that we captured when the mouse was first pressed onto\n // some event handlers. These handlers will move the scrollbar/stream-\n // content as appropriate.\n $(document)\n .on('mousemove touchmove', (this.handlers.onmousemove = this.onmousemove.bind(this) as ZeptoEventHandler))\n .on('mouseup touchend', (this.handlers.onmouseup = this.onmouseup.bind(this)));\n }\n\n ondestroy() {\n this.scrollListener.stop();\n\n this.stream.off('unpaused', this.handlers.streamWasUnpaused);\n\n $(window).off('resize', this.handlers.onresize);\n\n $(document).off('mousemove touchmove', this.handlers.onmousemove).off('mouseup touchend', this.handlers.onmouseup);\n }\n\n /**\n * Update the scrollbar's position to reflect the current values of the\n * index/visible properties.\n */\n renderScrollbar(animate?: boolean) {\n const percentPerPost = this.percentPerPost();\n const index = this.index;\n const count = this.count();\n const visible = this.visible || 1;\n\n const $scrubber = this.$();\n $scrubber.find('.Scrubber-index').text(formatNumber(Math.min(Math.ceil(index + visible), count)));\n $scrubber.find('.Scrubber-description').text(this.description);\n $scrubber.toggleClass('disabled', this.disabled());\n\n const heights: { before?: number; handle?: number; after?: number } = {};\n heights.before = Math.max(0, percentPerPost.index * Math.min(index, count - visible));\n heights.handle = Math.min(100 - heights.before, percentPerPost.visible * visible);\n heights.after = 100 - heights.before - heights.handle;\n\n const func = animate ? 'animate' : 'css';\n for (const part in heights) {\n const $part = $scrubber.find(`.Scrubber-${part}`);\n $part[func]({ height: heights[part] + '%' }, 'fast');\n\n // jQuery likes to put overflow:hidden, but because the scrollbar handle\n // has a negative margin-left, we need to override.\n if (func === 'animate') $part.css('overflow', 'visible');\n }\n }\n\n /**\n * Get the percentage of the height of the scrubber that should be allocated\n * to each post.\n *\n * @property index The percent per post for posts on either side of\n * the visible part of the scrubber.\n * @property visible The percent per post for the visible part of the\n * scrubber.\n */\n percentPerPost(): { index: number; visible: number } {\n const count = this.count() || 1;\n const visible = this.visible || 1;\n\n // To stop the handle of the scrollbar from getting too small when there\n // are many posts, we define a minimum percentage height for the handle\n // calculated from a 50 pixel limit. From this, we can calculate the\n // minimum percentage per visible post. If this is greater than the actual\n // percentage per post, then we need to adjust the 'before' percentage to\n // account for it.\n const minPercentVisible = (50 / this.$('.Scrubber-scrollbar').outerHeight()) * 100;\n const percentPerVisiblePost = Math.max(100 / count, minPercentVisible / visible);\n const percentPerPost = count === visible ? 0 : (100 - percentPerVisiblePost * visible) / (count - visible);\n\n return {\n index: percentPerPost,\n visible: percentPerVisiblePost,\n };\n }\n\n onresize() {\n this.scrollListener.update();\n\n // Adjust the height of the scrollbar so that it fills the height of\n // the sidebar and doesn't overlap the footer.\n const scrubber = this.$();\n const scrollbar = this.$('.Scrubber-scrollbar');\n\n scrollbar.css(\n 'max-height',\n $(window).height() -\n scrubber.offset().top +\n $(window).scrollTop() -\n parseInt($('#app').css('padding-bottom'), 10) -\n (scrubber.outerHeight() - scrollbar.outerHeight())\n );\n }\n\n onmousedown(e: MouseEvent) {\n this.mouseStart = window.TouchEvent && e instanceof TouchEvent ? e.touches[0].clientY : e.clientY;\n this.indexStart = this.index;\n this.dragging = true;\n this.stream.paused = true;\n $('body').css('cursor', 'move');\n }\n\n onmousemove(e: MouseEvent) {\n if (!this.dragging) return;\n\n let y = window.TouchEvent && e instanceof TouchEvent ? e.touches[0].clientY : e.clientY;\n\n // Work out how much the mouse has moved by - first in pixels, then\n // convert it to a percentage of the scrollbar's height, and then\n // finally convert it into an index. Add this delta index onto\n // the index at which the drag was started, and then scroll there.\n const deltaPixels = y - this.mouseStart;\n const deltaPercent = (deltaPixels / this.$('.Scrubber-scrollbar').outerHeight()) * 100;\n const deltaIndex = deltaPercent / this.percentPerPost().index || 0;\n const newIndex = Math.min(this.indexStart + deltaIndex, this.count() - 1);\n\n this.index = Math.max(0, newIndex);\n this.renderScrollbar();\n }\n\n onmouseup() {\n if (!this.dragging) return;\n\n this.mouseStart = 0;\n this.indexStart = 0;\n this.dragging = false;\n $('body').css('cursor', '');\n\n this.$().removeClass('open');\n\n // If the index we've landed on is in a gap, then tell the stream-\n // content that we want to load those posts.\n const intIndex = Math.floor(this.index);\n this.stream.goToIndex(intIndex);\n this.renderScrollbar(true);\n }\n\n onclick(e) {\n // Calculate the index which we want to jump to based on the click position.\n\n // 1. Get the offset of the click from the top of the scrollbar, as a\n // percentage of the scrollbar's height.\n const $scrollbar = this.$('.Scrubber-scrollbar');\n const offsetPixels = (e.clientY || e.originalEvent.touches[0].clientY) - $scrollbar.offset().top + $('body').scrollTop();\n let offsetPercent = (offsetPixels / $scrollbar.outerHeight()) * 100;\n\n // 2. We want the handle of the scrollbar to end up centered on the click\n // position. Thus, we calculate the height of the handle in percent and\n // use that to find a new offset percentage.\n offsetPercent = offsetPercent - parseFloat($scrollbar.find('.Scrubber-handle')[0].style.height) / 2;\n\n // 3. Now we can convert the percentage into an index, and tell the stream-\n // content component to jump to that index.\n let offsetIndex = offsetPercent / this.percentPerPost().index;\n offsetIndex = Math.max(0, Math.min(this.count() - 1, offsetIndex));\n this.stream.goToIndex(Math.floor(offsetIndex));\n this.index = offsetIndex;\n this.renderScrollbar(true);\n\n this.$().removeClass('open');\n }\n}\n","import Component from '../../common/Component';\nimport UserCard from './UserCard';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport userOnline from '../../common/helpers/userOnline';\nimport listItems from '../../common/helpers/listItems';\nimport { PostProp } from '../../common/concerns/ComponentProps';\n\n/**\n * The `PostUser` component shows the avatar and username of a post's author.\n */\nexport default class PostUser extends Component<PostProp> {\n /**\n * Whether or not the user hover card is visible.\n */\n cardVisible = false;\n\n view() {\n const post = this.props.post;\n const user = post.user();\n\n if (!user) {\n return (\n <div className=\"PostUser\">\n <h3>\n {avatar(user, { className: 'PostUser-avatar' })} {username(user)}\n </h3>\n </div>\n );\n }\n\n let card = '';\n\n if (!post.isHidden() && this.cardVisible) {\n card = UserCard.component({\n user,\n className: 'UserCard--popover',\n controlsButtonClassName: 'Button Button--icon Button--flat',\n });\n }\n\n return (\n <div className=\"PostUser\">\n <h3>\n <m.route.Link href={app.route.user(user)}>\n {avatar(user, { className: 'PostUser-avatar' })}\n {userOnline(user)}\n {username(user)}\n </m.route.Link>\n </h3>\n <ul className=\"PostUser-badges badges\">{listItems(user.badges().toArray())}</ul>\n {card}\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n let timeout;\n\n this.$()\n .on('mouseover', 'h3 a, .UserCard', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.showCard.bind(this), 500);\n })\n .on('mouseout', 'h3 a, .UserCard', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.hideCard.bind(this), 250);\n });\n }\n\n /**\n * Show the user card.\n */\n showCard() {\n this.cardVisible = true;\n\n m.redraw();\n\n setTimeout(() => this.$('.UserCard').addClass('in'));\n }\n\n /**\n * Hide the user card.\n */\n hideCard() {\n this.$('.UserCard')\n .removeClass('in')\n .one('transitionend webkitTransitionEnd oTransitionEnd', () => {\n this.cardVisible = false;\n m.redraw();\n });\n }\n}\n","import UserPage from './UserPage';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Button from '../../common/components/Button';\nimport Placeholder from '../../common/components/Placeholder';\nimport CommentPost from './CommentPost';\nimport Post from '../../common/models/Post';\n\n/**\n * The `PostsUserPage` component shows a user's activity feed inside of their\n * profile.\n */\nexport default class PostsUserPage extends UserPage {\n /**\n * Whether or not the activity feed is currently loading.\n */\n loading = true;\n\n /**\n * Whether or not there are any more activity items that can be loaded.\n */\n moreResults = false;\n\n /**\n * The Post models in the feed.\n */\n posts: Post[] = [];\n\n /**\n * The number of activity items to load per request.\n */\n loadLimit = 20;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.loadUser(vnode.attrs.username);\n }\n\n onupdate(vnode) {\n super.onupdate(vnode);\n\n this.loadUser(vnode.attrs.username);\n }\n\n content() {\n if (this.posts.length === 0 && !this.loading) {\n return (\n <div className=\"PostsUserPage\">\n <Placeholder text={app.translator.trans('core.forum.user.posts_empty_text')} />\n </div>\n );\n }\n\n let footer;\n\n if (this.loading) {\n footer = LoadingIndicator.component();\n } else if (this.moreResults) {\n footer = (\n <div className=\"PostsUserPage-loadMore\">\n {Button.component({\n children: app.translator.trans('core.forum.user.posts_load_more_button'),\n className: 'Button',\n onclick: this.loadMore.bind(this),\n })}\n </div>\n );\n }\n\n return (\n <div className=\"PostsUserPage\">\n <ul className=\"PostsUserPage-list\">\n {this.posts.map((post) => (\n <li>\n <div className=\"PostsUserPage-discussion\">\n {app.translator.trans('core.forum.user.in_discussion_text', {\n discussion: <m.route.Link href={app.route.post(post)}>{post.discussion().title()}</m.route.Link>,\n })}\n </div>\n {CommentPost.component({ post })}\n </li>\n ))}\n </ul>\n <div className=\"PostsUserPage-loadMore\">{footer}</div>\n </div>\n );\n }\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n */\n show(user) {\n super.show(user);\n\n this.refresh();\n }\n\n /**\n * Clear and reload the user's activity feed.\n */\n refresh() {\n this.loading = true;\n this.posts = [];\n\n m.redraw();\n\n this.loadResults().then(this.parseResults.bind(this));\n }\n\n /**\n * Load a new page of the user's activity feed.\n *\n * @param offset The position to start getting results from.\n */\n protected loadResults(offset?: number): Promise<Post[]> {\n return app.store.find<Post>('posts', {\n filter: {\n user: this.user.id(),\n type: 'comment',\n },\n page: { offset, limit: this.loadLimit },\n sort: '-createdAt',\n });\n }\n\n /**\n * Load the next page of results.\n */\n loadMore() {\n this.loading = true;\n this.loadResults(this.posts.length).then(this.parseResults.bind(this));\n }\n\n /**\n * Parse results and append them to the activity feed.\n */\n parseResults(results: Post[]): Post[] {\n this.loading = false;\n\n [].push.apply(this.posts, results);\n\n this.moreResults = results.length >= this.loadLimit;\n m.redraw();\n\n return results;\n }\n}\n","import app from '../app';\n\nimport Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\nimport Discussion from '../../common/models/Discussion';\n\n/**\n * The 'RenameDiscussionModal' displays a modal dialog with an input to rename a discussion\n */\nexport default class RenameDiscussionModal extends Modal {\n discussion!: Discussion;\n currentTitle!: string;\n newTitle!: Mithril.Stream<string>;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.discussion = this.props.discussion;\n this.currentTitle = this.props.currentTitle;\n this.newTitle = m.prop(this.currentTitle);\n }\n\n className() {\n return 'RenameDiscussionModal Modal--small';\n }\n\n title() {\n return app.translator.transText('core.forum.rename_discussion.title');\n }\n\n content() {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <div className=\"Form-group\">\n <input className=\"FormControl\" bidi={this.newTitle} type=\"text\" />\n </div>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.rename_discussion.submit_button'),\n })}\n </div>\n </div>\n </div>\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n const title = this.newTitle;\n const currentTitle = this.currentTitle;\n\n // If the title is different to what it was before, then save it. After the\n // save has completed, update the post stream as there will be a new post\n // indicating that the discussion was renamed.\n if (title && title !== currentTitle) {\n return this.discussion\n .save({ title })\n .then(() => {\n // if (app.viewingDiscussion(this.discussion)) {\n app.current.stream.update();\n // }\n\n m.redraw();\n this.hide();\n })\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n } else {\n this.hide();\n }\n }\n}\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport { DiscussionProp } from '../../common/concerns/ComponentProps';\n\n/**\n * The `ReplyPlaceholder` component displays a placeholder for a reply, which,\n * when clicked, opens the reply composer.\n */\nexport default class ReplyPlaceholder<T extends DiscussionProp = DiscussionProp> extends Component<T> {\n view() {\n // TODO: add method & remove `false &&`\n if (false && app.composingReplyTo(this.props.discussion)) {\n return (\n <article className=\"Post CommentPost editing\">\n <header className=\"Post-header\">\n <div className=\"PostUser\">\n <h3>\n {avatar(app.session.user, { className: 'PostUser-avatar' })}\n {username(app.session.user)}\n </h3>\n </div>\n </header>\n <div className=\"Post-body\" oncreate={this.oncreatePreview.bind(this)} />\n </article>\n );\n }\n\n const reply = () => DiscussionControls.replyAction.call(this.props.discussion, true);\n\n return (\n <article className=\"Post ReplyPlaceholder\" onclick={reply}>\n <header className=\"Post-header\">\n {avatar(app.session.user, { className: 'PostUser-avatar' })} {app.translator.trans('core.forum.post_stream.reply_placeholder')}\n </header>\n </article>\n );\n }\n\n oncreatePreview(vnode) {\n // Every 50ms, if the composer content has changed, then update the post's\n // body with a preview.\n let preview;\n const updateInterval = setInterval(() => {\n // Since we're polling, the composer may have been closed in the meantime,\n // so we bail in that case.\n if (!app.composer.component) return;\n\n const content = app.composer.component.content();\n\n if (preview === content) return;\n\n preview = content;\n\n const anchorToBottom = $(window).scrollTop() + $(window).height() >= $(document).height();\n\n s9e.TextFormatter.preview(preview || '', vnode.dom);\n\n if (anchorToBottom) {\n $(window).scrollTop($(document).height());\n }\n }, 50);\n\n vnode.attrs.onunload = () => clearInterval(updateInterval);\n }\n}\n","import Component from '../../common/Component';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport ItemList from '../../common/utils/ItemList';\nimport KeyboardNavigatable from '../utils/KeyboardNavigatable';\nimport icon from '../../common/helpers/icon';\nimport DiscussionsSearchSource from './DiscussionsSearchSource';\nimport UsersSearchSource from './UsersSearchSource';\nimport SearchSource from './SearchSource';\n\nimport Stream from 'mithril/stream';\n\n/**\n * The `Search` component displays a menu of as-you-type results from a variety\n * of sources.\n *\n * The search box will be 'activated' if the app's current controller implements\n * a `searching` method that returns a truthy value. If this is the case, an 'x'\n * button will be shown next to the search field, and clicking it will call the\n * `clearSearch` method on the controller.\n */\nexport default class Search extends Component {\n /**\n * The value of the search input.\n */\n value: Stream<string> = m.prop('');\n\n /**\n * Whether or not the search input has focus.\n */\n hasFocus: boolean = false;\n\n /**\n * An array of SearchSources.\n */\n sources?: SearchSource[];\n\n /**\n * The number of sources that are still loading results.\n */\n loadingSources = 0;\n\n /**\n * A list of queries that have been searched for.\n */\n searched: string[] = [];\n\n /**\n * The index of the currently-selected <li> in the results list. This can be\n * a unique string (to account for the fact that an item's position may jump\n * around as new results load), but otherwise it will be numeric (the\n * sequential position within the list).\n */\n index: number = 0;\n\n navigator: KeyboardNavigatable = new KeyboardNavigatable();\n\n searchTimeout?: number;\n\n view() {\n const currentSearch = this.getCurrentSearch();\n\n // Initialize search input value in the view rather than the constructor so\n // that we have access to app.current.\n if (typeof this.value() === 'undefined') {\n this.value(currentSearch || '');\n }\n\n // Initialize search sources in the view rather than the constructor so\n // that we have access to app.forum.\n if (!this.sources) {\n this.sources = this.sourceItems().toArray();\n }\n\n // Hide the search view if no sources were loaded\n if (!this.sources.length) return <div />;\n\n return (\n <div\n className={classNames(\n 'Search',\n this.value() && this.hasFocus && 'open',\n this.hasFocus && 'focused',\n !!currentSearch && 'active',\n !!this.loadingSources && 'loading'\n )}\n >\n <div className=\"Search-input\">\n <input\n className=\"FormControl\"\n type=\"search\"\n placeholder={app.translator.transText('core.forum.header.search_placeholder')}\n value={this.value()}\n oninput={m.withAttr('value', this.value)}\n onfocus={() => (this.hasFocus = true)}\n onblur={() => (this.hasFocus = false)}\n />\n {this.loadingSources ? (\n LoadingIndicator.component({ size: 'tiny', className: 'Button Button--icon Button--link' })\n ) : currentSearch ? (\n <button className=\"Search-clear Button Button--icon Button--link\" onclick={this.clear.bind(this)}>\n {icon('fas fa-times-circle')}\n </button>\n ) : (\n ''\n )}\n </div>\n <ul className=\"Dropdown-menu Search-results\">\n {this.value() && this.hasFocus ? this.sources.map((source) => source.view(this.value())) : ''}\n </ul>\n </div>\n );\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // Highlight the item that is currently selected.\n this.setIndex(this.getCurrentNumericIndex());\n\n const search = this;\n\n this.$('.Search-results')\n .on('mousedown', (e) => e.preventDefault())\n .on('click', () => this.$('input').blur())\n\n // Whenever the mouse is hovered over a search result, highlight it.\n .on('mouseenter', '> li:not(.Dropdown-header)', function (this: HTMLElement) {\n search.setIndex(search.selectableItems().index(this));\n });\n\n const $input = this.$('input');\n\n this.navigator\n .onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true))\n .onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true))\n .onSelect(this.selectResult.bind(this))\n .onCancel(this.clear.bind(this))\n .bindTo($input);\n\n // Handle input key events on the search input, triggering results to load.\n $input\n .on('input focus', function (this: HTMLInputElement) {\n const query = this.value.toLowerCase();\n\n if (!query) return;\n\n clearTimeout(search.searchTimeout);\n search.searchTimeout = setTimeout(() => {\n if (search.searched.indexOf(query) !== -1) return;\n\n if (query.length >= 3 && search.sources) {\n search.sources.map((source) => {\n if (!source.search) return;\n\n search.loadingSources++;\n\n source.search(query).then(() => {\n search.loadingSources = Math.max(0, search.loadingSources - 1);\n m.redraw();\n });\n });\n }\n\n search.searched.push(query);\n m.redraw();\n }, 250);\n })\n\n .on('focus', function (this: HTMLElement) {\n $(this)\n .one('mouseup', (e) => e.preventDefault())\n .select();\n });\n }\n\n /**\n * Get the active search in the app's current controller.\n */\n getCurrentSearch(): string | false {\n return app.current && typeof app.current.searching === 'function' && app.current.searching();\n }\n\n /**\n * Navigate to the currently selected search result and close the list.\n */\n selectResult() {\n clearTimeout(this.searchTimeout);\n this.loadingSources = 0;\n\n if (this.value()) {\n m.route.set(this.getItem(this.index).find('a').attr('href'));\n } else {\n this.clear();\n }\n\n this.$('input').blur();\n }\n\n /**\n * Clear the search input and the current controller's active search.\n */\n clear() {\n this.value('');\n\n if (this.getCurrentSearch()) {\n app.current.clearSearch();\n } else {\n m.redraw();\n }\n }\n\n /**\n * Build an item list of SearchSources.\n *\n * @return {ItemList}\n */\n sourceItems() {\n const items = new ItemList();\n\n if (app.forum.attribute('canViewDiscussions')) items.add('discussions', new DiscussionsSearchSource());\n if (app.forum.attribute('canViewUserList')) items.add('users', new UsersSearchSource());\n\n return items;\n }\n\n /**\n * Get all of the search result items that are selectable.\n */\n selectableItems() {\n return this.$('.Search-results > li:not(.Dropdown-header)');\n }\n\n /**\n * Get the position of the currently selected search result item.\n */\n getCurrentNumericIndex(): number {\n return this.selectableItems().index(this.getItem(this.index));\n }\n\n /**\n * Get the <li> in the search results with the given index (numeric or named).\n */\n getItem(index: number): ZeptoCollection {\n const $items = this.selectableItems();\n let $item = $items.filter(`[data-index=\"${index}\"]`);\n\n if (!$item.length) {\n $item = $items.eq(index);\n }\n\n return $item;\n }\n\n /**\n * Set the currently-selected search result item to the one with the given\n * index.\n *\n * @param index\n * @param scrollToItem Whether or not to scroll the dropdown so that\n * the item is in view.\n */\n setIndex(index: number, scrollToItem?: boolean) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n\n let fixedIndex = index;\n if (index < 0) {\n fixedIndex = $items.length - 1;\n } else if (index >= $items.length) {\n fixedIndex = 0;\n }\n\n const $item = $items.removeClass('active').eq(fixedIndex).addClass('active');\n\n this.index = Number($item.attr('data-index') || fixedIndex);\n\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n\n if (typeof scrollTop !== 'undefined') {\n $dropdown.animateScrollTop(scrollTop, 100);\n }\n }\n }\n}\n","export default abstract class SearchSource {\n abstract view(vnode: string);\n\n abstract search(query: string);\n}\n","import avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport Dropdown from '../../common/components/Dropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Button from '../../common/components/Button';\nimport ItemList from '../../common/utils/ItemList';\nimport Separator from '../../common/components/Separator';\nimport Group from '../../common/models/Group';\n\n/**\n * The `SessionDropdown` component shows a button with the current user's\n * avatar/name, with a dropdown of session controls.\n */\nexport default class SessionDropdown extends Dropdown {\n static initProps(props) {\n super.initProps(props);\n\n props.className = 'SessionDropdown';\n props.buttonClassName = 'Button Button--user Button--flat';\n props.menuClassName = 'Dropdown-menu--right';\n }\n\n view() {\n this.props.children = this.items().toArray();\n\n return super.view();\n }\n\n getButtonContent() {\n const user = app.session.user;\n\n return [avatar(user), ' ', <span className=\"Button-label\">{username(user)}</span>];\n }\n\n /**\n * Build an item list for the contents of the dropdown menu.\n */\n items(): ItemList {\n const items = new ItemList();\n const user = app.session.user;\n\n items.add(\n 'profile',\n LinkButton.component({\n icon: 'fas fa-user',\n children: app.translator.trans('core.forum.header.profile_button'),\n href: app.route.user(user),\n }),\n 100\n );\n\n items.add(\n 'settings',\n LinkButton.component({\n icon: 'fas fa-cog',\n children: app.translator.trans('core.forum.header.settings_button'),\n href: app.route('settings'),\n }),\n 50\n );\n\n if (app.forum.attribute('adminUrl')) {\n items.add(\n 'administration',\n LinkButton.component({\n icon: 'fas fa-wrench',\n children: app.translator.trans('core.forum.header.admin_button'),\n href: app.forum.attribute('adminUrl'),\n target: '_blank',\n }),\n 0\n );\n }\n\n items.add('separator', Separator.component(), -90);\n\n items.add(\n 'logOut',\n Button.component({\n icon: 'fas fa-sign-out-alt',\n children: app.translator.trans('core.forum.header.log_out_button'),\n onclick: app.session.logout.bind(app.session),\n }),\n -100\n );\n\n return items;\n }\n}\n","import listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\nimport FieldSet from '../../common/components/FieldSet';\nimport Switch from '../../common/components/Switch';\nimport UserPage from './UserPage';\nimport NotificationGrid from './NotificationGrid';\nimport ChangePasswordModal from './ChangePasswordModal';\nimport ChangeEmailModal from './ChangeEmailModal';\n\nexport default class SettingsPage extends UserPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.show(app.session.user);\n app.setTitle(app.translator.transText('core.forum.settings.title'));\n }\n\n content() {\n return (\n <div className=\"SettingsPage\">\n <ul>{listItems(this.settingsItems().toArray())}</ul>\n </div>\n );\n }\n\n /**\n * Build an item list for the user's settings controls.\n */\n settingsItems(): ItemList {\n const items = new ItemList();\n\n items.add(\n 'account',\n FieldSet.component({\n label: app.translator.trans('core.forum.settings.account_heading'),\n className: 'Settings-account',\n children: this.accountItems().toArray(),\n })\n );\n\n items.add(\n 'notifications',\n FieldSet.component({\n label: app.translator.trans('core.forum.settings.notifications_heading'),\n className: 'Settings-notifications',\n children: this.notificationsItems().toArray(),\n })\n );\n\n items.add(\n 'privacy',\n FieldSet.component({\n label: app.translator.trans('core.forum.settings.privacy_heading'),\n className: 'Settings-privacy',\n children: this.privacyItems().toArray(),\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the user's account settings.\n */\n accountItems(): ItemList {\n const items = new ItemList();\n\n items.add(\n 'changePassword',\n Button.component({\n children: app.translator.trans('core.forum.settings.change_password_button'),\n className: 'Button',\n onclick: () => app.modal.show(ChangePasswordModal),\n })\n );\n\n items.add(\n 'changeEmail',\n Button.component({\n children: app.translator.trans('core.forum.settings.change_email_button'),\n className: 'Button',\n onclick: () => app.modal.show(ChangeEmailModal),\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the user's notification settings.\n */\n notificationsItems(): ItemList {\n const items = new ItemList();\n\n items.add('notificationGrid', NotificationGrid.component({ user: this.user }));\n\n return items;\n }\n\n /**\n * Generate a callback that will save a value to the given preference.\n */\n preferenceSaver(key: string): Function {\n return (value, component) => {\n if (component) component.loading = true;\n m.redraw();\n\n this.user.savePreferences({ [key]: value }).then(() => {\n if (component) component.loading = false;\n m.redraw();\n });\n };\n }\n\n /**\n * Build an item list for the user's privacy settings.\n */\n privacyItems(): ItemList {\n const items = new ItemList();\n\n items.add(\n 'discloseOnline',\n Switch.component({\n children: app.translator.trans('core.forum.settings.privacy_disclose_online_label'),\n state: this.user.preferences().discloseOnline,\n onchange: (value, component) => this.preferenceSaver('discloseOnline')(value, component),\n })\n );\n\n return items;\n }\n}\n","import Stream from 'mithril/stream';\n\nimport { ComponentProps } from '../../common/Component';\nimport Modal from '../../common/components/Modal';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\n\nimport LogInButtons from './LogInButtons';\nimport LogInModal from './LogInModal';\n\nexport interface SignUpModalProps extends ComponentProps {\n username?: string;\n email?: string;\n password?: string;\n\n /**\n * An email token to sign up with\n */\n token?: string;\n\n provided?: string[];\n}\n\n/**\n * The `SignUpModal` component displays a modal dialog with a singup form.\n */\nexport default class SignUpModal extends Modal<SignUpModalProps> {\n /**\n * The value of the username input.\n */\n username!: Stream<string>;\n\n /**\n * The value of the email input.\n */\n email!: Stream<string>;\n\n /**\n * The value of the password input.\n */\n password!: Stream<string>;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.username = m.prop(this.props.username || '');\n\n this.email = m.prop(this.props.email || '');\n\n this.password = m.prop(this.props.password || '');\n }\n\n className() {\n return 'Modal--small SignUpModal';\n }\n\n title() {\n return app.translator.transText('core.forum.sign_up.title');\n }\n\n content() {\n return [<div className=\"Modal-body\">{this.body()}</div>, <div className=\"Modal-footer\">{this.footer()}</div>];\n }\n\n isProvided(field) {\n return this.props.provided && this.props.provided.indexOf(field) !== -1;\n }\n\n body() {\n return [this.props.token ? '' : <LogInButtons />, <div className=\"Form Form--centered\">{this.fields().toArray()}</div>];\n }\n\n fields() {\n const items = new ItemList();\n\n items.add(\n 'username',\n <div className=\"Form-group\">\n <input\n className=\"FormControl\"\n name=\"username\"\n type=\"text\"\n placeholder={app.translator.transText('core.forum.sign_up.username_placeholder')}\n value={this.username()}\n onchange={m.withAttr('value', this.username)}\n disabled={this.loading || this.isProvided('username')}\n />\n </div>,\n 30\n );\n\n items.add(\n 'email',\n <div className=\"Form-group\">\n <input\n className=\"FormControl\"\n name=\"email\"\n type=\"email\"\n placeholder={app.translator.transText('core.forum.sign_up.email_placeholder')}\n value={this.email()}\n onchange={m.withAttr('value', this.email)}\n disabled={this.loading || this.isProvided('email')}\n />\n </div>,\n 20\n );\n\n if (!this.props.token) {\n items.add(\n 'password',\n <div className=\"Form-group\">\n <input\n className=\"FormControl\"\n name=\"password\"\n type=\"password\"\n placeholder={app.translator.transText('core.forum.sign_up.password_placeholder')}\n value={this.password()}\n onchange={m.withAttr('value', this.password)}\n disabled={this.loading}\n />\n </div>,\n 10\n );\n }\n\n items.add(\n 'submit',\n <div className=\"Form-group\">\n <Button className=\"Button Button--primary Button--block\" type=\"submit\" loading={this.loading}>\n {app.translator.trans('core.forum.sign_up.submit_button')}\n </Button>\n </div>,\n -10\n );\n\n return items;\n }\n\n footer() {\n return [\n <p className=\"SignUpModal-logIn\">\n {app.translator.trans('core.forum.sign_up.log_in_text', {\n a: <a onclick={this.logIn.bind(this)} />,\n })}\n </p>,\n ];\n }\n\n /**\n * Open the log in modal, prefilling it with an email/username/password if\n * the user has entered one.\n *\n * @public\n */\n logIn() {\n const props = {\n identification: this.email() || this.username(),\n password: this.password(),\n };\n\n app.modal.show(LogInModal, props);\n }\n\n onready() {\n if (this.props.username && !this.props.email) {\n this.$('[name=email]').select();\n } else {\n this.$('[name=username]').select();\n }\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n const data = this.submitData();\n\n app.request({\n url: app.forum.attribute('baseUrl') + '/register',\n method: 'POST',\n data,\n errorHandler: this.onerror.bind(this),\n }).then(() => window.location.reload(), this.loaded.bind(this));\n }\n\n /**\n * Get the data that should be submitted in the sign-up request.\n *\n * @return {Object}\n * @public\n */\n submitData() {\n const data = {\n username: this.username(),\n email: this.email(),\n };\n\n if (this.props.token) {\n data.token = this.props.token;\n } else {\n data.password = this.password();\n }\n\n return data;\n }\n}\n","import Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport icon from '../../common/helpers/icon';\nimport Post from '../../common/models/Post';\nimport { DiscussionProp } from '../../common/concerns/ComponentProps';\n\nexport interface TerminalPostProps extends DiscussionProp {\n lastPost: Post;\n}\n\n/**\n * Displays information about a the first or last post in a discussion.\n */\nexport default class TerminalPost<T extends TerminalPostProps = TerminalPostProps> extends Component<T> {\n view() {\n const discussion = this.props.discussion;\n const lastPost = this.props.lastPost && discussion.replyCount();\n\n const user = discussion[lastPost ? 'lastPostedUser' : 'user']();\n const time = discussion[lastPost ? 'lastPostedAt' : 'createdAt']();\n\n return (\n <span>\n {lastPost ? icon('fas fa-reply') : ''}{' '}\n {app.translator.trans(`core.forum.discussion_list.${lastPost ? 'replied' : 'started'}_text`, {\n user,\n ago: humanTime(time),\n })}\n </span>\n );\n }\n}\n","import Component, { ComponentProps } from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport UserControls from '../utils/UserControls';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport icon from '../../common/helpers/icon';\nimport Dropdown from '../../common/components/Dropdown';\nimport AvatarEditor from './AvatarEditor';\nimport listItems from '../../common/helpers/listItems';\nimport User from '../../common/models/User';\n\nexport interface UserCardProps extends ComponentProps {\n user: User;\n editable: boolean;\n controlsButtonClassName: string;\n}\n\n/**\n * The `UserCard` component displays a user's profile card. This is used both on\n * the `UserPage` (in the hero) and in discussions, shown when hovering over a\n * post author.\n */\nexport default class UserCard extends Component<UserCardProps> {\n view() {\n const user = this.props.user;\n const controls = UserControls.controls(user, this).toArray();\n const color = user.color();\n const badges = user.badges().toArray();\n\n return (\n <div className={'UserCard ' + (this.props.className || '')} style={color ? { backgroundColor: color } : ''}>\n <div className=\"darkenBackground\">\n <div className=\"container\">\n {controls.length\n ? Dropdown.component({\n children: controls,\n className: 'UserCard-controls App-primaryControl',\n menuClassName: 'Dropdown-menu--right',\n buttonClassName: this.props.controlsButtonClassName,\n label: app.translator.trans('core.forum.user_controls.button'),\n icon: 'fas fa-ellipsis-v',\n })\n : ''}\n\n <div className=\"UserCard-profile\">\n <h2 className=\"UserCard-identity\">\n {this.props.editable ? (\n [AvatarEditor.component({ user, className: 'UserCard-avatar' }), username(user)]\n ) : (\n <m.route.Link href={app.route.user(user)}>\n <div className=\"UserCard-avatar\">{avatar(user)}</div>\n {username(user)}\n </m.route.Link>\n )}\n </h2>\n\n {badges.length ? <ul className=\"UserCard-badges badges\">{listItems(badges)}</ul> : ''}\n\n <ul className=\"UserCard-info\">{listItems(this.infoItems().toArray())}</ul>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n /**\n * Build an item list of tidbits of info to show on this user's profile.\n *\n * @return {ItemList}\n */\n infoItems() {\n const items = new ItemList();\n const user = this.props.user;\n const lastSeenAt = user.lastSeenAt();\n\n if (lastSeenAt) {\n const online = user.isOnline();\n\n items.add(\n 'lastSeen',\n <span className={'UserCard-lastSeen' + (online ? ' online' : '')}>\n {online\n ? [icon('fas fa-circle'), ' ', app.translator.trans('core.forum.user.online_text')]\n : [icon('far fa-clock'), ' ', humanTime(lastSeenAt)]}\n </span>\n );\n }\n\n items.add('joined', app.translator.trans('core.forum.user.joined_date_text', { ago: humanTime(user.joinTime()) }));\n\n return items;\n }\n}\n","import Page from './Page';\nimport ItemList from '../../common/utils/ItemList';\nimport affixSidebar from '../utils/affixSidebar';\nimport UserCard from './UserCard';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Separator from '../../common/components/Separator';\nimport listItems from '../../common/helpers/listItems';\n\nimport User from '../../common/models/User';\n\n/**\n * The `UserPage` component shows a user's profile. It can be extended to show\n * content inside of the content area. See `ActivityPage` and `SettingsPage` for\n * examples.\n */\nexport default abstract class UserPage extends Page {\n /**\n * The user this page is for.\n */\n user: User;\n bodyClass: string = 'App--user';\n\n /**\n * The username of the currently loaded user\n */\n username: string;\n\n view() {\n return (\n <div className=\"UserPage\">\n {this.user\n ? [\n UserCard.component({\n user: this.user,\n className: 'Hero UserHero',\n editable: this.user.canEdit() || this.user === app.session.user,\n controlsButtonClassName: 'Button',\n }),\n <div className=\"container\">\n <div className=\"sideNavContainer\">\n <nav className=\"sideNav UserPage-nav\" config={affixSidebar}>\n <ul>{listItems(this.sidebarItems().toArray())}</ul>\n </nav>\n <div className=\"sideNavOffset UserPage-content\">{this.content()}</div>\n </div>\n </div>,\n ]\n : [LoadingIndicator.component({ lassName: 'LoadingIndicator--block' })]}\n </div>\n );\n }\n\n /**\n * Get the content to display in the user page.\n */\n abstract content();\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n */\n protected show(user: User) {\n this.user = user;\n\n app.setTitle(user.displayName());\n\n m.redraw();\n }\n\n /**\n * Given a username, load the user's profile from the store, or make a request\n * if we don't have it yet. Then initialize the profile page with that user.\n */\n loadUser(username: string) {\n const lowercaseUsername = username.toLowerCase();\n\n // Load the preloaded user object, if any, into the global app store\n // We don't use the output of the method because it returns raw JSON\n // instead of the parsed models\n app.preloadedApiDocument();\n\n if (lowercaseUsername == this.username) return;\n\n this.username = lowercaseUsername;\n\n app.store.all<User>('users').some((user) => {\n if ((user.username().toLowerCase() === lowercaseUsername || user.id() === username) && user.joinTime()) {\n this.show(user);\n return true;\n }\n });\n\n if (!this.user) {\n app.store.find('users', username).then(this.show.bind(this));\n }\n }\n\n /**\n * Build an item list for the content of the sidebar.\n */\n sidebarItems() {\n const items = new ItemList();\n\n items.add(\n 'nav',\n SelectDropdown.component({\n children: this.navItems().toArray(),\n className: 'App-titleControl',\n buttonClassName: 'Button',\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar.\n */\n navItems() {\n const items = new ItemList();\n const user = this.user;\n\n items.add(\n 'posts',\n LinkButton.component({\n href: app.route('user.posts', { username: user.username() }),\n children: [app.translator.trans('core.forum.user.posts_link'), <span className=\"Button-badge\">{user.commentCount()}</span>],\n icon: 'far fa-comment',\n }),\n 100\n );\n\n items.add(\n 'discussions',\n LinkButton.component({\n href: app.route('user.discussions', { username: user.username() }),\n children: [app.translator.trans('core.forum.user.discussions_link'), <span className=\"Button-badge\">{user.discussionCount()}</span>],\n icon: 'fas fa-bars',\n }),\n 90\n );\n\n if (app.session.user === user) {\n items.add('separator', Separator.component(), -90);\n items.add(\n 'settings',\n LinkButton.component({\n href: app.route('settings'),\n children: app.translator.trans('core.forum.user.settings_link'),\n icon: 'fas fa-cog',\n }),\n -100\n );\n }\n\n return items;\n }\n}\n","import highlight from '../../common/helpers/highlight';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport SearchSource from './SearchSource';\nimport User from '../../common/models/User';\n\n/**\n * The `UsersSearchSource` finds and displays user search results in the search\n * dropdown.\n *\n * @implements SearchSource\n */\nexport default class UsersSearchSource extends SearchSource {\n protected results: { [key: string]: User[] } = {};\n\n search(query: string) {\n return app.store\n .find<User>('users', {\n filter: { q: query },\n page: { limit: 5 },\n })\n .then((results) => {\n this.results[query] = results;\n m.redraw();\n });\n }\n\n view(query: string) {\n query = query.toLowerCase();\n\n const results = (this.results[query] || [])\n .concat(\n app.store\n .all<User>('users')\n .filter((user) => [user.username(), user.displayName()].some((value) => value.toLowerCase().substr(0, query.length) === query))\n )\n .filter((e, i, arr) => arr.lastIndexOf(e) === i)\n .sort((a, b) => a.displayName().localeCompare(b.displayName()));\n\n if (!results.length) return '';\n\n return [\n <li className=\"Dropdown-header\">{app.translator.trans('core.forum.search.users_heading')}</li>,\n results.map((user) => {\n const name = username(user);\n\n if (!name.children) {\n name.children = [name.text];\n delete name.text;\n }\n\n name.children[0] = highlight(name.children[0], query);\n\n return (\n <li className=\"UserSearchResult\" data-index={'users' + user.id()}>\n <m.route.Link href={app.route.user(user)}>\n {avatar(user)}\n {name}\n </m.route.Link>\n </li>\n );\n }),\n ];\n }\n}\n","import Component from '../../common/Component';\nimport Button from '../../common/components/Button';\n\n/**\n * The `WelcomeHero` component displays a hero that welcomes the user to the\n * forum.\n */\nexport default class WelcomeHero extends Component {\n hidden = !!localStorage.getItem('welcomeHidden');\n\n view() {\n if (this.hidden) return <div />;\n\n const slideUp = () => this.$().slideUp(this.hide.bind(this));\n\n return (\n <header className=\"Hero WelcomeHero\">\n <div class=\"container\">\n <Button icon=\"fas fa-times\" className=\"Hero-close Button Button--icon Button--link\" onclick={slideUp} />\n\n <div className=\"containerNarrow\">\n <h2 className=\"Hero-title\">{app.forum.attribute('welcomeTitle')}</h2>\n <div className=\"Hero-subtitle\">{m.trust(app.forum.attribute('welcomeMessage'))}</div>\n </div>\n </div>\n </header>\n );\n }\n\n /**\n * Hide the welcome hero.\n */\n hide() {\n localStorage.setItem('welcomeHidden', 'true');\n\n this.hidden = true;\n }\n}\n","import 'expose-loader?ColorThief!colorthief/dist/color-thief.umd';\n\nimport app from './app';\n\nexport { app };\n\n// Export compat API\nimport compat from './compat';\n\ncompat.app = app;\n\nexport { compat };\n","import IndexPage from './components/IndexPage';\nimport DiscussionPage from './components/DiscussionPage';\nimport PostsUserPage from './components/PostsUserPage';\nimport DiscussionsUserPage from './components/DiscussionsUserPage';\nimport SettingsPage from './components/SettingsPage';\nimport NotificationsPage from './components/NotificationsPage';\n\nimport Discussion from '../common/models/Discussion';\nimport Post from '../common/models/Post';\nimport User from '../common/models/User';\n\nexport default (app) => {\n app.routes = {\n index: { path: '/all', component: IndexPage },\n\n discussion: { path: '/d/:id', component: DiscussionPage },\n 'discussion.near': { path: '/d/:id/:near', component: DiscussionPage },\n\n user: { path: '/u/:username', component: PostsUserPage },\n 'user.posts': { path: '/u/:username', component: PostsUserPage },\n 'user.discussions': { path: '/u/:username/discussions', component: DiscussionsUserPage },\n\n settings: { path: '/settings', component: SettingsPage },\n notifications: { path: '/notifications', component: NotificationsPage },\n\n 'index.filter': { path: '/:filter', component: IndexPage },\n };\n\n /**\n * Generate a URL to a discussion.\n */\n app.route.discussion = (discussion: Discussion, near?: number): string => {\n const slug = discussion?.slug();\n const hasNear = near && near !== 1;\n\n return app.route(hasNear ? 'discussion.near' : 'discussion', {\n id: discussion.id() + (slug.trim() ? '-' + slug : ''),\n near: hasNear && near,\n });\n };\n\n /**\n * Generate a URL to a post.\n */\n app.route.post = (post: Post): string => {\n return app.route.discussion(post.discussion(), post.number());\n };\n\n /**\n * Generate a URL to a user.\n */\n app.route.user = (user: User): string => {\n return app.route('user', {\n username: user.username(),\n });\n };\n};\n","import DiscussionPage from '../components/DiscussionPage';\n// import ReplyComposer from '../components/ReplyComposer';\nimport LogInModal from '../components/LogInModal';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport RenameDiscussionModal from '../components/RenameDiscussionModal';\nimport ItemList from '../../common/utils/ItemList';\nimport extractText from '../../common/utils/extractText';\nimport Discussion from '../../common/models/Discussion';\n\n/**\n * The `DiscussionControls` utility constructs a list of buttons for a\n * discussion which perform actions on it.\n */\nexport default {\n /**\n * Get a list of controls for a discussion.\n *\n * @param discussion\n * @param context The parent component under which the controls menu will\n * be displayed\n * @public\n */\n controls(discussion: Discussion, context: any): ItemList {\n const items = new ItemList();\n\n ['user', 'moderation', 'destructive'].forEach((section) => {\n const controls = this[section](discussion, context).toArray();\n if (controls.length) {\n controls.forEach((item) => items.add(item.itemName, item));\n items.add(section + 'Separator', Separator.component());\n }\n });\n\n return items;\n },\n\n /**\n * Get controls for a discussion pertaining to the current user (e.g. reply,\n * follow).\n *\n * @param discussion\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @protected\n */\n user(discussion: Discussion, context: any): ItemList {\n const items = new ItemList();\n\n // Only add a reply control if this is the discussion's controls dropdown\n // for the discussion page itself. We don't want it to show up for\n // discussions in the discussion list, etc.\n if (context instanceof DiscussionPage) {\n items.add(\n 'reply',\n !app.session.user || discussion.canReply()\n ? Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans(\n app.session.user\n ? 'core.forum.discussion_controls.reply_button'\n : 'core.forum.discussion_controls.log_in_to_reply_button'\n ),\n onclick: this.replyAction.bind(discussion, true, false),\n })\n : Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans('core.forum.discussion_controls.cannot_reply_button'),\n className: 'disabled',\n title: app.translator.transText('core.forum.discussion_controls.cannot_reply_text'),\n })\n );\n }\n\n return items;\n },\n\n /**\n * Get controls for a discussion pertaining to moderation (e.g. rename, lock).\n *\n * @param discussion\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @protected\n */\n moderation(discussion, context: any): ItemList {\n const items = new ItemList();\n\n if (discussion.canRename()) {\n items.add(\n 'rename',\n Button.component({\n icon: 'fas fa-pencil-alt',\n children: app.translator.trans('core.forum.discussion_controls.rename_button'),\n onclick: this.renameAction.bind(discussion),\n })\n );\n }\n\n return items;\n },\n\n /**\n * Get controls for a discussion which are destructive (e.g. delete).\n *\n * @param discussion\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @protected\n */\n destructive(discussion: Discussion, context: any): ItemList {\n const items = new ItemList();\n\n if (!discussion.isHidden()) {\n if (discussion.canHide()) {\n items.add(\n 'hide',\n Button.component({\n icon: 'far fa-trash-alt',\n children: app.translator.trans('core.forum.discussion_controls.delete_button'),\n onclick: this.hideAction.bind(discussion),\n })\n );\n }\n } else {\n if (discussion.canHide()) {\n items.add(\n 'restore',\n Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans('core.forum.discussion_controls.restore_button'),\n onclick: this.restoreAction.bind(discussion),\n })\n );\n }\n\n if (discussion.canDelete()) {\n items.add(\n 'delete',\n Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.discussion_controls.delete_forever_button'),\n onclick: this.deleteAction.bind(discussion),\n })\n );\n }\n }\n\n return items;\n },\n\n /**\n * Open the reply composer for the discussion. A promise will be returned,\n * which resolves when the composer opens successfully. If the user is not\n * logged in, they will be prompted. If they don't have permission to\n * reply, the promise will be rejected.\n *\n * @param goToLast Whether or not to scroll down to the last post if\n * the discussion is being viewed.\n * @param forceRefresh Whether or not to force a reload of the\n * composer component, even if it is already open for this discussion.\n */\n replyAction(this: Discussion, goToLast: boolean, forceRefresh: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n if (app.session.user) {\n if (this.canReply()) {\n let component = app.composer.component;\n if (!app.composingReplyTo(this) || forceRefresh) {\n component = new ReplyComposer({\n user: app.session.user,\n discussion: this,\n });\n app.composer.load(component);\n }\n\n app.composer.show();\n\n if (goToLast && app.viewingDiscussion(this) && !app.composer.isFullScreen()) {\n app.current.stream.goToNumber('reply');\n }\n\n return resolve(component);\n } else {\n return reject();\n }\n }\n\n app.modal.show(LogInModal);\n\n reject();\n });\n },\n\n /**\n * Hide a discussion.\n */\n hideAction(this: Discussion) {\n this.pushAttributes({ hiddenAt: new Date(), hiddenUser: app.session.user });\n\n return this.save({ isHidden: true });\n },\n\n /**\n * Restore a discussion.\n */\n restoreAction(this: Discussion) {\n this.pushAttributes({ hiddenAt: null, hiddenUser: null });\n\n return this.save({ isHidden: false });\n },\n\n /**\n * Delete the discussion after confirming with the user.\n */\n deleteAction(this: Discussion) {\n if (confirm(extractText(app.translator.trans('core.forum.discussion_controls.delete_confirmation')))) {\n // If we're currently viewing the discussion that was deleted, go back\n // to the previous page.\n if (app.viewingDiscussion(this)) {\n app.history.back();\n }\n\n return this.delete().then(() => {\n // If there is a discussion list in the cache, remove this discussion.\n if (app.cache.discussionList) {\n app.cache.discussionList.removeDiscussion(this);\n m.redraw();\n }\n });\n }\n },\n\n /**\n * Rename the discussion.\n */\n renameAction(this: Discussion) {\n return app.modal.show(RenameDiscussionModal, {\n currentTitle: this.title(),\n discussion: this,\n });\n },\n};\n","export interface StackItem {\n name: string;\n title?: string;\n url: string;\n}\n\n/**\n * The `History` class keeps track and manages a stack of routes that the user\n * has navigated to in their session.\n *\n * An item can be pushed to the top of the stack using the `push` method. An\n * item in the stack has a name and a URL. The name need not be unique; if it is\n * the same as the item before it, that will be overwritten with the new URL. In\n * this way, if a user visits a discussion, and then visits another discussion,\n * popping the history stack will still take them back to the discussion list\n * rather than the previous discussion.\n */\nexport default class History {\n /**\n * The stack of routes that have been navigated to.\n */\n protected stack: StackItem[] = [];\n\n /**\n * Get the item on the top of the stack.\n */\n getCurrent(): StackItem {\n return this.stack[this.stack.length - 1];\n }\n\n /**\n * Get the previous item on the stack.\n */\n getPrevious(): StackItem {\n return this.stack[this.stack.length - 2];\n }\n\n /**\n * Push an item to the top of the stack.\n *\n * @param name The name of the route.\n * @param title The title of the route.\n * @param [url] The URL of the route. The current URL will be used if\n * not provided.\n */\n push(name: string, title?: string, url: string = m.route.get()) {\n // If we're pushing an item with the same name as second-to-top item in the\n // stack, we will assume that the user has clicked the 'back' button in\n // their browser. In this case, we don't want to push a new item, so we will\n // pop off the top item, and then the second-to-top item will be overwritten\n // below.\n const secondTop = this.stack[this.stack.length - 2];\n if (secondTop && secondTop.name === name) {\n this.stack.pop();\n }\n\n // If we're pushing an item with the same name as the top item in the stack,\n // then we'll overwrite it with the new URL.\n const top = this.getCurrent();\n if (top && top.name === name) {\n Object.assign(top, { url, title });\n } else {\n this.stack.push({ name, url, title });\n }\n }\n\n /**\n * Check whether or not the history stack is able to be popped.\n */\n canGoBack(): boolean {\n return this.stack.length > 1;\n }\n\n /**\n * Go back to the previous route in the history stack.\n */\n back() {\n if (!this.canGoBack()) {\n return this.home();\n }\n\n this.stack.pop();\n\n m.route.set(this.getCurrent().url);\n }\n\n /**\n * Get the URL of the previous page.\n */\n backUrl(): string {\n const secondTop = this.stack[this.stack.length - 2];\n\n return secondTop.url;\n }\n\n /**\n * Go to the first route in the history stack.\n */\n home() {\n this.stack.splice(0);\n\n m.route.set('/');\n }\n}\n","export type KeyboardEventCallback = (KeyboardEvent) => boolean | void;\n\n/**\n * The `KeyboardNavigatable` class manages lists that can be navigated with the\n * keyboard, calling callbacks for each actions.\n *\n * This helper encapsulates the key binding logic, providing a simple fluent\n * API for use.\n */\nexport default class KeyboardNavigatable {\n /**\n * Callback to be executed for a specified input.\n *\n * @callback KeyboardNavigatable~keyCallback\n * @param {KeyboardEvent} event\n * @returns {boolean}\n */\n callbacks: { [key: number]: KeyboardEventCallback } = {};\n\n // By default, always handle keyboard navigation.\n whenCallback: KeyboardEventCallback = () => true;\n\n /**\n * Provide a callback to be executed when navigating upwards.\n *\n * This will be triggered by the Up key.\n */\n onUp(callback: KeyboardEventCallback): this {\n this.callbacks[38] = (e) => {\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when navigating downwards.\n *\n * This will be triggered by the Down key.\n */\n onDown(callback: KeyboardEventCallback): this {\n this.callbacks[40] = (e) => {\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when the current item is selected..\n *\n * This will be triggered by the Return and Tab keys..\n */\n onSelect(callback: KeyboardEventCallback): this {\n this.callbacks[9] = this.callbacks[13] = (e) => {\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when the navigation is canceled.\n *\n * This will be triggered by the Escape key.\n */\n onCancel(callback: Function): this {\n this.callbacks[27] = (e) => {\n e.stopPropagation();\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when previous input is removed.\n *\n * This will be triggered by the Backspace key.\n */\n onRemove(callback: Function): this {\n this.callbacks[8] = (e) => {\n if (e.target.selectionStart === 0 && e.target.selectionEnd === 0) {\n callback(e);\n e.preventDefault();\n }\n };\n\n return this;\n }\n\n /**\n * Provide a callback that determines whether keyboard input should be handled.\n */\n when(callback: KeyboardEventCallback): this {\n this.whenCallback = callback;\n\n return this;\n }\n\n /**\n * Set up the navigation key bindings on the given jQuery element.\n */\n bindTo($element: any) {\n // Handle navigation key events on the navigatable element.\n $element.on('keydown', this.navigate.bind(this));\n }\n\n /**\n * Interpret the given keyboard event as navigation commands.\n */\n navigate(event: KeyboardEvent) {\n // This callback determines whether keyboard should be handled or ignored.\n if (!this.whenCallback(event)) return;\n\n const keyCallback = this.callbacks[event.which];\n if (keyCallback) {\n keyCallback(event);\n }\n }\n}\n","/**\n * The `Pane` class manages the page's discussion list sidepane. The pane is a\n * part of the content view (DiscussionPage component), but its visibility is\n * determined by CSS classes applied to the outer page element. This class\n * manages the application of those CSS classes.\n */\nexport default class Pane {\n /**\n * The localStorage key to store the pane's pinned state with.\n */\n protected pinnedKey = 'panePinned';\n\n /**\n * The page element.\n */\n protected $element;\n\n /**\n * Whether or not the pane is currently pinned.\n */\n protected pinned = !!localStorage.getItem(this.pinnedKey);\n\n /**\n * Whether or not the pane is currently showing, or is hidden off the edge\n * of the screen.\n */\n protected showing: boolean = false;\n\n active: boolean = false;\n\n hideTimeout?: number;\n\n constructor(element) {\n this.$element = $(element);\n\n this.render();\n }\n\n /**\n * Enable the pane.\n */\n public enable() {\n this.active = true;\n this.render();\n }\n\n /**\n * Disable the pane.\n */\n public disable() {\n this.active = false;\n this.showing = false;\n this.render();\n }\n\n /**\n * Show the pane.\n */\n public show() {\n clearTimeout(this.hideTimeout);\n this.showing = true;\n this.render();\n }\n\n /**\n * Hide the pane.\n */\n public hide() {\n this.showing = false;\n this.render();\n }\n\n /**\n * Begin a timeout to hide the pane, which can be cancelled by showing the\n * pane.\n */\n public onmouseleave() {\n this.hideTimeout = setTimeout(this.hide.bind(this), 250);\n }\n\n /**\n * Toggle whether or not the pane is pinned.\n */\n public togglePinned() {\n this.pinned = !this.pinned;\n\n localStorage.setItem(this.pinnedKey, this.pinned ? 'true' : 'false');\n\n this.render();\n }\n\n /**\n * Apply the appropriate CSS classes to the page element.\n */\n protected render() {\n this.$element.toggleClass('panePinned', this.pinned).toggleClass('hasPane', this.active).toggleClass('paneShowing', this.showing);\n }\n}\n","// import EditPostComposer from '../components/EditPostComposer';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport ItemList from '../../common/utils/ItemList';\nimport Post from '../../common/models/Post';\nimport PostComponent from '../../forum/components/Post';\n\n/**\n * The `PostControls` utility constructs a list of buttons for a post which\n * perform actions on it.\n */\nexport default {\n /**\n * Get a list of controls for a post.\n *\n * @param post\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @public\n */\n controls(post: Post, context: any) {\n const items = new ItemList();\n\n ['user', 'moderation', 'destructive'].forEach((section) => {\n const controls = this[section](post, context).toArray();\n\n if (controls.length) {\n controls.forEach((item) => items.add(item.itemName, item));\n items.add(section + 'Separator', Separator.component());\n }\n });\n\n return items;\n },\n\n /**\n * Get controls for a post pertaining to the current user (e.g. report).\n *\n * @param post\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @protected\n */\n user(post: Post, context: any) {\n return new ItemList();\n },\n\n /**\n * Get controls for a post pertaining to moderation (e.g. edit).\n *\n * @param post\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @protected\n */\n moderation(post: Post, context: any) {\n const items = new ItemList();\n\n if (post.contentType() === 'comment' && post.canEdit()) {\n if (!post.isHidden()) {\n items.add(\n 'edit',\n Button.component(\n {\n icon: 'fas fa-pencil-alt',\n onclick: this.editAction.bind(post),\n },\n app.translator.trans('core.forum.post_controls.edit_button')\n )\n );\n }\n }\n\n return items;\n },\n\n /**\n * Get controls for a post that are destructive (e.g. delete).\n *\n * @param post\n * @param context The parent component under which the controls menu will\n * be displayed.\n * @protected\n */\n destructive(post: Post, context: any) {\n const items = new ItemList();\n\n if (post.contentType() === 'comment' && !post.isHidden()) {\n if (post.canHide()) {\n items.add(\n 'hide',\n Button.component({\n icon: 'far fa-trash-alt',\n children: app.translator.trans('core.forum.post_controls.delete_button'),\n onclick: this.hideAction.bind(post),\n })\n );\n }\n } else {\n if (post.contentType() === 'comment' && post.canHide()) {\n items.add(\n 'restore',\n Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans('core.forum.post_controls.restore_button'),\n onclick: this.restoreAction.bind(post),\n })\n );\n }\n if (post.canDelete()) {\n items.add(\n 'delete',\n Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.post_controls.delete_forever_button'),\n onclick: this.deleteAction.bind(post, context),\n })\n );\n }\n }\n\n return items;\n },\n\n /**\n * Open the composer to edit a post.\n */\n editAction(this: Post) {\n return new Promise<EditPostComposer>((resolve) => {\n const component = new EditPostComposer({ post: this });\n\n app.composer.load(component);\n app.composer.show();\n\n resolve(component);\n });\n },\n\n /**\n * Hide a post.\n */\n hideAction(this: Post) {\n this.pushAttributes({ hiddenAt: new Date(), hiddenUser: app.session.user });\n\n return this.save({ isHidden: true }).then(() => m.redraw());\n },\n\n /**\n * Restore a post.\n */\n restoreAction(this: Post) {\n this.pushAttributes({ hiddenAt: null, hiddenUser: null });\n\n return this.save({ isHidden: false }).then(() => m.redraw());\n },\n\n /**\n * Delete a post.\n */\n deleteAction(this: Post, context: PostComponent) {\n if (context) context.loading = true;\n\n return this.delete()\n .then(() => {\n const discussion = this.discussion();\n\n discussion.removePost(this.id());\n\n // If this was the last post in the discussion, then we will assume that\n // the whole discussion was deleted too.\n if (!discussion.postIds().length) {\n // If there is a discussion list in the cache, remove this discussion.\n if (app.cache.discussionList) {\n app.cache.discussionList.removeDiscussion(discussion);\n }\n\n if (app.viewingDiscussion(discussion)) {\n app.history.back();\n }\n }\n })\n .catch(() => {})\n .then(() => {\n if (context) context.loading = false;\n m.redraw();\n });\n },\n};\n","import Alert from '../../common/components/Alert';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport EditUserModal from '../components/EditUserModal';\nimport UserPage from '../components/UserPage';\nimport ItemList from '../../common/utils/ItemList';\nimport User from '../../common/models/User';\n\n/**\n * The `UserControls` utility constructs a list of buttons for a user which\n * perform actions on it.\n */\nexport default {\n /**\n * Get a list of controls for a user.\n *\n * @param user\n * @param context The parent component under which the controls menu will\n * be displayed.\n */\n controls(user: User, context: any): ItemList {\n const items = new ItemList();\n\n ['user', 'moderation', 'destructive'].forEach((section) => {\n const controls = this[section](user, context).toArray();\n if (controls.length) {\n controls.forEach((item) => items.add(item.itemName, item));\n items.add(section + 'Separator', Separator.component());\n }\n });\n\n return items;\n },\n\n /**\n * Get controls for a user pertaining to the current user (e.g. poke, follow).\n */\n user(): ItemList {\n return new ItemList();\n },\n\n /**\n * Get controls for a user pertaining to moderation (e.g. suspend, edit).\n */\n moderation(user: User): ItemList {\n const items = new ItemList();\n\n if (user.canEdit()) {\n items.add(\n 'edit',\n Button.component({\n icon: 'fas fa-pencil-alt',\n children: app.translator.trans('core.forum.user_controls.edit_button'),\n onclick: this.editAction.bind(this, user),\n })\n );\n }\n\n return items;\n },\n\n /**\n * Get controls for a user which are destructive (e.g. delete).\n */\n destructive(user: User): ItemList {\n const items = new ItemList();\n\n if (user.id() !== '1' && user.canDelete()) {\n items.add(\n 'delete',\n Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.user_controls.delete_button'),\n onclick: this.deleteAction.bind(this, user),\n })\n );\n }\n\n return items;\n },\n\n /**\n * Delete the user.\n */\n deleteAction(user: User) {\n if (!confirm(app.translator.transText('core.forum.user_controls.delete_confirmation'))) {\n return;\n }\n\n user.delete()\n .then(() => {\n this.showDeletionAlert(user, 'success');\n if (app.current instanceof UserPage && app.current.user === user) {\n app.history.back();\n } else {\n window.location.reload();\n }\n })\n .catch(() => this.showDeletionAlert(user, 'error'));\n },\n\n /**\n * Show deletion alert of user.\n */\n showDeletionAlert(user: User, type: string) {\n const { username, email } = user.data.attributes;\n const message = `core.forum.user_controls.delete_${type}_message`;\n\n app.alerts.show(\n Alert.component({\n type,\n children: app.translator.trans(message, { username, email }),\n })\n );\n },\n\n /**\n * Edit the user.\n */\n editAction(user: User) {\n app.modal.show(EditUserModal, { user });\n },\n};\n","/**\n * Setup the sidebar DOM element to be affixed to the top of the viewport\n * using hcSticky.\n */\nexport default function affixSidebar(vnode) {\n const element = vnode.dom;\n const $sidebar = $(element);\n const $header = $('#header');\n const $affixElement = $sidebar.find('> ul')[0];\n\n $(window).off('.affix');\n\n new hcSticky($affixElement, {\n stickTo: element,\n top: $header.outerHeight(true) + parseInt($sidebar.css('margin-top'), 10),\n });\n}\n","module.exports = m;"],"sourceRoot":""} |