Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendors~files-modal.js.map')
-rw-r--r--js/vendors~files-modal.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/js/vendors~files-modal.js.map b/js/vendors~files-modal.js.map
index 56e047d03..7b3d8da10 100644
--- a/js/vendors~files-modal.js.map
+++ b/js/vendors~files-modal.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.string.trim.js","webpack:///./node_modules/core-js/internals/string-trim-forced.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///../lib/gettext.ts","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///NextcloudVue.[name]/webpack/universalModuleDefinition","webpack:///NextcloudVue.[name]/webpack/bootstrap","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/api.js","webpack:///NextcloudVue.[name]/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///NextcloudVue.[name]/node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/getUrl.js","webpack:///webpack:/NextcloudVue.[name]/external \"vue\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.object.to-string.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"v-tooltip\"","webpack:///NextcloudVue.[name]/src/fonts/iconfont-vue-e08a231.eot","webpack:///NextcloudVue.[name]/src/l10n.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.map.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.function.name.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.regexp.exec.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.string.iterator.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.iterator.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/web.dom-collections.iterator.js\"","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?770b","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.scss?0d1f","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.js","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.scss","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.string.replace.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.regexp.to-string.js\"","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?1515","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?470d","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?01ec","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.string.trim.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.number.constructor.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.concat.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.symbol.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"@nextcloud/l10n/dist/gettext\"","webpack:///NextcloudVue.[name]/src/utils/GenRandomId.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.symbol.description.js\"","webpack:///NextcloudVue.[name]/src/mixins/actionGlobal.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/web.url.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.slice.js\"","webpack:///NextcloudVue.[name]/src/mixins/l10n.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.symbol.iterator.js\"","webpack:///NextcloudVue.[name]/src/components/Popover/index.js","webpack:///NextcloudVue.[name]/src/utils/GetParent.js","webpack:///NextcloudVue.[name]/src/mixins/actionText.js","webpack:///NextcloudVue.[name]/src/utils/ValidateSlot.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.filter.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.from.js\"","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?28fd","webpack:///NextcloudVue.[name]/src/components/Actions/index.js","webpack:///NextcloudVue.[name]/src/utils/ScopeComponent.js","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?e43e","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?608f","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?cf1a","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?adfe","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.splice.js\"","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?4f4c","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?fe29","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?04e0","webpack:///webpack:/NextcloudVue.[name]/external \"hammerjs\"","webpack:///NextcloudVue.[name]/src/components/ActionButton/index.js","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?f3ac","webpack:///NextcloudVue.[name]/src/utils/Timer.js","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?6422","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?6733","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?aad2","webpack:///NextcloudVue.[name]/src/components/Modal/index.js","webpack:///./node_modules/hammerjs/hammer.js"],"names":["$","require","$trim","trim","target","proto","forced","forcedStringTrimMethod","this","fails","whitespaces","module","exports","METHOD_NAME","name","DESCRIPTORS","global","isForced","redefine","has","classof","inheritIfRequired","toPrimitive","create","getOwnPropertyNames","f","getOwnPropertyDescriptor","defineProperty","NativeNumber","NumberPrototype","prototype","BROKEN_CLASSOF","toNumber","argument","first","third","radix","maxCode","digits","length","index","code","it","charCodeAt","NaN","slice","parseInt","key","NumberWrapper","value","arguments","dummy","valueOf","call","keys","split","j","constructor","GettextBuilder","translations","debug","language","setLanguage","getLanguage","data","GettextWrapper","locale","GetText","sourceLocale","translated","vars","r","original","placeholders","subtitudePlaceholders","gt","gettext","singular","plural","count","ngettext","replace","toAbsoluteIndex","toInteger","toLength","toObject","arraySpeciesCreate","createProperty","HAS_SPECIES_SUPPORT","arrayMethodHasSpeciesSupport","max","Math","min","splice","start","deleteCount","insertCount","actualDeleteCount","A","k","from","to","O","len","actualStart","argumentsLength","TypeError","factory","window","installedModules","__webpack_require__","moduleId","i","l","modules","m","c","d","getter","o","Object","enumerable","get","Symbol","toStringTag","t","mode","__esModule","ns","bind","n","object","property","hasOwnProperty","p","s","_slicedToArray","arr","Array","isArray","iterator","_arr","_n","_d","_e","_s","_i","next","done","push","err","minLen","_arrayLikeToArray","toString","test","arr2","item","_item","content","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","concat","sourceMapping","sourceURLs","sources","map","source","sourceRoot","join","cssWithMappingToString","list","mediaQuery","dedupe","alreadyImportedModules","id","memo","getTarget","styleTarget","document","querySelector","HTMLIFrameElement","contentDocument","head","e","stylesInDom","getIndexByIdentifier","identifier","result","modulesToDom","options","idCountMap","identifiers","base","obj","css","media","sourceMap","references","updater","addStyle","insertStyleElement","style","createElement","attributes","nonce","forEach","setAttribute","insert","Error","appendChild","textStore","replaceText","replacement","filter","Boolean","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","newObj","all","atob","lastIdentifiers","newList","newLastIdentifiers","_index","normalizeComponent","scriptExports","render","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","url","default","hash","needQuotes","__webpack_exports__","gtBuilder","getGettextBuilder","detectLocale","TRANSLATIONS","addTranslation","json","build","___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default","version","names","mappings","sourcesContent","injectStylesIntoStyleTag_default","Tooltip","locals","VTooltip","defaultTemplate","SCOPE_VERSION","defaultHtml","Popover_Popovervue_type_script_lang_js_","components","VPopover","Popovervue_type_style_index_0_lang_scss_","_h","$createElement","_c","_self","_g","_b","attrs","popover-base-class","popover-wrapper-class","popover-arrow-class","popover-inner-class","$attrs","$listeners","_t","_v","slot","GenRandomId","random","substr","before","$slots","text","Vue","util","warn","$destroy","$el","beforeUpdate","getText","computed","isLongText","methods","Popover","GetParent","$parent","mixins","actionGlobal","props","icon","type","String","title","closeAfterClick","ariaLabel","isIconUrl","URL","error","onClick","event","$emit","closeMenu","ValidateSlot","slots","allowed","vm","node","isHtmlElement","componentOptions","tag","indexOf","isVueComponent","isForbiddenComponent","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","___CSS_LOADER_URL_REPLACEMENT_0___","_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default","_fonts_iconfont_vue_e08a231_eot__WEBPACK_IMPORTED_MODULE_3__","___CSS_LOADER_URL_REPLACEMENT_1___","_fonts_iconfont_vue_e08a231_woff__WEBPACK_IMPORTED_MODULE_4__","___CSS_LOADER_URL_REPLACEMENT_2___","_fonts_iconfont_vue_e08a231_ttf__WEBPACK_IMPORTED_MODULE_5__","___CSS_LOADER_URL_REPLACEMENT_3___","_fonts_iconfont_vue_e08a231_svg__WEBPACK_IMPORTED_MODULE_6__","Actions","ScopeComponent","Component","mounted","Actions_Actionsvue_type_script_lang_js_","directives","tooltip","VNodes","open","forceMenu","menuTitle","primary","defaultIcon","placement","boundariesElement","container","disabled","actions","opened","focusIndex","randomId","children","hasMultipleActions","isValidSingleAction","firstActionVNode","firstAction","firstActionBinding","is","href","aria-label","exact","firstActionEvent","firstActionEventBinding","firstActionIconSlot","firstActionClass","dynClass","iconSlotIsPopulated","watch","state","beforeMount","openMenu","onOpen","_this","onMouseFocusAction","removeCurrentActive","currentActiveElement","focusAction","focusElement","liMenuParent","focusPreviousAction","focusNextAction","focusFirstAction","focusLastAction","preventIfEvent","execFirstAction","initActions","Actionsvue_type_style_index_0_id_1b33c33b_lang_scss_scoped_true_","_obj","_obj$1","_vm","rawName","expression","modifiers","auto","staticClass","class","rel","on","vnodes","aria-hidden","hidden","action-item--open","delay","handle-resize","boundaries-element","update:open","$event","show","apply-show","hide","ref","aria-haspopup","aria-controls","test-attr","aria-expanded","tabindex","keydown","_k","keyCode","ctrlKey","shiftKey","altKey","metaKey","preventDefault","mousemove","ActionButton_ActionButtonvue_type_script_lang_js_","isFocusable","ActionButtonvue_type_style_index_0_id_42b28436_lang_scss_scoped_true_","action--disabled","focusable","click","backgroundImage","domProps","textContent","ActionButton","timer","callback","started","running","remaining","Date","setTimeout","pause","clearTimeout","clear","getTimeLeft","getStateRunning","Modal_Modalvue_type_script_lang_js_","hasPrevious","hasNext","outTransition","enableSlideshow","clearViewDelay","slideshowDelay","slideshowPaused","enableSwipe","spreadNavigation","size","validator","canClose","dark","mc","showModal","clearView","clearViewTimeout","playing","slideshowTimeout","modalTransitionName","playPauseTitle","paused","beforeDestroy","destroyed","previous","close","_this2","handleKeydown","handleSwipe","handleMouseMove","_this3","togglePlayPause","resetSlideshow","handleSlideshow","_this4","clearSlideshowTimeout","Modalvue_type_style_index_0_id_3e0b109b_lang_scss_scoped_true_","modal-mask--dark","touchmove","invisible","play-pause--paused","height","width","stroke","stroke-width","fill","cx","cy","mousedown","currentTarget","Modal","define","exportName","undefined","assign","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","now","setTimeoutContext","fn","timeout","bindFn","invokeArrayArg","arg","each","deprecate","method","message","deprecationMessage","stack","log","console","apply","output","nextKey","extend","dest","src","merge","inherit","child","properties","childP","baseP","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","str","find","inArray","findByKey","toArray","uniqueArray","sort","results","values","a","b","prefixed","prefix","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","navigator","userAgent","PROPS_XY","PROPS_CLIENT_XY","Input","manager","self","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offset","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mouseup","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchend","touchcancel","SingleTouchInput","normalizeSingleTouches","touches","changed","changedTouches","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","targetTouches","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","Recognizer","defaults","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","stop","force","stopped","curRecognizer","events","off","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press"],"mappings":"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","file":"vendors~files-modal.js?v=10848fdc74ec999caedb","sourcesContent":["'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","import GetText from \"node-gettext\"\n\nimport { getLanguage } from \".\"\n\nclass GettextBuilder {\n\n private locale?: string\n private translations = {}\n private debug = false\n\n setLanguage(language: string): GettextBuilder {\n this.locale = language\n return this\n }\n\n detectLocale(): GettextBuilder {\n return this.setLanguage(getLanguage().replace('-', '_'))\n }\n\n addTranslation(language: string, data: any): GettextBuilder {\n this.translations[language] = data\n return this\n }\n\n enableDebugMode(): GettextBuilder {\n this.debug = true\n return this\n }\n\n build(): GettextWrapper {\n return new GettextWrapper(this.locale || 'en', this.translations, this.debug)\n }\n\n}\n\nclass GettextWrapper {\n\n private gt: GetText\n\n constructor(locale: string, data: any, debug: boolean) {\n this.gt = new GetText({\n debug,\n sourceLocale: 'en',\n })\n\n for (let key in data) {\n this.gt.addTranslations(key, 'messages', data[key])\n }\n\n this.gt.setLocale(locale)\n }\n\n private subtitudePlaceholders(translated: string, vars: object): string {\n return translated.replace(/{([^{}]*)}/g, (a, b) => {\n const r = vars[b]\n if (typeof r === 'string' || typeof r === 'number') {\n return r.toString()\n } else {\n return a\n }\n })\n }\n\n gettext(original: string, placeholders: object = {}): string {\n return this.subtitudePlaceholders(\n this.gt.gettext(original),\n placeholders\n )\n }\n\n ngettext(singular: string, plural: string, count: number, placeholders: object = {}): string {\n return this.subtitudePlaceholders(\n this.gt.ngettext(singular, plural, count).replace(/%n/g, count.toString()),\n placeholders\n )\n }\n\n}\n\nexport function getGettextBuilder() {\n return new GettextBuilder()\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Components/Modal\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Components/Modal\"] = factory();\n\telse\n\t\troot[\"NextcloudVue\"] = root[\"NextcloudVue\"] || {}, root[\"NextcloudVue\"][\"Components/Modal\"] = factory();\n})(window, function() {\nreturn "," \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 = 129);\n","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== \"string\") {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n\n return url;\n};","module.exports = require(\"vue\");","module.exports = require(\"core-js/modules/es.object.to-string.js\");","module.exports = require(\"v-tooltip\");","export default \"data:application/vnd.ms-fontobject;base64,rg8AAOQOAAABAAIAAAAAAAIABQMAAAAAAAABQJABAAAAAExQAAAAABAAAAAAAAAAAAAAAAAAAAEAAAAA0axwawAAAAAAAAAAAAAAAAAAAAAAACgAAGkAYwBvAG4AZgBvAG4AdAAtAHYAdQBlAC0AZQAwADgAYQAyADMAMQAAAAAAABYAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAKAAAaQBjAG8AbgBmAG8AbgB0AC0AdgB1AGUALQBlADAAOABhADIAMwAxAAAAAAABAAAACgCAAAMAIE9TLzJ044/RAAAArAAAAGBjbWFwAA3ruAAAAQwAAAFCZ2x5ZsdHOUwAAAJQAAAH/GhlYWQrHcL/AAAKTAAAADZoaGVhJv0ThQAACoQAAAAkaG10eGe+//8AAAqoAAAANGxvY2ENvA9mAAAK3AAAAChtYXhwASAAVwAACwQAAAAgbmFtZdjQdgEAAAskAAACpnBvc3Q/VL7XAAANzAAAARYABBLKAZAABQAADGUNrAAAArwMZQ2sAAAJYAD1BQoAAAIABQMAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZABA6gHqEhOIAAABwhOIAAAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQAAAAAAPAADAAEAAAAcAAQAIAAAAAQABAABAADqEv//AADqAf//FgAAAQAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOpg9DAAUACwAACQIRCQQRCQEOpvqCBX77ugRG+oL6ggV++7oERg9C+oL6ggE4BEYERgE4+oL6ggE4BEYERgABAAAAAA1uElAABQAACQERCQERBhsHU/d0CIwJxPit/sgIiwiM/scAAgAAAAAP3w9DAAUACwAACQIRCQQRCQEE4gV++oIERvu6BX4Ff/qBBEb7ugRGBX4Ffv7I+7r7uv7IBX4Ffv7I+7r7ugABAAAAAA6mElAABQAACQERCQERDW74rQiL93UJxAdTATn3dPd1ATgAAQAAAAAGNxOIAAUAABMHCQEXAZSUBXL6jpQFoxOIVfaR9pFVCcQAAAEAAAAAEYcPgwAFAAAJBQ/N9/P7+/5GBb8Jxw+D9/MEBf5H+kEJxgABAAAAABEXERcACwAACQsRF/3t+sD6wP3tBUD6wAITBUAFQAIT+sAEhP3tBUD6wAITBUAFQAIT+sAFQP3t+sAAAf//AAATkxLsADMAAAEiBw4BFxYXASEmBwYHBgcGFBcWFxYXFjchAQYHBhcWFx4BFxYXFjc2NwE2NzYnJicBLgEKYGVPSkYQEkgF1/HgTT46KScUFBQUJyk6Pk0OIPopNxoYAwMbGVY1Nzs+Oj81B+07FRUUFTz4Eyx0Euw5NKxZYEf6KgEbGC4sOTh4ODksLhgbAvopNT87Pjo3NlYZGgMDGBk4B+w8UVBPUjwH7C0yAAAAAgAAAAAOphJQABgARgAAASIHDgEHBhQXHgEXFjI3PgE3NjQnLgEnJgEiBwYHBhQXFhcWMyERISIHBgcGFBcWFxY3ITI3Njc2NCcmJyYjIRE0JyYnJiMJdm9mYpgpKyspmGJm3mZilyorKyqXYmb8NlZIRykrKylHSFYCcf2PVkhHKSsrKUdIVgdTVUhHKSsrKUdIVf2PKylHSVUSUCsql2Nl32VimCkrKymYYmXfZWOXKiv55SspR0irSEcpK/nmKylHSapJRykrASopR0mqSUcpKwdTVUhHKSsAAAMAAAAAERcRFwADAAcACwAAAREhEQERIREBESERAnEOpvFaDqbxWg6mERf9jwJx+eb9jwJx+eX9jwJxAAMAAAAAEp4L5wAYADEASgAAATIXHgEXFhQHDgEHBiInLgEnJjQ3PgE3NiEyFx4BFxYUBw4BBwYiJy4BJyY0Nz4BNzYhMhceARcWFAcOAQcGIicuAScmNDc+ATc2Aw1wZWKYKSsrKZhiZd9mYpcqKysql2JmByZvZmKXKisrKpdiZt5mYpcqKysql2JmByZvZmKXKisrKpdiZt9lYpgpKyspmGJlC+crKpdiZt5mYpcqKysql2Jm3mZilyorKyqXYmbeZmKXKisrKpdiZt5mYpcqKysql2Jm3mZilyorKyqXYmbeZmKXKisAAAAAAgAAAAAP3w/fAAMABwAAAREhESERIREDqgTiAnEE4g/f88sMNfPLDDUAAAABAAAAABEXERcAAgAACQICcQ6m8VoRF/it+K0AAQAAAAAOpgw1AAIAAAkCBOIE4gTiDDX7HgTgAAH/4AAAE2kTaQAxAAABBAUEBQQDAgMCERATEhMSBQQFBCEgJSQlJBMSExITBgAFBCEgJSQnJicmAwIREBMSAAhs/pj+sf66/u3+7sbKa26Ae+nlATkBPAFyAX4BlgFxAWEBVgEuASrr7JmcOLz+Kf75/vP+6v6+/s7+2f37uLtjZ1BOAScTaS6Xk+nn/tf+0/6r/p/+j/5q/oL+jv7E/sfl6HyAa2jFwgENAQ4BQwFLAWnM/tpOUGdju7j7/QEnATIBQgElARMBDQHLAAIAAAAAE4gTiAAkAEAAAAEgBQQFBAMCAwIQExITEgUEBQQgJSQlJBMSExIQAwIDAiUkJSQBITIXHgEXFhQHDgEHBiMhIicuAScmNDc+ATc2CcT+av6C/o7+xP7H5eh8gIB86OUBOQE8AXIBfgMsAX4BcgE8ATnl6HyAgHzo5f7H/sT+jv6C+sEHU1tXVIQkJiYkhFRXW/itXFdUhCQmJiSEVFcTiIB86OX+x/7E/o7+gvzU/oL+jv7E/sfl6HyAgHzo5QE5ATwBcgF+AywBfgFyATwBOeXofID4ESYlhFNXuFdThCUmJiWEU1e4V1OEJSYAAAACAAAAABOIE4gAJAA9AAABIAUEBQQDAgMCEBMSExIFBAUEICUkJSQTEhMSEAMCAwIlJCUkASAFBAATEhADAgAFBCAlJAADAhATEgAlJAnE/mr+gv6O/sT+x+XofICAfOjlATkBPAFyAX4DLAF+AXIBPAE55eh8gIB86OX+x/7E/o7+gv5qATcBFwEPAZtwdHRw/mX+8f7p/ZL+6f7x/mVwdHRwAZsBDwEXE4iAfOjl/sf+xP6O/oL81P6C/o7+xP7H5eh8gIB86OUBOQE8AXIBfgMsAX4BcgE8ATnl6HyA/Bh0cP5l/vH+6f2S/un+8f5lcHR0cAGbAQ8BFwJuARcBDwGbcHQAAAACAAAAABOIE4gAAwAoAAABIREhASAFBAUEAwIDAhATEhMSBQQFBCAlJCUkExITEhADAgMCJSQlJAXcB9D4MAPo/mr+gv6O/sT+x+XofICAfOjlATkBPAFyAX4DLAF+AXIBPAE55eh8gIB86OX+x/7E/o7+ggXcB9AF3IB86OX+x/7E/o7+gvzU/oL+jv7E/sfl6HyAgHzo5QE5ATwBcgF+AywBfgFyATwBOeXofIAAAAEAAAABAABrcKzRXw889QALE4gAAAAA3G6deQAAAADcHcF5/+AAABOTE4gAAAAIAAIAAAAAAAAAAQAAE4gAAAAAE4j/4P/1E5MAAQAAAAAAAAAAAAAAAAAAAAcAAAAAE4gAABOIAAATiAAAE4gAAAY2AAATiAAAAAD//wAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAiADYAWABsAIAAlAC0AQ4BfAGaAhACJgI0AkICqAMiA6YD/gABAAAAEwBLAAMAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAAAEADGAAEAAAAAAAEAFAAAAAEAAAAAAAIABwAUAAEAAAAAAAMAFAAbAAEAAAAAAAQAFAAvAAEAAAAAAAUACwBDAAEAAAAAAAYAFABOAAEAAAAAAAoAKwBiAAEAAAAAAAsAEwCNAAMAAQQJAAEAKACgAAMAAQQJAAIADgDIAAMAAQQJAAMAKADWAAMAAQQJAAQAKAD+AAMAAQQJAAUAFgEmAAMAAQQJAAYAKAE8AAMAAQQJAAoAVgFkAAMAAQQJAAsAJgG6aWNvbmZvbnQtdnVlLWUwOGEyMzFSZWd1bGFyaWNvbmZvbnQtdnVlLWUwOGEyMzFpY29uZm9udC12dWUtZTA4YTIzMVZlcnNpb24gMS4waWNvbmZvbnQtdnVlLWUwOGEyMzFHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBpAGMAbwBuAGYAbwBuAHQALQB2AHUAZQAtAGUAMAA4AGEAMgAzADEAUgBlAGcAdQBsAGEAcgBpAGMAbwBuAGYAbwBuAHQALQB2AHUAZQAtAGUAMAA4AGEAMgAzADEAaQBjAG8AbgBmAG8AbgB0AC0AdgB1AGUALQBlADAAOABhADIAMwAxAFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBuAGYAbwBuAHQALQB2AHUAZQAtAGUAMAA4AGEAMgAzADEARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwATAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMRYXJyb3ctbGVmdC1kb3VibGUKYXJyb3ctbGVmdBJhcnJvdy1yaWdodC1kb3VibGULYXJyb3ctcmlnaHQKYnJlYWRjcnVtYgljaGVja21hcmsFY2xvc2UHY29uZmlybQRpbmZvBG1lbnUEbW9yZQVwYXVzZQRwbGF5CnRyaWFuZ2xlLXMQdXNlci1zdGF0dXMtYXdheQ91c2VyLXN0YXR1cy1kbmQVdXNlci1zdGF0dXMtaW52aXNpYmxlEnVzZXItc3RhdHVzLW9ubGluZQAA\"","import { getGettextBuilder } from '@nextcloud/l10n/dist/gettext'\n\nconst gtBuilder = getGettextBuilder()\n\t.detectLocale()\nTRANSLATIONS.map(data => gtBuilder.addTranslation(data.locale, data.json))\nconst gt = gtBuilder.build()\n\nconst n = gt.ngettext.bind(gt)\nconst t = gt.gettext.bind(gt)\n\nexport { t, n }\n","module.exports = require(\"core-js/modules/es.array.map.js\");","module.exports = require(\"core-js/modules/es.function.name.js\");","module.exports = require(\"core-js/modules/es.regexp.exec.js\");","module.exports = require(\"core-js/modules/es.string.iterator.js\");","module.exports = require(\"core-js/modules/es.array.iterator.js\");","module.exports = require(\"core-js/modules/web.dom-collections.iterator.js\");","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".popover{z-index:100000;display:block !important;filter:drop-shadow(0 1px 10px var(--color-box-shadow))}.popover__inner{padding:0;color:var(--color-main-text);border-radius:var(--border-radius);background:var(--color-main-background)}.popover__arrow{position:absolute;z-index:1;width:0;height:0;margin:10px;border-style:solid;border-color:var(--color-main-background)}.popover[x-placement^='top']{margin-bottom:10px}.popover[x-placement^='top'] .popover__arrow{bottom:-10px;left:calc(50% - $arrow-width);margin-top:0;margin-bottom:0;border-width:10px 10px 0 10px;border-right-color:transparent !important;border-bottom-color:transparent !important;border-left-color:transparent !important}.popover[x-placement^='bottom']{margin-top:10px}.popover[x-placement^='bottom'] .popover__arrow{top:-10px;left:calc(50% - $arrow-width);margin-top:0;margin-bottom:0;border-width:0 10px 10px 10px;border-top-color:transparent !important;border-right-color:transparent !important;border-left-color:transparent !important}.popover[x-placement^='right']{margin-left:10px}.popover[x-placement^='right'] .popover__arrow{top:calc(50% - $arrow-width);left:-10px;margin-right:0;margin-left:0;border-width:10px 10px 10px 0;border-top-color:transparent !important;border-bottom-color:transparent !important;border-left-color:transparent !important}.popover[x-placement^='left']{margin-right:10px}.popover[x-placement^='left'] .popover__arrow{top:calc(50% - $arrow-width);right:-10px;margin-right:0;margin-left:0;border-width:10px 0 10px 10px;border-top-color:transparent !important;border-right-color:transparent !important;border-bottom-color:transparent !important}.popover[aria-hidden='true']{visibility:hidden;transition:opacity var(--animation-quick),visibility var(--animation-quick);opacity:0}.popover[aria-hidden='false']{visibility:visible;transition:opacity var(--animation-quick);opacity:1}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Popover.vue\"],\"names\":[],\"mappings\":\"AAmFA,SACC,cAAe,CACf,wBAAyB,CAEzB,sDAAuD,CAEvD,gBACC,SAAU,CACV,4BAA6B,CAC7B,kCAAmC,CACnC,uCAAwC,CACxC,gBAGA,iBAAkB,CAClB,SAAU,CACV,OAAQ,CACR,QAAS,CACT,WApBgB,CAqBhB,kBAAmB,CACnB,yCAA0C,CApB5C,6BAwBE,kBA1BgB,CAElB,6CA2BG,YA7Be,CA8Bf,6BAA8B,CAC9B,YAAa,CACb,eAAgB,CAChB,6BAjCe,CAkCf,yCAA0C,CAC1C,0CAA2C,CAC3C,wCAAyC,CAlC5C,gCAuCE,eAzCgB,CAElB,gDA0CG,SA5Ce,CA6Cf,6BAA8B,CAC9B,YAAa,CACb,eAAgB,CAChB,6BAhDe,CAiDf,uCAAwC,CACxC,yCAA0C,CAC1C,wCAAyC,CAjD5C,+BAsDE,gBAxDgB,CAElB,+CAyDG,4BAA6B,CAC7B,UA5De,CA6Df,cAAe,CACf,aAAc,CACd,6BAAsD,CACtD,uCAAwC,CACxC,0CAA2C,CAC3C,wCAAyC,CAhE5C,8BAqEE,iBAvEgB,CAElB,8CAwEG,4BAA6B,CAC7B,WA3Ee,CA4Ef,cAAe,CACf,aAAc,CACd,6BA9Ee,CA+Ef,uCAAwC,CACxC,yCAA0C,CAC1C,0CAA2C,CA/E9C,6BAoFE,iBAAkB,CAClB,2EAA6E,CAC7E,SAAU,CAtFZ,8BA0FE,kBAAmB,CACnB,yCAA0C,CAC1C,SAAU\",\"sourcesContent\":[\"$scope_version:\\\"e08a231\\\"; @import 'variables';\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$arrow-width: 10px;\\n\\n.popover {\\n\\tz-index: 100000;\\n\\tdisplay: block !important;\\n\\n\\tfilter: drop-shadow(0 1px 10px var(--color-box-shadow));\\n\\n\\t&__inner {\\n\\t\\tpadding: 0;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground: var(--color-main-background);\\n\\t}\\n\\n\\t&__arrow {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 1;\\n\\t\\twidth: 0;\\n\\t\\theight: 0;\\n\\t\\tmargin: $arrow-width;\\n\\t\\tborder-style: solid;\\n\\t\\tborder-color: var(--color-main-background);\\n\\t}\\n\\n\\t&[x-placement^='top'] {\\n\\t\\tmargin-bottom: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\tbottom: -$arrow-width;\\n\\t\\t\\tleft: calc(50% - $arrow-width);\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width 0 $arrow-width;\\n\\t\\t\\tborder-right-color: transparent !important;\\n\\t\\t\\tborder-bottom-color: transparent !important;\\n\\t\\t\\tborder-left-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[x-placement^='bottom'] {\\n\\t\\tmargin-top: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\ttop: -$arrow-width;\\n\\t\\t\\tleft: calc(50% - $arrow-width);\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: 0 $arrow-width $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent !important;\\n\\t\\t\\tborder-right-color: transparent !important;\\n\\t\\t\\tborder-left-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[x-placement^='right'] {\\n\\t\\tmargin-left: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\ttop: calc(50% - $arrow-width);\\n\\t\\t\\tleft: -$arrow-width;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width $arrow-width 0;\\n\\t\\t\\tborder-top-color: transparent !important;\\n\\t\\t\\tborder-bottom-color: transparent !important;\\n\\t\\t\\tborder-left-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[x-placement^='left'] {\\n\\t\\tmargin-right: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\ttop: calc(50% - $arrow-width);\\n\\t\\t\\tright: -$arrow-width;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width 0 $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent !important;\\n\\t\\t\\tborder-right-color: transparent !important;\\n\\t\\t\\tborder-bottom-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[aria-hidden='true'] {\\n\\t\\tvisibility: hidden;\\n\\t\\ttransition: opacity var(--animation-quick), visibility var(--animation-quick);\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t&[aria-hidden='false'] {\\n\\t\\tvisibility: visible;\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!./index.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { VTooltip } from 'v-tooltip'\nimport './index.scss'\n\n// force scope the tooltip and use .vue-tooltip\n// instead of .tooltip to avoid server compatibility\n// issues and the use of !important\nVTooltip.options.defaultTemplate = `<div class=\"vue-tooltip\" role=\"tooltip\" data-v-${SCOPE_VERSION}><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>`\nVTooltip.options.defaultHtml = false\n\nexport default VTooltip\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vue-tooltip[data-v-e08a231]{position:absolute;z-index:100000;right:auto;left:auto;display:block;margin:0;margin-top:-3px;padding:10px 0;text-align:left;text-align:start;opacity:0;line-height:1.6;line-break:auto;filter:drop-shadow(0 1px 10px var(--color-box-shadow))}.vue-tooltip[data-v-e08a231][x-placement^='top'] .tooltip-arrow{bottom:0;margin-top:0;margin-bottom:0;border-width:10px 10px 0 10px;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-e08a231][x-placement^='bottom'] .tooltip-arrow{top:0;margin-top:0;margin-bottom:0;border-width:0 10px 10px 10px;border-top-color:transparent;border-right-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-e08a231][x-placement^='right'] .tooltip-arrow{right:100%;margin-right:0;margin-left:0;border-width:10px 10px 10px 0;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-e08a231][x-placement^='left'] .tooltip-arrow{left:100%;margin-right:0;margin-left:0;border-width:10px 0 10px 10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent}.vue-tooltip[data-v-e08a231][aria-hidden='true']{visibility:hidden;transition:opacity .15s, visibility .15s;opacity:0}.vue-tooltip[data-v-e08a231][aria-hidden='false']{visibility:visible;transition:opacity .15s;opacity:1}.vue-tooltip[data-v-e08a231] .tooltip-inner{max-width:350px;padding:5px 8px;text-align:center;color:var(--color-main-text);border-radius:var(--border-radius);background-color:var(--color-main-background)}.vue-tooltip[data-v-e08a231] .tooltip-arrow{position:absolute;z-index:1;width:0;height:0;margin:0;border-style:solid;border-color:var(--color-main-background)}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./index.scss\"],\"names\":[],\"mappings\":\"AAeA,6BACC,iBAAkB,CAClB,cAAe,CACf,UAAW,CACX,SAAU,CACV,aAAc,CACd,QAAS,CAET,eAAgB,CAChB,cAAe,CACf,eAAgB,CAChB,gBAAiB,CACjB,SAAU,CACV,eAAgB,CAEhB,eAAgB,CAChB,sDAAuD,CAhBxD,gEAqBG,QAAS,CACT,YAAa,CACb,eAAgB,CAChB,6BA1Be,CA2Bf,8BAA+B,CAC/B,+BAAgC,CAChC,6BAA8B,CA3BjC,mEAkCG,KAAM,CACN,YAAa,CACb,eAAgB,CAChB,6BAvCe,CAwCf,4BAA6B,CAC7B,8BAA+B,CAC/B,6BAA8B,CAxCjC,kEA+CG,UAAW,CACX,cAAe,CACf,aAAc,CACd,6BAAsD,CACtD,4BAA6B,CAC7B,+BAAgC,CAChC,6BAA8B,CArDjC,iEA4DG,SAAU,CACV,cAAe,CACf,aAAc,CACd,6BAjEe,CAkEf,4BAA6B,CAC7B,8BAA+B,CAC/B,+BAAgC,CAlEnC,iDAwEE,iBAAkB,CAClB,wCAAyC,CACzC,SAAU,CA1EZ,kDA6EE,kBAAmB,CACnB,uBAAwB,CACxB,SAAU,CA/EZ,4CAoFE,eAAgB,CAChB,eAAgB,CAChB,iBAAkB,CAClB,4BAA6B,CAC7B,kCAAmC,CACnC,6CAA8C,CAzFhD,4CA8FE,iBAAkB,CAClB,SAAU,CACV,OAAQ,CACR,QAAS,CACT,QAAS,CACT,kBAAmB,CACnB,yCAA0C\",\"sourcesContent\":[\"$scope_version:\\\"e08a231\\\"; @import 'variables';\\n/**\\n* @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>\\n* @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>\\n* @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>\\n* @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>\\n* @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>\\n*\\n* Bootstrap v3.3.5 (http://getbootstrap.com)\\n* Copyright 2011-2015 Twitter, Inc.\\n* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n*/\\n\\n$arrow-width: 10px;\\n\\n.vue-tooltip[data-v-#{$scope_version}] {\\n\\tposition: absolute;\\n\\tz-index: 100000;\\n\\tright: auto;\\n\\tleft: auto;\\n\\tdisplay: block;\\n\\tmargin: 0;\\n\\t/* default to top */\\n\\tmargin-top: -3px;\\n\\tpadding: 10px 0;\\n\\ttext-align: left;\\n\\ttext-align: start;\\n\\topacity: 0;\\n\\tline-height: 1.6;\\n\\n\\tline-break: auto;\\n\\tfilter: drop-shadow(0 1px 10px var(--color-box-shadow));\\n\\n\\t// TOP\\n\\t&[x-placement^='top'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\tbottom: 0;\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width 0 $arrow-width;\\n\\t\\t\\tborder-right-color: transparent;\\n\\t\\t\\tborder-bottom-color: transparent;\\n\\t\\t\\tborder-left-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// BOTTOM\\n\\t&[x-placement^='bottom'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: 0 $arrow-width $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent;\\n\\t\\t\\tborder-right-color: transparent;\\n\\t\\t\\tborder-left-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// RIGHT\\n\\t&[x-placement^='right'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\tright: 100%;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width $arrow-width 0;\\n\\t\\t\\tborder-top-color: transparent;\\n\\t\\t\\tborder-bottom-color: transparent;\\n\\t\\t\\tborder-left-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// LEFT\\n\\t&[x-placement^='left'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\tleft: 100%;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width 0 $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent;\\n\\t\\t\\tborder-right-color: transparent;\\n\\t\\t\\tborder-bottom-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// HIDDEN / SHOWN\\n\\t&[aria-hidden='true'] {\\n\\t\\tvisibility: hidden;\\n\\t\\ttransition: opacity .15s, visibility .15s;\\n\\t\\topacity: 0;\\n\\t}\\n\\t&[aria-hidden='false'] {\\n\\t\\tvisibility: visible;\\n\\t\\ttransition: opacity .15s;\\n\\t\\topacity: 1;\\n\\t}\\n\\n\\t// CONTENT\\n\\t.tooltip-inner {\\n\\t\\tmax-width: 350px;\\n\\t\\tpadding: 5px 8px;\\n\\t\\ttext-align: center;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t}\\n\\n\\t// ARROW\\n\\t.tooltip-arrow {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 1;\\n\\t\\twidth: 0;\\n\\t\\theight: 0;\\n\\t\\tmargin: 0;\\n\\t\\tborder-style: solid;\\n\\t\\tborder-color: var(--color-main-background);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = require(\"core-js/modules/es.string.replace.js\");","module.exports = require(\"core-js/modules/es.regexp.to-string.js\");","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('VPopover',_vm._g(_vm._b({attrs:{\"popover-base-class\":\"popover\",\"popover-wrapper-class\":\"popover__wrapper\",\"popover-arrow-class\":\"popover__arrow\",\"popover-inner-class\":\"popover__inner\"}},'VPopover',_vm.$attrs,false),_vm.$listeners),[_vm._t(\"trigger\"),_vm._v(\" \"),_c('template',{slot:\"popover\"},[_vm._t(\"default\")],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Popover.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Popover.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n -\n - @author Marco Ambrosini <marcoambrosini@pm.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<docs>\n\n### General description\n\nThis component is just a wrapper for the v-component plugin by Akryum,\nplease refer to this documentation for customization:\nhttps://github.com/Akryum/v-tooltip\n\nThis components has two slots:\n* 'trigger' which can be any html element and it will trigger the popover\nthis slot is optional since you can toggle the popover also by updating the\nopen prop on this component;\n\n* a default slot that is for the content of the popover.\n\n### Examples\n\nWith a `<button>` as a trigger:\n```vue\n<template>\n\t<Popover>\n\t\t<button slot=\"trigger\"> I am the trigger </button>\n\t\t<template>\n\t\t<h2>this is some content</h2>\n\t\t</template>\n\t</Popover>\n</template>\n```\n</docs>\n\n<template>\n\t<VPopover\n\t\tv-bind=\"$attrs\"\n\t\tpopover-base-class=\"popover\"\n\t\tpopover-wrapper-class=\"popover__wrapper\"\n\t\tpopover-arrow-class=\"popover__arrow\"\n\t\tpopover-inner-class=\"popover__inner\"\n\t\tv-on=\"$listeners\">\n\t\t<!-- This will be the popover target (for the events and position) -->\n\t\t<slot name=\"trigger\" />\n\t\t<!-- This will be the content of the popover -->\n\t\t<template slot=\"popover\">\n\t\t\t<slot />\n\t\t</template>\n\t</VPopover>\n</template>\n\n<script>\nimport { VPopover } from 'v-tooltip'\n\nexport default {\n\tname: 'Popover',\n\tcomponents: {\n\t\tVPopover,\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n$arrow-width: 10px;\n\n.popover {\n\tz-index: 100000;\n\tdisplay: block !important;\n\n\tfilter: drop-shadow(0 1px 10px var(--color-box-shadow));\n\n\t&__inner {\n\t\tpadding: 0;\n\t\tcolor: var(--color-main-text);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground: var(--color-main-background);\n\t}\n\n\t&__arrow {\n\t\tposition: absolute;\n\t\tz-index: 1;\n\t\twidth: 0;\n\t\theight: 0;\n\t\tmargin: $arrow-width;\n\t\tborder-style: solid;\n\t\tborder-color: var(--color-main-background);\n\t}\n\n\t&[x-placement^='top'] {\n\t\tmargin-bottom: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\tbottom: -$arrow-width;\n\t\t\tleft: calc(50% - $arrow-width);\n\t\t\tmargin-top: 0;\n\t\t\tmargin-bottom: 0;\n\t\t\tborder-width: $arrow-width $arrow-width 0 $arrow-width;\n\t\t\tborder-right-color: transparent !important;\n\t\t\tborder-bottom-color: transparent !important;\n\t\t\tborder-left-color: transparent !important;\n\t\t}\n\t}\n\n\t&[x-placement^='bottom'] {\n\t\tmargin-top: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\ttop: -$arrow-width;\n\t\t\tleft: calc(50% - $arrow-width);\n\t\t\tmargin-top: 0;\n\t\t\tmargin-bottom: 0;\n\t\t\tborder-width: 0 $arrow-width $arrow-width $arrow-width;\n\t\t\tborder-top-color: transparent !important;\n\t\t\tborder-right-color: transparent !important;\n\t\t\tborder-left-color: transparent !important;\n\t\t}\n\t}\n\n\t&[x-placement^='right'] {\n\t\tmargin-left: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\ttop: calc(50% - $arrow-width);\n\t\t\tleft: -$arrow-width;\n\t\t\tmargin-right: 0;\n\t\t\tmargin-left: 0;\n\t\t\tborder-width: $arrow-width $arrow-width $arrow-width 0;\n\t\t\tborder-top-color: transparent !important;\n\t\t\tborder-bottom-color: transparent !important;\n\t\t\tborder-left-color: transparent !important;\n\t\t}\n\t}\n\n\t&[x-placement^='left'] {\n\t\tmargin-right: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\ttop: calc(50% - $arrow-width);\n\t\t\tright: -$arrow-width;\n\t\t\tmargin-right: 0;\n\t\t\tmargin-left: 0;\n\t\t\tborder-width: $arrow-width 0 $arrow-width $arrow-width;\n\t\t\tborder-top-color: transparent !important;\n\t\t\tborder-right-color: transparent !important;\n\t\t\tborder-bottom-color: transparent !important;\n\t\t}\n\t}\n\n\t&[aria-hidden='true'] {\n\t\tvisibility: hidden;\n\t\ttransition: opacity var(--animation-quick), visibility var(--animation-quick);\n\t\topacity: 0;\n\t}\n\n\t&[aria-hidden='false'] {\n\t\tvisibility: visible;\n\t\ttransition: opacity var(--animation-quick);\n\t\topacity: 1;\n\t}\n}\n\n</style>\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Popover.vue?vue&type=style&index=0&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","module.exports = require(\"core-js/modules/es.string.trim.js\");","module.exports = require(\"core-js/modules/es.number.constructor.js\");","module.exports = require(\"core-js/modules/es.array.concat.js\");","module.exports = require(\"core-js/modules/es.symbol.js\");","module.exports = require(\"@nextcloud/l10n/dist/gettext\");","\n/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst GenRandomId = (length) => {\n\treturn Math.random()\n\t\t.toString(36)\n\t\t.replace(/[^a-z]+/g, '')\n\t\t.substr(0, length || 5)\n}\n\nexport default GenRandomId\n","module.exports = require(\"core-js/modules/es.symbol.description.js\");","\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\n\nexport default {\n\tbefore() {\n\t\t// all actions requires a valid text content\n\t\t// if none, forbid the component mount and throw error\n\t\tif (!this.$slots.default || this.text.trim() === '') {\n\t\t\tVue.util.warn(`${this.$options.name} cannot be empty and requires a meaningful text content`, this)\n\t\t\tthis.$destroy()\n\t\t\tthis.$el.remove()\n\t\t}\n\t},\n\n\tbeforeUpdate() {\n\t\tthis.text = this.getText()\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// $slots are not reactive.\n\t\t\t// We need to update the content manually\n\t\t\ttext: this.getText(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisLongText() {\n\t\t\treturn this.text && this.text.trim().length > 20\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetText() {\n\t\t\treturn this.$slots.default ? this.$slots.default[0].text.trim() : ''\n\t\t},\n\t},\n}\n","module.exports = require(\"core-js/modules/web.url.js\");","module.exports = require(\"core-js/modules/es.array.slice.js\");","import { n, t } from '../l10n'\n\nexport default {\n\tmethods: {\n\t\tn,\n\t\tt,\n\t},\n}\n","module.exports = require(\"core-js/modules/es.symbol.iterator.js\");","/**\n * @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @author Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Popover from './Popover'\n\nexport default Popover\n","\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Get the first parent component matching the provided name\n *\n * @param {Object} context the context to search from (usualy this)\n * @param {string} name the parent name\n * @returns {Object} the parent component\n */\nconst GetParent = function(context, name) {\n\tlet parent = context.$parent\n\twhile (parent) {\n\t\tif (parent.$options.name === name) {\n\t\t\treturn parent\n\t\t}\n\t\tparent = parent.$parent\n\t}\n}\n\nexport default GetParent\n","\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport actionGlobal from './actionGlobal'\nimport GetParent from '../utils/GetParent'\n\nexport default {\n\tmixins: [actionGlobal],\n\tprops: {\n\t\t/**\n\t\t * Icon to show with the action, can be either a CSS class or an URL\n\t\t */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Title to show next to the icon\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Whether we close the Actions menu after the click\n\t\t */\n\t\tcloseAfterClick: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Aria label for the button. Not needed if the button has text.\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tisIconUrl() {\n\t\t\ttry {\n\t\t\t\treturn new URL(this.icon)\n\t\t\t} catch (error) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonClick(event) {\n\t\t\t/**\n\t\t\t * Emitted when the action is clicked\n\t\t\t * @type {Event}\n\t\t\t */\n\t\t\tthis.$emit('click', event)\n\n\t\t\tif (this.closeAfterClick) {\n\t\t\t\tconst parent = GetParent(this, 'Actions')\n\t\t\t\tif (parent && parent.closeMenu) {\n\t\t\t\t\tparent.closeMenu()\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\n\n/**\n * Validate children of a vue component\n *\n * @param {Object[]} slots the vue component slot\n * @param {String[]} allowed the allowed components name\n * @param {Object} vm the vue component instance\n */\nconst ValidateSlot = (slots, allowed, vm) => {\n\tif (slots === undefined) {\n\t\treturn\n\t}\n\n\tfor (let index = slots.length - 1; index >= 0; index--) {\n\t\tconst node = slots[index]\n\t\t// also check against allowed to avoid uninitiated vnodes with no componentOptions\n\t\tconst isHtmlElement = !node.componentOptions && node.tag && allowed.indexOf(node.tag) === -1\n\t\tconst isVueComponent = !!node.componentOptions && typeof node.componentOptions.tag === 'string'\n\t\tconst isForbiddenComponent = isVueComponent && allowed.indexOf(node.componentOptions.tag) === -1\n\n\t\t// if html element or not a vue component or vue component not in allowed tags\n\t\tif (isHtmlElement || !isVueComponent || isForbiddenComponent) {\n\t\t\t// only warn when html elment or forbidden component\n\t\t\t// sometimes text nodes are present which are hardly removeable by the developer and spam the warnings\n\t\t\tif (isHtmlElement || isForbiddenComponent) {\n\t\t\t\tVue.util.warn(`${isHtmlElement ? node.tag : node.componentOptions.tag} is not allowed inside the ${vm.$options.name} component`, vm)\n\t\t\t}\n\n\t\t\t// cleanup\n\t\t\tslots.splice(index, 1)\n\t\t}\n\t}\n}\n\nexport default ValidateSlot\n","module.exports = require(\"core-js/modules/es.array.filter.js\");","module.exports = require(\"core-js/modules/es.array.from.js\");","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../fonts/iconfont-vue-e08a231.eot\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"../../fonts/iconfont-vue-e08a231.woff\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"../../fonts/iconfont-vue-e08a231.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"../../fonts/iconfont-vue-e08a231.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face{font-family:\\\"iconfont-vue-e08a231\\\";src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"embedded-opentype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"woff\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format(\\\"truetype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format(\\\"svg\\\")}.icon[data-v-1b33c33b]{font-style:normal;font-weight:400}.icon.arrow-left-double[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.arrow-left[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.arrow-right-double[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.arrow-right[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.breadcrumb[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.checkmark[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.close[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.confirm[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.info[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.menu[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.more[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.pause[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.play[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.triangle-s[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-away[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-dnd[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-invisible[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-online[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.action-item[data-v-1b33c33b]{position:relative;display:inline-block}.action-item--single[data-v-1b33c33b]:hover,.action-item--single[data-v-1b33c33b]:focus,.action-item--single[data-v-1b33c33b]:active,.action-item__menutoggle[data-v-1b33c33b]:hover,.action-item__menutoggle[data-v-1b33c33b]:focus,.action-item__menutoggle[data-v-1b33c33b]:active{opacity:1;background-color:rgba(127,127,127,0.25)}.action-item__menutoggle[data-v-1b33c33b]:disabled,.action-item--single[data-v-1b33c33b]:disabled{opacity:.3 !important}.action-item.action-item--open .action-item__menutoggle[data-v-1b33c33b]{opacity:1;background-color:rgba(127,127,127,0.25)}.action-item--single[data-v-1b33c33b],.action-item__menutoggle[data-v-1b33c33b]{box-sizing:border-box;width:auto;min-width:44px;height:44px;margin:0;padding:14px;cursor:pointer;border:none;border-radius:22px;background-color:transparent}.action-item__menutoggle[data-v-1b33c33b]{display:flex;align-items:center;justify-content:center;opacity:.7;font-weight:bold;line-height:16px}.action-item__menutoggle[data-v-1b33c33b] span{width:16px;height:16px;line-height:16px}.action-item__menutoggle[data-v-1b33c33b]:before{content:''}.action-item__menutoggle--default-icon[data-v-1b33c33b]:before{font-family:\\\"iconfont-vue-e08a231\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.action-item__menutoggle--default-icon[data-v-1b33c33b]::before{font-size:16px}.action-item__menutoggle--with-title[data-v-1b33c33b]{position:relative;padding-left:44px;white-space:nowrap;opacity:1;border:1px solid var(--color-border-dark);background-color:var(--color-background-dark);background-position:14px center;font-size:inherit}.action-item__menutoggle--with-title[data-v-1b33c33b]:before{position:absolute;top:14px;left:14px}.action-item__menutoggle--primary[data-v-1b33c33b]{opacity:1;color:var(--color-primary-text);border:none;background-color:var(--color-primary-element)}.action-item--open .action-item__menutoggle--primary[data-v-1b33c33b],.action-item__menutoggle--primary[data-v-1b33c33b]:hover,.action-item__menutoggle--primary[data-v-1b33c33b]:focus,.action-item__menutoggle--primary[data-v-1b33c33b]:active{color:var(--color-primary-text) !important;background-color:var(--color-primary-element-light) !important}.action-item--single[data-v-1b33c33b]{opacity:.7}.action-item--single[data-v-1b33c33b]:hover,.action-item--single[data-v-1b33c33b]:focus,.action-item--single[data-v-1b33c33b]:active{opacity:1}.action-item--single>[hidden][data-v-1b33c33b]{display:none}.ie .action-item__menu[data-v-1b33c33b],.ie .action-item__menu .action-item__menu_arrow[data-v-1b33c33b],.edge .action-item__menu[data-v-1b33c33b],.edge .action-item__menu .action-item__menu_arrow[data-v-1b33c33b]{border:1px solid var(--color-border)}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../fonts/scss/iconfont-vue.scss\",\"webpack://./Actions.vue\",\"webpack://./../../assets/variables.scss\"],\"names\":[],\"mappings\":\"AA2FE,WACC,kCAAmC,CACnC,2CAAuC,CACvC,+OAGmD,CAMpD,uBACE,iBAAkB,CAClB,eAAgB,CAFlB,gDAMM,kCAAmC,CACnC,WA5Ge,CAAO,yCA0GL,kCACJ,CAAsB,WA1G3B,CAAA,iDAyGU,kCACL,CAAA,WAzGG,CAAA,0CAwGL,kCACE,CAAA,WAxGJ,CAAA,yCAuGC,kCACG,CAAA,WACN,CAxGC,wCAsGC,kCACI,CAAA,WACb,CAAO,oCAFF,kCACQ,CAAA,WACb,CAAA,sCAFO,kCACM,CAAA,WACb,CAAA,mCAFI,kCACS,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WACb,CAAA,oCAPD,kCAMc,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WAAsB,CACnC,yCAPD,kCAMc,CAAA,WAAA,CAAsB,+CANpC,kCAMc,CAAA,WAAA,CAAA,8CANd,kCAMc,CAAA,WAAA,CAAA,oDANd,kCAMc,CAAA,WAAA,CAAA,iDANd,kCAMc,CAAA,WAAA,CAAA,8BA1FG,iBC+mBZ,CACX,oBACA,CAAA,sRASC,SAAA,CAAY,uCCzmBE,CAAA,kGDinBd,qBACA,CAAA,yEAGmB,SAAA,CAAA,uCCzmBK,CAAA,gFDgnBxB,qBACA,CAAA,UAAY,CAAA,cACL,CAAA,WACP,CAAS,QACT,CAAA,YACA,CAAA,cCpoBY,CAAA,WDsoBJ,CAAA,kBAER,CAAA,4BACA,CAAA,0CACA,YAAA,CAAA,kBAMA,CAAA,sBACA,CAAA,UAAe,CAAE,gBCvoBF,CAAE,gBDyoBJ,CAAI,+CANjB,UAUA,CAAA,WACC,CAAK,gBC5pBI,CAAI,iDDipBd,UAAY,CAAA,+DAkBX,kCD/rBF,CAAA,iBAAsB,CAkFnB,eAAY,CAAA,WACZ,CAAA,gEC8mBD,cAAc,CAAA,sDAIb,iBAAA,CAGW,iBACF,CAAQ,kBCjrBA,CDmrBlB,SAAA,CAAA,yCAEkB,CAAA,6CAEA,CAAA,+BAClB,CAAA,iBAAkC,CAAM,6DARxC,iBAAY,CAWJ,QACP,CAAQ,SAAU,CAClB,mDAEA,SAAA,CAAA,+BAKM,CAAA,WAAA,CAAA,6CAEW,CAAA,kPAJlB,0CASQ,CAAA,8DACW,CAAA,sCAClB,UAAA,CAAA,qIAIF,SAAA,CAAA,+CAAA,YAQI,CAAA,sNASc,oCACA\",\"sourcesContent\":[\"$__iconfont__data: map-merge(if(global_variable_exists('__iconfont__data'), $__iconfont__data, ()), (\\n\\t\\\"iconfont-vue-e08a231\\\": (\\n\\t\\t\\\"arrow-left-double\\\": \\\"\\\\ea01\\\",\\n\\t\\t\\\"arrow-left\\\": \\\"\\\\ea02\\\",\\n\\t\\t\\\"arrow-right-double\\\": \\\"\\\\ea03\\\",\\n\\t\\t\\\"arrow-right\\\": \\\"\\\\ea04\\\",\\n\\t\\t\\\"breadcrumb\\\": \\\"\\\\ea05\\\",\\n\\t\\t\\\"checkmark\\\": \\\"\\\\ea06\\\",\\n\\t\\t\\\"close\\\": \\\"\\\\ea07\\\",\\n\\t\\t\\\"confirm\\\": \\\"\\\\ea08\\\",\\n\\t\\t\\\"info\\\": \\\"\\\\ea09\\\",\\n\\t\\t\\\"menu\\\": \\\"\\\\ea0a\\\",\\n\\t\\t\\\"more\\\": \\\"\\\\ea0b\\\",\\n\\t\\t\\\"pause\\\": \\\"\\\\ea0c\\\",\\n\\t\\t\\\"play\\\": \\\"\\\\ea0d\\\",\\n\\t\\t\\\"triangle-s\\\": \\\"\\\\ea0e\\\",\\n\\t\\t\\\"user-status-away\\\": \\\"\\\\ea0f\\\",\\n\\t\\t\\\"user-status-dnd\\\": \\\"\\\\ea10\\\",\\n\\t\\t\\\"user-status-invisible\\\": \\\"\\\\ea11\\\",\\n\\t\\t\\\"user-status-online\\\": \\\"\\\\ea12\\\"\\n\\t)\\n));\\n\\n\\n$create-font-face: true !default; // should the @font-face tag get created?\\n\\n// should there be a custom class for each icon? will be .filename\\n$create-icon-classes: true !default; \\n\\n// what is the common class name that icons share? in this case icons need to have .icon.filename in their classes\\n// this requires you to have 2 classes on each icon html element, but reduced redeclaration of the font family\\n// for each icon\\n$icon-common-class: 'icon' !default;\\n\\n// if you whish to prefix your filenames, here you can do so.\\n// if this string stays empty, your classes will use the filename, for example\\n// an icon called star.svg will result in a class called .star\\n// if you use the prefix to be 'icon-' it would result in .icon-star\\n$icon-prefix: '' !default; \\n\\n// helper function to get the correct font group\\n@function iconfont-group($group: null) {\\n @if (null == $group) {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n @if (false == map-has-key($__iconfont__data, $group)) {\\n @warn 'Undefined Iconfont Family!';\\n @return ();\\n }\\n @return map-get($__iconfont__data, $group);\\n}\\n\\n// helper function to get the correct icon of a group\\n@function iconfont-item($name) {\\n $slash: str-index($name, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($name, 0, $slash - 1);\\n $name: str-slice($name, $slash + 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n $group: iconfont-group($group);\\n @if (false == map-has-key($group, $name)) {\\n @warn 'Undefined Iconfont Glyph!';\\n @return '';\\n }\\n @return map-get($group, $name);\\n}\\n\\n// complete mixing to include the icon\\n// usage:\\n// .my_icon{ @include iconfont('star') }\\n@mixin iconfont($icon) {\\n $slash: str-index($icon, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($icon, 0, $slash - 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n &:before {\\n font-family: $group;\\n font-style: normal;\\n font-weight: 400;\\n content: iconfont-item($icon);\\n }\\n}\\n\\n// creates the font face tag if the variable is set to true (default)\\n@if $create-font-face == true {\\n @font-face {\\n font-family: \\\"iconfont-vue-e08a231\\\";\\n src: url('../iconfont-vue-e08a231.eot'); /* IE9 Compat Modes */\\n src: url('../iconfont-vue-e08a231.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\\n url('../iconfont-vue-e08a231.woff') format('woff'), /* Pretty Modern Browsers */\\n url('../iconfont-vue-e08a231.ttf') format('truetype'), /* Safari, Android, iOS */\\n url('../iconfont-vue-e08a231.svg') format('svg'); /* Legacy iOS */\\n }\\n}\\n\\n// creates icon classes for each individual loaded svg (default)\\n@if $create-icon-classes == true {\\n .#{$icon-common-class} {\\n font-style: normal;\\n font-weight: 400;\\n\\n @each $icon, $content in map-get($__iconfont__data, \\\"iconfont-vue-e08a231\\\") {\\n &.#{$icon-prefix}#{$icon}:before {\\n font-family: \\\"iconfont-vue-e08a231\\\";\\n content: iconfont-item(\\\"iconfont-vue-e08a231/#{$icon}\\\");\\n }\\n }\\n }\\n}\\n\",\"$scope_version:\\\"e08a231\\\"; @import 'variables';\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import '../../fonts/scss/iconfont-vue';\\n\\n.action-item {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\n\\t// put a grey round background when menu is opened\\n\\t// or hover-focused\\n\\t&--single:hover,\\n\\t&--single:focus,\\n\\t&--single:active,\\n\\t&__menutoggle:hover,\\n\\t&__menutoggle:focus,\\n\\t&__menutoggle:active {\\n\\t\\topacity: $opacity_full;\\n\\t\\t// good looking on dark AND white bg\\n\\t\\tbackground-color: $icon-focus-bg;\\n\\t}\\n\\n\\t// TODO: handle this in the future button component\\n\\t&__menutoggle:disabled,\\n\\t&--single:disabled {\\n\\t\\topacity: .3 !important;\\n\\t}\\n\\n\\t&.action-item--open .action-item__menutoggle {\\n\\t\\topacity: $opacity_full;\\n\\t\\tbackground-color: $action-background-hover;\\n\\t}\\n\\n\\t// icons\\n\\t&--single,\\n\\t&__menutoggle {\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: auto;\\n\\t\\tmin-width: $clickable-area;\\n\\t\\theight: $clickable-area;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: $icon-margin;\\n\\t\\tcursor: pointer;\\n\\t\\tborder: none;\\n\\t\\tborder-radius: $clickable-area / 2;\\n\\t\\tbackground-color: transparent;\\n\\t}\\n\\n\\t// icon-more\\n\\t&__menutoggle {\\n\\t\\t// align menu icon in center\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: center;\\n\\t\\topacity: $opacity_normal;\\n\\t\\tfont-weight: bold;\\n\\t\\tline-height: $icon-size;\\n\\n\\t\\t// image slot\\n\\t\\t/deep/ span {\\n\\t\\t\\twidth: $icon-size;\\n\\t\\t\\theight: $icon-size;\\n\\t\\t\\tline-height: $icon-size;\\n\\t\\t}\\n\\n\\t\\t&:before {\\n\\t\\t\\tcontent: '';\\n\\t\\t}\\n\\n\\t\\t&--default-icon {\\n\\t\\t\\t@include iconfont('more');\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\tfont-size: $icon-size;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--with-title {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tpadding-left: $clickable-area;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t\\tborder: 1px solid var(--color-border-dark);\\n\\t\\t\\t// with a title, we need to display this as a real button\\n\\t\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\t\\tbackground-position: $icon-margin center;\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\t// non-background icon class\\n\\t\\t\\t&:before {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: $icon-margin;\\n\\t\\t\\t\\tleft: $icon-margin;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--primary {\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tborder: none;\\n\\t\\t\\tbackground-color: var(--color-primary-element);\\n\\t\\t\\t.action-item--open &,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus,\\n\\t\\t\\t&:active {\\n\\t\\t\\t\\tcolor: var(--color-primary-text) !important;\\n\\t\\t\\t\\tbackground-color: var(--color-primary-element-light) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&--single {\\n\\t\\topacity: $opacity_normal;\\n\\t\\t&:hover,\\n\\t\\t&:focus,\\n\\t\\t&:active {\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t}\\n\\t\\t// hide anything the slot is displaying\\n\\t\\t& > [hidden] {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ie,\\n.edge {\\n\\t.action-item__menu,\\n\\t.action-item__menu .action-item__menu_arrow {\\n\\t\\tborder: 1px solid var(--color-border);\\n\\t}\\n}\\n\\n\",\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n// https://uxplanet.org/7-rules-for-mobile-ui-button-design-e9cf2ea54556\\n// recommended is 48px\\n// 44px is what we choose and have very good visual-to-usability ratio\\n$clickable-area: 44px;\\n\\n// background icon size\\n// also used for the scss icon font\\n$icon-size: 16px;\\n\\n// icon padding for a $clickable-area width and a $icon-size icon\\n// ( 44px - 16px ) / 2\\n$icon-margin: ($clickable-area - $icon-size) / 2;\\n\\n// transparency background for icons\\n$icon-focus-bg: rgba(127, 127, 127, .25);\\n\\n// popovermenu arrow width from the triangle center\\n$arrow-width: 9px;\\n\\n// opacities\\n$opacity_disabled: .5;\\n$opacity_normal: .7;\\n$opacity_full: 1;\\n\\n// menu round background hover feedback\\n// good looking on dark AND white bg\\n$action-background-hover: rgba(127, 127, 127, .25);\\n\\n// various structure data used in the \\n// `AppNavigation` component\\n$header-height: 50px;\\n$navigation-width: 300px;\\n\\n// mobile breakpoint\\n$breakpoint-mobile: 1024px;\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Actions from './Actions'\n\nexport default Actions\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst ScopeComponent = (Component) => {\n\t// Init mounted vue if none\n\tif (!Component.mounted) {\n\t\tComponent.mounted = []\n\t} else if (!Array.isArray(Component.mounted)) {\n\t\tComponent.mounted = [Component.mounted]\n\t}\n\n\t// Inject root scoping function\n\tComponent.mounted.push(function() {\n\t\tthis.$el.setAttribute(`data-v-${SCOPE_VERSION}`, '')\n\t})\n}\n\nexport default ScopeComponent\n","var render = function () {\nvar _obj, _obj$1;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isValidSingleAction && !_vm.forceMenu)?_c('element',_vm._b({directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.firstAction.text),expression:\"firstAction.text\",modifiers:{\"auto\":true}}],staticClass:\"action-item action-item--single\",class:( _obj = {}, _obj[_vm.firstAction.icon] = !_vm.iconSlotIsPopulated, _obj[_vm.firstActionClass] = !_vm.iconSlotIsPopulated, _obj ),attrs:{\"rel\":\"noreferrer noopener\",\"disabled\":_vm.disabled},on:_vm._d({},[_vm.firstActionEventBinding,_vm.execFirstAction])},'element',_vm.firstActionBinding,false),[_c('VNodes',{attrs:{\"vnodes\":_vm.firstActionIconSlot}}),_vm._v(\" \"),_c('span',{attrs:{\"aria-hidden\":true,\"hidden\":\"\"}},[_vm._t(\"default\")],2)],1):_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasMultipleActions || _vm.forceMenu),expression:\"hasMultipleActions || forceMenu\"}],staticClass:\"action-item\",class:{'action-item--open': _vm.opened}},[_c('Popover',{attrs:{\"delay\":0,\"handle-resize\":true,\"open\":_vm.opened,\"placement\":_vm.placement,\"boundaries-element\":_vm.boundariesElement,\"container\":_vm.container},on:{\"update:open\":function($event){_vm.opened=$event},\"show\":_vm.openMenu,\"apply-show\":_vm.onOpen,\"hide\":_vm.closeMenu}},[_c('button',{ref:\"menuButton\",staticClass:\"icon action-item__menutoggle\",class:( _obj$1 = {}, _obj$1[_vm.defaultIcon] = !_vm.iconSlotIsPopulated, _obj$1['action-item__menutoggle--with-title'] = _vm.menuTitle, _obj$1['action-item__menutoggle--primary'] = _vm.primary, _obj$1 ),attrs:{\"slot\":\"trigger\",\"disabled\":_vm.disabled,\"aria-label\":_vm.ariaLabel,\"aria-haspopup\":\"true\",\"aria-controls\":_vm.randomId,\"test-attr\":\"1\",\"aria-expanded\":_vm.opened ? 'true' : 'false'},slot:\"trigger\"},[_vm._t(\"icon\"),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.menuTitle)+\"\\n\\t\\t\")],2),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.opened),expression:\"opened\"}],ref:\"menu\",class:{ open: _vm.opened },attrs:{\"tabindex\":\"-1\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"up\",38,$event.key,[\"Up\",\"ArrowUp\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusPreviousAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusNextAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"tab\",9,$event.key,\"Tab\")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusNextAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"tab\",9,$event.key,\"Tab\")){ return null; }if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusPreviousAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-up\",undefined,$event.key,undefined)){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusFirstAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-down\",undefined,$event.key,undefined)){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusLastAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }$event.preventDefault();return _vm.closeMenu($event)}],\"mousemove\":_vm.onMouseFocusAction}},[_c('ul',{attrs:{\"id\":_vm.randomId,\"tabindex\":\"-1\"}},[(_vm.opened)?[_vm._t(\"default\")]:_vm._e()],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Marco Ambrosini <marcoambrosini@pm.me\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<!-- Accessibility guidelines:\nhttps://www.w3.org/TR/wai-aria-practices/examples/menu-button/menu-button-actions.html -->\n\n<docs>\n### Single action\n\n```\n<Actions>\n\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n</Actions>\n```\n\n### Multiple actions\n\n```\n<Actions>\n\t<ActionButton icon=\"icon-edit\" @click=\"alert('Edit')\">Edit</ActionButton>\n\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n\t<ActionLink icon=\"icon-external\" title=\"Link\" href=\"https://nextcloud.com\" />\n</Actions>\n```\n\n### Multiple actions with custom icon\n\n```\n<Actions default-icon=\"icon-edit\">\n\t<ActionButton icon=\"icon-edit\" @click=\"alert('Edit')\">Edit</ActionButton>\n\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n\t<ActionLink icon=\"icon-external\" title=\"Link\" href=\"https://nextcloud.com\" />\n</Actions>\n```\n\n### With menu title\n\n```\n<Actions default-icon=\"icon-edit\" menu-title=\"Object management\">\n\t<ActionButton icon=\"icon-edit\">Rename</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n\t<ActionButton icon=\"icon-confirm\">Validate</ActionButton>\n\t<ActionButton icon=\"icon-download\">Download</ActionButton>\n</Actions>\n```\n\n### Various icons styles\n```\n<Actions :primary=\"true\">\n\t<ActionButton icon=\"icon-edit\">Edit</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n</Actions>\n```\n\n```\n<Actions default-icon=\"icon-add-white\" :primary=\"true\" menu-title=\"Object management\">\n\t<ActionButton icon=\"icon-edit\">Rename</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n\t<ActionButton icon=\"icon-confirm\">Validate</ActionButton>\n\t<ActionButton icon=\"icon-download\">Download</ActionButton>\n</Actions>\n```\n\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```\n<template>\n\t<div style=\"display: flex;align-items: center;\">\n\t\t<button @click=\"toggled = !toggled\">Toggle multiple action</button>\n\t\t<Actions>\n\t\t\t<DotsHorizontalCircleOutline\n\t\t\t\tslot=\"icon\"\n\t\t\t\t:size=\"16\"\n\t\t\t\tdecorative />\n\t\t\t<ActionButton>\n\t\t\t\t<MicrophoneOff\n\t\t\t\t\tslot=\"icon\"\n\t\t\t\t\t:size=\"16\"\n\t\t\t\t\tdecorative />\n\t\t\t\tMute\n\t\t\t</ActionButton>\n\t\t\t<ActionButton v-if=\"toggled\" icon=\"icon-delete\">Delete</ActionButton>\n\t\t</Actions>\n\t\t<Actions>\n\t\t</Actions>\n\t</div>\n</template>\n<script>\nimport DotsHorizontalCircleOutline from 'vue-material-design-icons/DotsHorizontalCircleOutline'\nimport MicrophoneOff from 'vue-material-design-icons/MicrophoneOff'\n\nexport default {\n\tcomponents: {\n\t\tDotsHorizontalCircleOutline,\n\t\tMicrophoneOff,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false\n\t\t}\n\t}\n}\n</script>\n```\n\n### Custom icon slot in child elements\n```\n<Actions :primary=\"true\">\n\t<ActionButton><template #icon><MagnifyIcon /></template>Search</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n</Actions>\n```\n\n</docs>\n<template>\n\t<!-- if only one action, check if we need to bind to click or not -->\n\t<element v-if=\"isValidSingleAction && !forceMenu\"\n\t\tv-tooltip.auto=\"firstAction.text\"\n\t\tv-bind=\"firstActionBinding\"\n\t\t:class=\"{\n\t\t\t[firstAction.icon]: !iconSlotIsPopulated ,\n\t\t\t[firstActionClass]: !iconSlotIsPopulated }\"\n\t\tclass=\"action-item action-item--single\"\n\t\trel=\"noreferrer noopener\"\n\t\t:disabled=\"disabled\"\n\t\t@[firstActionEventBinding]=\"execFirstAction\">\n\t\t<!-- Render the icon slot content of the first action -->\n\t\t<VNodes :vnodes=\"firstActionIconSlot\" />\n\n\t\t<!-- fake slot to gather main action -->\n\t\t<span :aria-hidden=\"true\" hidden>\n\t\t\t<!-- @slot All action elements passed into the default slot will be used -->\n\t\t\t<slot />\n\t\t</span>\n\t</element>\n\n\t<!-- more than one action -->\n\t<div v-else\n\t\tv-show=\"hasMultipleActions || forceMenu\"\n\t\t:class=\"{'action-item--open': opened}\"\n\t\tclass=\"action-item\">\n\t\t<!-- If more than one action, create a popovermenu -->\n\t\t<Popover\n\t\t\t:delay=\"0\"\n\t\t\t:handle-resize=\"true\"\n\t\t\t:open.sync=\"opened\"\n\t\t\t:placement=\"placement\"\n\t\t\t:boundaries-element=\"boundariesElement\"\n\t\t\t:container=\"container\"\n\t\t\t@show=\"openMenu\"\n\t\t\t@apply-show=\"onOpen\"\n\t\t\t@hide=\"closeMenu\">\n\t\t\t<!-- Menu open/close trigger button -->\n\t\t\t<button slot=\"trigger\"\n\t\t\t\tref=\"menuButton\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\tclass=\"icon action-item__menutoggle\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t[defaultIcon]: !iconSlotIsPopulated,\n\t\t\t\t\t'action-item__menutoggle--with-title': menuTitle,\n\t\t\t\t\t'action-item__menutoggle--primary': primary\n\t\t\t\t}\"\n\t\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t:aria-controls=\"randomId\"\n\t\t\t\ttest-attr=\"1\"\n\t\t\t\t:aria-expanded=\"opened ? 'true' : 'false'\">\n\t\t\t\t<slot name=\"icon\" />\n\t\t\t\t{{ menuTitle }}\n\t\t\t</button>\n\n\t\t\t<!-- Menu content -->\n\t\t\t<div v-show=\"opened\"\n\t\t\t\tref=\"menu\"\n\t\t\t\t:class=\"{ open: opened }\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t\t@keydown.up.exact=\"focusPreviousAction\"\n\t\t\t\t@keydown.down.exact=\"focusNextAction\"\n\t\t\t\t@keydown.tab.exact=\"focusNextAction\"\n\t\t\t\t@keydown.shift.tab.exact=\"focusPreviousAction\"\n\t\t\t\t@keydown.page-up.exact=\"focusFirstAction\"\n\t\t\t\t@keydown.page-down.exact=\"focusLastAction\"\n\t\t\t\t@keydown.esc.exact.prevent=\"closeMenu\"\n\t\t\t\t@mousemove=\"onMouseFocusAction\">\n\t\t\t\t<!-- menu content -->\n\t\t\t\t<ul :id=\"randomId\" tabindex=\"-1\">\n\t\t\t\t\t<template v-if=\"opened\">\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</template>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</Popover>\n\t</div>\n</template>\n<script>\nimport Tooltip from '../../directives/Tooltip'\nimport GenRandomId from '../../utils/GenRandomId'\nimport ValidateSlot from '../../utils/ValidateSlot'\nimport { t } from '../../l10n'\nimport Popover from '../Popover'\n\n// This is the list of ALL the ALLOWED components\n// in the default SLOT\nconst allowedChildren = [\n\t'ActionButton',\n\t'ActionCheckbox',\n\t'ActionInput',\n\t'ActionLink',\n\t'ActionRadio',\n\t'ActionRouter',\n\t'ActionSeparator',\n\t'ActionText',\n\t'ActionTextEditable',\n]\n\nconst focusableSelector = '.focusable'\n\n/**\n * The Actions component can be used to display one ore more actions.\n * If only a single action is provided, it will be rendered as an inline icon.\n * For more, a menu indicator will be shown and a popovermenu containing the\n * actions will be opened on click.\n *\n * @since 0.10.0\n */\nexport default {\n\tname: 'Actions',\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tcomponents: {\n\t\tPopover,\n\n\t\t// Component to render the first action icon slot content (vnodes)\n\t\tVNodes: {\n\t\t\tfunctional: true,\n\t\t\trender: (h, context) => context.props.vnodes,\n\t\t},\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Specify the open state of the popover menu\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Force the actions to display in a three dot menu\n\t\t */\n\t\tforceMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specify the menu title\n\t\t */\n\t\tmenuTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Apply primary styling for this menu\n\t\t */\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Icon to show for the toggle menu button\n\t\t * when more than one action is inside the actions component.\n\t\t * Only replace the default three-dot icon if really necessary.\n\t\t */\n\t\tdefaultIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'action-item__menutoggle--default-icon',\n\t\t},\n\n\t\t/**\n\t\t * Aria label for the actions menu\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: t('Actions'),\n\t\t},\n\n\t\t/**\n\t\t * Wanted direction of the menu\n\t\t */\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'bottom',\n\t\t},\n\n\t\t/**\n\t\t * DOM element for the actions' popover boundaries\n\t\t */\n\t\tboundariesElement: {\n\t\t\ttype: Element,\n\t\t\tdefault: () => document.querySelector('body'),\n\t\t},\n\n\t\t/**\n\t\t * Selector for the actions' popover container\n\t\t */\n\t\tcontainer: {\n\t\t\ttype: String,\n\t\t\tdefault: 'body',\n\t\t},\n\n\t\t/**\n\t\t * Disabled state of the main button (single action or menu toggle)\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tactions: [],\n\t\t\topened: this.open,\n\t\t\tfocusIndex: 0,\n\t\t\trandomId: 'menu-' + GenRandomId(),\n\t\t\t// Making children reactive!\n\t\t\t// By binding this here, vuejs will track the object content\n\t\t\t// Needed for firstAction reactivity !!!\n\t\t\tchildren: this.$children,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is there more than one action?\n\t\t * @returns {boolean}\n\t\t */\n\t\thasMultipleActions() {\n\t\t\treturn this.actions.length > 1\n\t\t},\n\t\t/**\n\t\t * Is there any first action ?\n\t\t * And is it allowed as a standalone element ?\n\t\t * @returns {boolean}\n\t\t */\n\t\tisValidSingleAction() {\n\t\t\treturn this.actions.length === 1\n\t\t\t\t&& this.firstActionElement !== null\n\t\t},\n\t\t/**\n\t\t * First action vnode\n\t\t * @returns {Object} return the first action vue vnode\n\t\t */\n\t\tfirstActionVNode() {\n\t\t\treturn this.actions[0]\n\t\t},\n\t\t/**\n\t\t * Reactive binding to the first children\n\t\t * Since we're here, it means we already passed all the proper checks\n\t\t * we can assume the first action is the first children too\n\t\t * @returns {Object} first action vue children object\n\t\t */\n\t\tfirstAction() {\n\t\t\treturn this.children[0]\n\t\t\t\t? this.children[0]\n\t\t\t\t: {}\n\t\t},\n\n\t\t/**\n\t\t * Binding of the first action to the template\n\t\t * @returns {Object} vue template v-bind shortcut\n\t\t */\n\t\tfirstActionBinding() {\n\t\t\tif (this.firstActionVNode && this.firstActionVNode.componentOptions) {\n\t\t\t\tconst tag = this.firstActionVNode.componentOptions.tag\n\t\t\t\tif (tag === 'ActionLink') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tis: 'a',\n\t\t\t\t\t\thref: this.firstAction.href,\n\t\t\t\t\t\ttarget: this.firstAction.target,\n\t\t\t\t\t\t'aria-label': this.firstAction.ariaLabel,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tag === 'ActionRouter') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tis: 'router-link',\n\t\t\t\t\t\tto: this.firstAction.to,\n\t\t\t\t\t\texact: this.firstAction.exact,\n\t\t\t\t\t\t'aria-label': this.firstAction.ariaLabel,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tag === 'ActionButton') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tis: 'button',\n\t\t\t\t\t\t'aria-label': this.firstAction.ariaLabel,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// other action types are not allowed as standalone buttons\n\t\t\treturn null\n\t\t},\n\n\t\t// return the event to bind if the firstActionVNode have an action\n\t\tfirstActionEvent() {\n\t\t\treturn this.firstActionVNode?.componentOptions?.listeners?.click\n\t\t},\n\t\tfirstActionEventBinding() {\n\t\t\treturn this.firstActionEvent ? 'click' : null\n\t\t},\n\t\t// return the first action icon slot vnodes array\n\t\tfirstActionIconSlot() {\n\t\t\treturn this.firstAction?.$slots?.icon\n\t\t},\n\t\tfirstActionClass() {\n\t\t\tconst staticClass = this.firstActionVNode && this.firstActionVNode.data.staticClass\n\t\t\tconst dynClass = this.firstActionVNode && this.firstActionVNode.data.class\n\t\t\treturn `${staticClass} ${dynClass}`\n\t\t},\n\n\t\ticonSlotIsPopulated() {\n\t\t\treturn !!this.$slots.icon\n\t\t},\n\t},\n\n\twatch: {\n\t\t// Watch parent prop\n\t\topen(state) {\n\t\t\tif (state === this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = state\n\t\t},\n\t},\n\tbeforeMount() {\n\t\t// init actions\n\t\tthis.initActions()\n\n\t\t// filter invalid menu items\n\t\tValidateSlot(this.$slots.default, allowedChildren, this)\n\t},\n\tbeforeUpdate() {\n\t\t// ! since we're using $slots to manage our actions\n\t\t// ! we NEED to update the actions if anything change\n\n\t\t// update children & actions\n\t\t// no need to init actions again since we bound it to $children\n\t\t// and the array is now reactive\n\t\t// init actions\n\t\tthis.initActions()\n\t\tValidateSlot(this.$slots.default, allowedChildren, this)\n\t},\n\n\tmethods: {\n\t\t// MENU STATE MANAGEMENT\n\t\topenMenu(e) {\n\t\t\tif (this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = true\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu open state is changed\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is closed\n\t\t\t */\n\t\t\tthis.$emit('open')\n\n\t\t\tthis.onOpen(e)\n\t\t},\n\t\tcloseMenu(e) {\n\t\t\tif (!this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = false\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu open state is changed\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is closed\n\t\t\t */\n\t\t\tthis.$emit('close')\n\n\t\t\t// close everything\n\t\t\tthis.opened = false\n\t\t\tthis.focusIndex = 0\n\n\t\t\t// focus back the menu button\n\t\t\tthis.$refs.menuButton.focus()\n\t\t},\n\n\t\tonOpen(event) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.focusFirstAction(event)\n\t\t\t})\n\t\t},\n\n\t\t// MENU KEYS & FOCUS MANAGEMENT\n\t\t// focus nearest focusable item on mouse move\n\t\t// DO NOT change the focus if the target is already focused\n\t\t// this will prevent issues with input being unfocused\n\t\t// on mouse move\n\t\tonMouseFocusAction(event) {\n\t\t\tif (document.activeElement === event.target) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst menuItem = event.target.closest('li')\n\t\t\tif (menuItem) {\n\t\t\t\tconst focusableItem = menuItem.querySelector(focusableSelector)\n\t\t\t\tif (focusableItem) {\n\t\t\t\t\tconst focusList = this.$refs.menu.querySelectorAll(focusableSelector)\n\t\t\t\t\tconst focusIndex = [...focusList].indexOf(focusableItem)\n\t\t\t\t\tif (focusIndex > -1) {\n\t\t\t\t\t\tthis.focusIndex = focusIndex\n\t\t\t\t\t\tthis.focusAction()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremoveCurrentActive() {\n\t\t\tconst currentActiveElement = this.$refs.menu.querySelector('li.active')\n\t\t\tif (currentActiveElement) {\n\t\t\t\tcurrentActiveElement.classList.remove('active')\n\t\t\t}\n\t\t},\n\t\tfocusAction() {\n\t\t\t// TODO: have a global disabled state for non input elements\n\t\t\tconst focusElement = this.$refs.menu.querySelectorAll(focusableSelector)[this.focusIndex]\n\t\t\tif (focusElement) {\n\t\t\t\tthis.removeCurrentActive()\n\t\t\t\tconst liMenuParent = focusElement.closest('li.action')\n\t\t\t\tfocusElement.focus()\n\t\t\t\tif (liMenuParent) {\n\t\t\t\t\tliMenuParent.classList.add('active')\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfocusPreviousAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tif (this.focusIndex === 0) {\n\t\t\t\t\t// First element overflows to body-navigation (no preventDefault!) and closes Actions-menu\n\t\t\t\t\tthis.closeMenu()\n\t\t\t\t} else {\n\t\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t\tthis.focusIndex = this.focusIndex - 1\n\t\t\t\t}\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusNextAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tconst indexLength = this.$refs.menu.querySelectorAll(focusableSelector).length - 1\n\t\t\t\tif (this.focusIndex === indexLength) {\n\t\t\t\t\t// Last element overflows to body-navigation (no preventDefault!) and closes Actions-menu\n\t\t\t\t\tthis.closeMenu()\n\t\t\t\t} else {\n\t\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t\tthis.focusIndex = this.focusIndex + 1\n\t\t\t\t}\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusFirstAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\tthis.focusIndex = 0\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusLastAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\tthis.focusIndex = this.$el.querySelectorAll(focusableSelector).length - 1\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\n\t\tpreventIfEvent(event) {\n\t\t\tif (event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t},\n\n\t\t// ACTIONS MANAGEMENT\n\t\t// exec the first action\n\t\texecFirstAction(event) {\n\t\t\tif (this.firstActionEvent) {\n\t\t\t\tthis.firstActionEvent(event)\n\t\t\t}\n\t\t},\n\t\tinitActions() {\n\t\t\t// filter out invalid slots\n\t\t\tthis.actions = (this.$slots.default || []).filter(node => !!node && !!node.componentOptions)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../fonts/scss/iconfont-vue';\n\n.action-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\n\t// put a grey round background when menu is opened\n\t// or hover-focused\n\t&--single:hover,\n\t&--single:focus,\n\t&--single:active,\n\t&__menutoggle:hover,\n\t&__menutoggle:focus,\n\t&__menutoggle:active {\n\t\topacity: $opacity_full;\n\t\t// good looking on dark AND white bg\n\t\tbackground-color: $icon-focus-bg;\n\t}\n\n\t// TODO: handle this in the future button component\n\t&__menutoggle:disabled,\n\t&--single:disabled {\n\t\topacity: .3 !important;\n\t}\n\n\t&.action-item--open .action-item__menutoggle {\n\t\topacity: $opacity_full;\n\t\tbackground-color: $action-background-hover;\n\t}\n\n\t// icons\n\t&--single,\n\t&__menutoggle {\n\t\tbox-sizing: border-box;\n\t\twidth: auto;\n\t\tmin-width: $clickable-area;\n\t\theight: $clickable-area;\n\t\tmargin: 0;\n\t\tpadding: $icon-margin;\n\t\tcursor: pointer;\n\t\tborder: none;\n\t\tborder-radius: $clickable-area / 2;\n\t\tbackground-color: transparent;\n\t}\n\n\t// icon-more\n\t&__menutoggle {\n\t\t// align menu icon in center\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\topacity: $opacity_normal;\n\t\tfont-weight: bold;\n\t\tline-height: $icon-size;\n\n\t\t// image slot\n\t\t/deep/ span {\n\t\t\twidth: $icon-size;\n\t\t\theight: $icon-size;\n\t\t\tline-height: $icon-size;\n\t\t}\n\n\t\t&:before {\n\t\t\tcontent: '';\n\t\t}\n\n\t\t&--default-icon {\n\t\t\t@include iconfont('more');\n\t\t\t&::before {\n\t\t\t\tfont-size: $icon-size;\n\t\t\t}\n\t\t}\n\n\t\t&--with-title {\n\t\t\tposition: relative;\n\t\t\tpadding-left: $clickable-area;\n\t\t\twhite-space: nowrap;\n\t\t\topacity: $opacity_full;\n\t\t\tborder: 1px solid var(--color-border-dark);\n\t\t\t// with a title, we need to display this as a real button\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t\tbackground-position: $icon-margin center;\n\t\t\tfont-size: inherit;\n\t\t\t// non-background icon class\n\t\t\t&:before {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: $icon-margin;\n\t\t\t\tleft: $icon-margin;\n\t\t\t}\n\t\t}\n\n\t\t&--primary {\n\t\t\topacity: $opacity_full;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tborder: none;\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t\t.action-item--open &,\n\t\t\t&:hover,\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\tcolor: var(--color-primary-text) !important;\n\t\t\t\tbackground-color: var(--color-primary-element-light) !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--single {\n\t\topacity: $opacity_normal;\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\topacity: $opacity_full;\n\t\t}\n\t\t// hide anything the slot is displaying\n\t\t& > [hidden] {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.ie,\n.edge {\n\t.action-item__menu,\n\t.action-item__menu .action-item__menu_arrow {\n\t\tborder: 1px solid var(--color-border);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Actions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Actions.vue?vue&type=script&lang=js&\"","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Actions.vue?vue&type=style&index=0&id=1b33c33b&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"li.active[data-v-42b28436]{background-color:var(--color-background-hover)}.action--disabled[data-v-42b28436]{pointer-events:none;opacity:.5}.action--disabled[data-v-42b28436]:hover,.action--disabled[data-v-42b28436]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-42b28436]{opacity:1 !important}.action-button[data-v-42b28436]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-right:14px;cursor:pointer;white-space:nowrap;opacity:.7;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:normal;font-size:var(--default-font-size);line-height:44px}.action-button[data-v-42b28436]:hover,.action-button[data-v-42b28436]:focus{opacity:1}.action-button>span[data-v-42b28436]{cursor:pointer;white-space:nowrap}.action-button__icon[data-v-42b28436]{width:44px;height:44px;opacity:1;background-position:14px center;background-size:16px;background-repeat:no-repeat}.action-button .material-design-icon[data-v-42b28436]{width:44px;height:44px;opacity:1}.action-button .material-design-icon .material-design-icon__svg[data-v-42b28436]{vertical-align:middle}.action-button p[data-v-42b28436]{width:220px;padding:7px 0;cursor:pointer;text-align:left;line-height:1.6em;overflow:hidden;text-overflow:ellipsis}.action-button__longtext[data-v-42b28436]{cursor:pointer;white-space:pre-wrap}.action-button__title[data-v-42b28436]{font-weight:bold;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:inline-block}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../assets/action.scss\",\"webpack://./../../assets/variables.scss\"],\"names\":[],\"mappings\":\"AAwBC,2BAEE,8CAA+C,CAC/C,mCAMD,mBAAoB,CACpB,UCQmB,CDVpB,kFAIE,cAAe,CACf,UCKkB,CDVpB,qCAQE,oBAAqB,CACrB,gCAOD,YAAa,CACb,sBAAuB,CAEvB,UAAW,CACX,WAAY,CACZ,QAAS,CACT,SAAU,CACV,kBCtB8C,CDwB9C,cAAe,CACf,kBAAmB,CAEnB,UCjBiB,CDkBjB,4BAA6B,CAC7B,QAAS,CACT,eAAgB,CAChB,4BAA6B,CAC7B,eAAgB,CAEhB,kBAAmB,CACnB,kCAAmC,CACnC,gBC5CmB,CDsBpB,4EA0BE,SC7Ba,CDGf,qCA8BE,cAAe,CACf,kBAAmB,CACnB,sCAGA,UCzDkB,CD0DlB,WC1DkB,CD2DlB,SCxCa,CDyCb,+BAAwC,CACxC,oBCzDa,CD0Db,2BAA4B,CAxC9B,sDA4CE,UClEkB,CDmElB,WCnEkB,CDoElB,SCjDa,CDGf,iFAiDG,qBAAsB,CAjDzB,kCAuDE,WAAY,CACZ,aAA8B,CAE9B,cAAe,CACf,eAAgB,CAEhB,iBAAkB,CAGlB,eAAgB,CAChB,sBAAuB,CACvB,0CAGA,cAAe,CAEf,oBAAqB,CACrB,uCAGA,gBAAiB,CACjB,sBAAuB,CACvB,eAAgB,CAChB,kBAAmB,CACnB,cAAe,CACf,oBAAqB\",\"sourcesContent\":[\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n * @author Marco Ambrosini <marcoambrosini@pm.me>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n@mixin action-active {\\n\\tli {\\n\\t\\t&.active {\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t}\\n\\t}\\n}\\n\\n@mixin action--disabled {\\n\\t.action--disabled {\\n\\t\\tpointer-events: none;\\n\\t\\topacity: $opacity_disabled;\\n\\t\\t&:hover, &:focus {\\n\\t\\t\\tcursor: default;\\n\\t\\t\\topacity: $opacity_disabled;\\n\\t\\t}\\n\\t\\t& * {\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n\\n@mixin action-item($name) {\\n\\t.action-#{$name} {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\n\\t\\twidth: 100%;\\n\\t\\theight: auto;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 0;\\n\\t\\tpadding-right: $icon-margin;\\n\\n\\t\\tcursor: pointer;\\n\\t\\twhite-space: nowrap;\\n\\n\\t\\topacity: $opacity_normal;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tborder: 0;\\n\\t\\tborder-radius: 0; // otherwise Safari will cut the border-radius area\\n\\t\\tbackground-color: transparent;\\n\\t\\tbox-shadow: none;\\n\\n\\t\\tfont-weight: normal;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\tline-height: $clickable-area;\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t}\\n\\n\\t\\t& > span {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\n\\t\\t&__icon {\\n\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\theight: $clickable-area;\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t\\tbackground-position: $icon-margin center;\\n\\t\\t\\tbackground-size: $icon-size;\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t}\\n\\n\\t\\t.material-design-icon {\\n\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\theight: $clickable-area;\\n\\t\\t\\topacity: $opacity_full;\\n\\n\\t\\t\\t.material-design-icon__svg {\\n\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// long text area\\n\\t\\tp {\\n\\t\\t\\twidth: 220px;\\n\\t\\t\\tpadding: #{$icon-margin / 2} 0;\\n\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\ttext-align: left;\\n\\n\\t\\t\\tline-height: 1.6em;\\n\\n\\t\\t\\t// in case there are no spaces like long email addresses\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t}\\n\\n\\t\\t&__longtext {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\t// allow the use of `\\\\n`\\n\\t\\t\\twhite-space: pre-wrap;\\n\\t\\t}\\n\\n\\t\\t&__title {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\t}\\n}\\n\",\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n// https://uxplanet.org/7-rules-for-mobile-ui-button-design-e9cf2ea54556\\n// recommended is 48px\\n// 44px is what we choose and have very good visual-to-usability ratio\\n$clickable-area: 44px;\\n\\n// background icon size\\n// also used for the scss icon font\\n$icon-size: 16px;\\n\\n// icon padding for a $clickable-area width and a $icon-size icon\\n// ( 44px - 16px ) / 2\\n$icon-margin: ($clickable-area - $icon-size) / 2;\\n\\n// transparency background for icons\\n$icon-focus-bg: rgba(127, 127, 127, .25);\\n\\n// popovermenu arrow width from the triangle center\\n$arrow-width: 9px;\\n\\n// opacities\\n$opacity_disabled: .5;\\n$opacity_normal: .7;\\n$opacity_full: 1;\\n\\n// menu round background hover feedback\\n// good looking on dark AND white bg\\n$action-background-hover: rgba(127, 127, 127, .25);\\n\\n// various structure data used in the \\n// `AppNavigation` component\\n$header-height: 50px;\\n$navigation-width: 300px;\\n\\n// mobile breakpoint\\n$breakpoint-mobile: 1024px;\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = require(\"core-js/modules/es.array.splice.js\");","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"action\",class:{ 'action--disabled': _vm.disabled }},[_c('button',{staticClass:\"action-button\",class:{ focusable: _vm.isFocusable },attrs:{\"aria-label\":_vm.ariaLabel},on:{\"click\":_vm.onClick}},[_c('span',{staticClass:\"action-button__icon\",class:[_vm.isIconUrl ? 'action-button__icon--url' : _vm.icon],style:({ backgroundImage: _vm.isIconUrl ? (\"url(\" + _vm.icon + \")\") : null })},[_vm._t(\"icon\")],2),_vm._v(\" \"),(_vm.title)?_c('p',[_c('strong',{staticClass:\"action-button__title\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('span',{staticClass:\"action-button__longtext\",domProps:{\"textContent\":_vm._s(_vm.text)}})]):(_vm.isLongText)?_c('p',{staticClass:\"action-button__longtext\",domProps:{\"textContent\":_vm._s(_vm.text)}}):_c('span',{staticClass:\"action-button__text\"},[_vm._v(_vm._s(_vm.text))]),_vm._v(\" \"),(false)?_vm._t(\"default\"):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionButton.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Marco Ambrosini <marcoambrosini@pm.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<docs>\nThis component is made to be used inside of the [Actions](#Actions) component slots.\n\n```vue\n\t<Actions>\n\t\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n\t\t<ActionButton icon=\"icon-delete\" :close-after-click=\"true\" @click=\"alert('Delete and close menu')\">Delete and close</ActionButton>\n\t\t<ActionButton icon=\"icon-delete\" :disabled=\"true\" @click=\"alert('Disabled')\">Disabled button</ActionButton>\n\t</Actions>\n```\n\nIf you're using a long text you can specify a title\n\n```vue\n\t<Actions>\n\t\t<ActionButton icon=\"icon-add\" @click=\"alert('Add')\">Add new</ActionButton>\n\t\t<ActionButton icon=\"icon-delete\" title=\"Long button\" @click=\"alert('Delete')\">This button is associated with a very long text.\\nAnd with new lines too.</ActionButton>\n\t</Actions>\n```\n\nYou can also use a custom icon, for example from the vue-material-design-icons library:\n\n```vue\n<template>\n\t<Actions>\n\t\t<ActionButton>\n\t\t\t<HandLeft\n\t\t\t\tslot=\"icon\"\n\t\t\t\t:size=\"16\"\n\t\t\t\tdecorative\n\t\t\t\ttitle=\"\" />\n\t\t\tRaise left hand\n\t\t</ActionButton>\n\t\t<ActionButton>\n\t\t\t<HandRight\n\t\t\t\tslot=\"icon\"\n\t\t\t\t:size=\"16\"\n\t\t\t\tdecorative\n\t\t\t\ttitle=\"\" />\n\t\t\tRaise right hand\n\t\t</ActionButton>\n\t</Actions>\n</template>\n<script>\nimport HandLeft from 'vue-material-design-icons/HandLeft'\nimport HandRight from 'vue-material-design-icons/HandRight'\n\nexport default {\n\tcomponents: {\n\t\tHandLeft,\n\t\tHandRight,\n\t},\n}\n</script>\n```\n</docs>\n\n<template>\n\t<li class=\"action\" :class=\"{ 'action--disabled': disabled }\">\n\t\t<button\n\t\t\tclass=\"action-button\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t:class=\"{ focusable: isFocusable }\"\n\t\t\t@click=\"onClick\">\n\t\t\t<span :class=\"[isIconUrl ? 'action-button__icon--url' : icon]\"\n\t\t\t\t:style=\"{ backgroundImage: isIconUrl ? `url(${icon})` : null }\"\n\t\t\t\tclass=\"action-button__icon\">\n\t\t\t\t<!-- @slot Manually provide icon -->\n\t\t\t\t<slot name=\"icon\" />\n\t\t\t</span>\n\n\t\t\t<!-- long text with title -->\n\t\t\t<p v-if=\"title\">\n\t\t\t\t<strong class=\"action-button__title\">\n\t\t\t\t\t{{ title }}\n\t\t\t\t</strong>\n\t\t\t\t<br>\n\t\t\t\t<!-- white space is shown on longtext, so we can't\n\t\t\t\t\tput {{ text }} on a new line for code readability -->\n\t\t\t\t<span class=\"action-button__longtext\" v-text=\"text\" />\n\t\t\t</p>\n\n\t\t\t<!-- long text only -->\n\t\t\t<!-- white space is shown on longtext, so we can't\n\t\t\t\tput {{ text }} on a new line for code readability -->\n\t\t\t<p v-else-if=\"isLongText\"\n\t\t\t\tclass=\"action-button__longtext\"\n\t\t\t\tv-text=\"text\" />\n\n\t\t\t<!-- default text display -->\n\t\t\t<span v-else class=\"action-button__text\">{{ text }}</span>\n\n\t\t\t<!-- fake slot to gather inner text -->\n\t\t\t<slot v-if=\"false\" />\n\t\t</button>\n\t</li>\n</template>\n\n<script>\nimport ActionTextMixin from '../../mixins/actionText'\n\n/**\n * Button component to be used in Actions\n*/\nexport default {\n\tname: 'ActionButton',\n\n\tmixins: [ActionTextMixin],\n\n\tprops: {\n\t\t/**\n\t\t * disabled state of the action button\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * determines if the action is focusable\n\t\t * @returns {boolean} is the action focusable ?\n\t\t */\n\t\tisFocusable() {\n\t\t\treturn !this.disabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../assets/action';\n@include action-active;\n@include action--disabled;\n@include action-item('button');\n</style>\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionButton.vue?vue&type=style&index=0&id=42b28436&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","module.exports = require(\"hammerjs\");","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport ActionButton from './ActionButton'\n\nexport default ActionButton\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../fonts/iconfont-vue-e08a231.eot\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"../../fonts/iconfont-vue-e08a231.woff\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"../../fonts/iconfont-vue-e08a231.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"../../fonts/iconfont-vue-e08a231.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face{font-family:\\\"iconfont-vue-e08a231\\\";src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"embedded-opentype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"woff\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format(\\\"truetype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format(\\\"svg\\\")}.icon[data-v-3e0b109b]{font-style:normal;font-weight:400}.icon.arrow-left-double[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.arrow-left[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.arrow-right-double[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.arrow-right[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.breadcrumb[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.checkmark[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.close[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.confirm[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.info[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.menu[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.more[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.pause[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.play[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.triangle-s[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-away[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-dnd[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-invisible[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.icon.user-status-online[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";content:\\\"\\\"}.modal-mask[data-v-3e0b109b]{position:fixed;z-index:9998;top:0;left:0;display:block;width:100%;height:100%;background-color:rgba(0,0,0,0.5)}.modal-mask--dark[data-v-3e0b109b]{background-color:rgba(0,0,0,0.92)}.modal-header[data-v-3e0b109b]{position:absolute;z-index:10001;top:0;right:0;left:0;display:flex !important;align-items:center;justify-content:center;width:100%;height:50px;transition:opacity 250ms, visibility 250ms}.modal-header.invisible[style*='display:none'][data-v-3e0b109b],.modal-header.invisible[style*='display: none'][data-v-3e0b109b]{visibility:hidden}.modal-header .modal-title[data-v-3e0b109b]{overflow-x:hidden;box-sizing:border-box;width:100%;padding:0 132px 0 12px;transition:padding ease 100ms;white-space:nowrap;text-overflow:ellipsis;color:#fff;font-size:14px}@media only screen and (min-width: 512px){.modal-header .modal-title[data-v-3e0b109b]{text-align:center;padding-left:132px}}.modal-header .icons-menu[data-v-3e0b109b]{position:absolute;right:0;display:flex;align-items:center;justify-content:flex-end}.modal-header .icons-menu .icon-close[data-v-3e0b109b]{box-sizing:border-box;margin:3px;padding:10px 11px;color:#fff;background-image:none;font-size:23px}.modal-header .icons-menu .icon-close[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-header .icons-menu .play-pause[data-v-3e0b109b]{position:relative;width:50px;height:50px;margin:0;padding:0;cursor:pointer;color:white;border:none;background-color:transparent;font-size:22px}.modal-header .icons-menu .play-pause:hover .icon-play[data-v-3e0b109b],.modal-header .icons-menu .play-pause:hover .icon-pause[data-v-3e0b109b],.modal-header .icons-menu .play-pause:focus .icon-play[data-v-3e0b109b],.modal-header .icons-menu .play-pause:focus .icon-pause[data-v-3e0b109b]{opacity:1;border-radius:22px;background-color:rgba(127,127,127,0.25)}.modal-header .icons-menu .play-pause .icon-play[data-v-3e0b109b],.modal-header .icons-menu .play-pause .icon-pause[data-v-3e0b109b]{box-sizing:border-box;width:44px;height:44px;margin:3px;opacity:.7;background-image:none;cursor:pointer}.modal-header .icons-menu .play-pause .icon-play[data-v-3e0b109b]{padding:11px 13px}.modal-header .icons-menu .play-pause .icon-play[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-header .icons-menu .play-pause .icon-pause[data-v-3e0b109b]{padding:12px;font-size:19.5px}.modal-header .icons-menu .play-pause .icon-pause[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-header .icons-menu .header-actions[data-v-3e0b109b]{margin:3px;color:white}.modal-header .icons-menu .action-item--single[data-v-3e0b109b]{box-sizing:border-box;width:44px;height:44px;cursor:pointer;background-position:center;background-size:22px}.modal-header .icons-menu[data-v-3e0b109b] .action-item__menutoggle{padding:13px 11px;color:#fff;font-size:22px}.modal-wrapper[data-v-3e0b109b]{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.modal-wrapper .prev[data-v-3e0b109b],.modal-wrapper .next[data-v-3e0b109b]{z-index:10000;display:flex !important;align-items:center;justify-content:center;width:15%;min-width:60px;height:100%;transition:opacity 250ms, visibility 250ms}.modal-wrapper .prev.invisible[style*='display:none'][data-v-3e0b109b],.modal-wrapper .prev.invisible[style*='display: none'][data-v-3e0b109b],.modal-wrapper .next.invisible[style*='display:none'][data-v-3e0b109b],.modal-wrapper .next.invisible[style*='display: none'][data-v-3e0b109b]{visibility:hidden}.modal-wrapper .icon-next[data-v-3e0b109b],.modal-wrapper .icon-previous[data-v-3e0b109b]{box-sizing:border-box;width:44px;height:44px;padding:12px 11px;color:white;border-radius:22px;background-image:none;font-size:24px}.modal-wrapper .icon-previous[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-wrapper .icon-next[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-e08a231\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-wrapper .modal-container[data-v-3e0b109b]{display:block;overflow:hidden;padding:0;transition:transform 300ms ease;border-radius:var(--border-radius-large);background-color:var(--color-main-background);box-shadow:0 0 40px rgba(0,0,0,0.2)}.modal-wrapper:not(.modal-wrapper--large):not(.modal-wrapper--full) .modal-container[data-v-3e0b109b]{max-width:900px;max-height:80%}.modal-wrapper--full .modal-container[data-v-3e0b109b]{max-width:100%;max-height:100%;border-radius:0}.modal-wrapper--full .prev[data-v-3e0b109b],.modal-wrapper--full .next[data-v-3e0b109b],.modal-wrapper--spread-navigation .prev[data-v-3e0b109b],.modal-wrapper--spread-navigation .next[data-v-3e0b109b]{position:absolute;width:10%}.modal-wrapper--full .prev[data-v-3e0b109b],.modal-wrapper--spread-navigation .prev[data-v-3e0b109b]{left:0}.modal-wrapper--full .next[data-v-3e0b109b],.modal-wrapper--spread-navigation .next[data-v-3e0b109b]{right:0}.modal-wrapper--large .modal-container[data-v-3e0b109b]{max-width:85%;max-height:90%}.modal-wrapper--large .prev[data-v-3e0b109b],.modal-wrapper--large .next[data-v-3e0b109b]{width:10%;min-width:44px}.fade-enter-active[data-v-3e0b109b],.fade-leave-active[data-v-3e0b109b]{transition:opacity 250ms}.fade-enter[data-v-3e0b109b],.fade-leave-to[data-v-3e0b109b]{opacity:0}.fade-visibility-enter[data-v-3e0b109b],.fade-visibility-leave-to[data-v-3e0b109b]{visibility:hidden;opacity:0}.modal-in-enter-active[data-v-3e0b109b],.modal-in-leave-active[data-v-3e0b109b],.modal-out-enter-active[data-v-3e0b109b],.modal-out-leave-active[data-v-3e0b109b]{transition:opacity 250ms}.modal-in-enter[data-v-3e0b109b],.modal-in-leave-to[data-v-3e0b109b],.modal-out-enter[data-v-3e0b109b],.modal-out-leave-to[data-v-3e0b109b]{opacity:0}.modal-in-enter .modal-container[data-v-3e0b109b],.modal-in-leave-to .modal-container[data-v-3e0b109b]{transform:scale(0.9)}.modal-out-enter .modal-container[data-v-3e0b109b],.modal-out-leave-to .modal-container[data-v-3e0b109b]{transform:scale(1.1)}.modal-mask .play-pause .progress-ring[data-v-3e0b109b]{position:absolute;top:0;left:0;transform:rotate(-90deg)}.modal-mask .play-pause .progress-ring .progress-ring__circle[data-v-3e0b109b]{transition:100ms stroke-dashoffset;transform-origin:50% 50%;animation:progressring-data-v-3e0b109b linear 3s infinite;stroke-linecap:round;stroke-dashoffset:94.24778;stroke-dasharray:94.24778}.modal-mask .play-pause--paused .icon-pause[data-v-3e0b109b]{animation:breath-data-v-3e0b109b 2s cubic-bezier(0.4, 0, 0.2, 1) infinite}.modal-mask .play-pause--paused .progress-ring__circle[data-v-3e0b109b]{animation-play-state:paused !important}@keyframes progressring-data-v-3e0b109b{from{stroke-dashoffset:94.24778}to{stroke-dashoffset:0}}@keyframes breath-data-v-3e0b109b{0%{opacity:1}50%{opacity:0}100%{opacity:1}}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../fonts/scss/iconfont-vue.scss\",\"webpack://./Modal.vue\",\"webpack://./../../assets/variables.scss\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"$__iconfont__data: map-merge(if(global_variable_exists('__iconfont__data'), $__iconfont__data, ()), (\\n\\t\\\"iconfont-vue-e08a231\\\": (\\n\\t\\t\\\"arrow-left-double\\\": \\\"\\\\ea01\\\",\\n\\t\\t\\\"arrow-left\\\": \\\"\\\\ea02\\\",\\n\\t\\t\\\"arrow-right-double\\\": \\\"\\\\ea03\\\",\\n\\t\\t\\\"arrow-right\\\": \\\"\\\\ea04\\\",\\n\\t\\t\\\"breadcrumb\\\": \\\"\\\\ea05\\\",\\n\\t\\t\\\"checkmark\\\": \\\"\\\\ea06\\\",\\n\\t\\t\\\"close\\\": \\\"\\\\ea07\\\",\\n\\t\\t\\\"confirm\\\": \\\"\\\\ea08\\\",\\n\\t\\t\\\"info\\\": \\\"\\\\ea09\\\",\\n\\t\\t\\\"menu\\\": \\\"\\\\ea0a\\\",\\n\\t\\t\\\"more\\\": \\\"\\\\ea0b\\\",\\n\\t\\t\\\"pause\\\": \\\"\\\\ea0c\\\",\\n\\t\\t\\\"play\\\": \\\"\\\\ea0d\\\",\\n\\t\\t\\\"triangle-s\\\": \\\"\\\\ea0e\\\",\\n\\t\\t\\\"user-status-away\\\": \\\"\\\\ea0f\\\",\\n\\t\\t\\\"user-status-dnd\\\": \\\"\\\\ea10\\\",\\n\\t\\t\\\"user-status-invisible\\\": \\\"\\\\ea11\\\",\\n\\t\\t\\\"user-status-online\\\": \\\"\\\\ea12\\\"\\n\\t)\\n));\\n\\n\\n$create-font-face: true !default; // should the @font-face tag get created?\\n\\n// should there be a custom class for each icon? will be .filename\\n$create-icon-classes: true !default; \\n\\n// what is the common class name that icons share? in this case icons need to have .icon.filename in their classes\\n// this requires you to have 2 classes on each icon html element, but reduced redeclaration of the font family\\n// for each icon\\n$icon-common-class: 'icon' !default;\\n\\n// if you whish to prefix your filenames, here you can do so.\\n// if this string stays empty, your classes will use the filename, for example\\n// an icon called star.svg will result in a class called .star\\n// if you use the prefix to be 'icon-' it would result in .icon-star\\n$icon-prefix: '' !default; \\n\\n// helper function to get the correct font group\\n@function iconfont-group($group: null) {\\n @if (null == $group) {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n @if (false == map-has-key($__iconfont__data, $group)) {\\n @warn 'Undefined Iconfont Family!';\\n @return ();\\n }\\n @return map-get($__iconfont__data, $group);\\n}\\n\\n// helper function to get the correct icon of a group\\n@function iconfont-item($name) {\\n $slash: str-index($name, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($name, 0, $slash - 1);\\n $name: str-slice($name, $slash + 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n $group: iconfont-group($group);\\n @if (false == map-has-key($group, $name)) {\\n @warn 'Undefined Iconfont Glyph!';\\n @return '';\\n }\\n @return map-get($group, $name);\\n}\\n\\n// complete mixing to include the icon\\n// usage:\\n// .my_icon{ @include iconfont('star') }\\n@mixin iconfont($icon) {\\n $slash: str-index($icon, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($icon, 0, $slash - 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n &:before {\\n font-family: $group;\\n font-style: normal;\\n font-weight: 400;\\n content: iconfont-item($icon);\\n }\\n}\\n\\n// creates the font face tag if the variable is set to true (default)\\n@if $create-font-face == true {\\n @font-face {\\n font-family: \\\"iconfont-vue-e08a231\\\";\\n src: url('../iconfont-vue-e08a231.eot'); /* IE9 Compat Modes */\\n src: url('../iconfont-vue-e08a231.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\\n url('../iconfont-vue-e08a231.woff') format('woff'), /* Pretty Modern Browsers */\\n url('../iconfont-vue-e08a231.ttf') format('truetype'), /* Safari, Android, iOS */\\n url('../iconfont-vue-e08a231.svg') format('svg'); /* Legacy iOS */\\n }\\n}\\n\\n// creates icon classes for each individual loaded svg (default)\\n@if $create-icon-classes == true {\\n .#{$icon-common-class} {\\n font-style: normal;\\n font-weight: 400;\\n\\n @each $icon, $content in map-get($__iconfont__data, \\\"iconfont-vue-e08a231\\\") {\\n &.#{$icon-prefix}#{$icon}:before {\\n font-family: \\\"iconfont-vue-e08a231\\\";\\n content: iconfont-item(\\\"iconfont-vue-e08a231/#{$icon}\\\");\\n }\\n }\\n }\\n}\\n\",\"$scope_version:\\\"e08a231\\\"; @import 'variables';\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import '../../fonts/scss/iconfont-vue';\\n$header-size: 50px;\\n\\n.modal-mask {\\n\\tposition: fixed;\\n\\tz-index: 9998;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\tbackground-color: rgba(0, 0, 0, .5);\\n\\t&--dark {\\n\\t\\tbackground-color: rgba(0, 0, 0, .92);\\n\\t}\\n}\\n\\n.modal-header {\\n\\tposition: absolute;\\n\\tz-index: 10001;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tleft: 0;\\n\\t// prevent vue show to use display:none and reseting\\n\\t// the circle animation loop\\n\\tdisplay: flex !important;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: 100%;\\n\\theight: $header-size;\\n\\ttransition: opacity 250ms,\\n\\t\\tvisibility 250ms;\\n\\n\\t// replace display by visibility\\n\\t&.invisible[style*='display:none'],\\n\\t&.invisible[style*='display: none'] {\\n\\t\\tvisibility: hidden;\\n\\t}\\n\\n\\t.modal-title {\\n\\t\\toverflow-x: hidden;\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: 100%;\\n\\t\\tpadding: 0 #{$clickable-area * 3} 0 12px; // maximum actions is 3\\n\\t\\ttransition: padding ease 100ms;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: #fff;\\n\\t\\tfont-size: $icon-margin;\\n\\t}\\n\\n\\t// On wider screens the title can be centered\\n\\t@media only screen and (min-width: $breakpoint-mobile/2) {\\n\\t\\t.modal-title {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tpadding-left: #{$clickable-area * 3}; // maximum actions is 3\\n\\t\\t}\\n\\t}\\n\\n\\t.icons-menu {\\n\\t\\tposition: absolute;\\n\\t\\tright: 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: flex-end;\\n\\n\\t\\t.icon-close {\\n\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\tmargin: ($header-size - $clickable-area) / 2;\\n\\t\\t\\t// not using $icon-margin since we have a custom font size\\n\\t\\t\\t// and alignement seems odd\\n\\t\\t\\tpadding: 10px 11px;\\n\\t\\t\\tcolor: #fff;\\n\\t\\t\\tbackground-image: none;\\n\\t\\t\\tfont-size: 23px;\\n\\n\\t\\t\\t@include iconfont('close');\\n\\t\\t}\\n\\n\\t\\t.play-pause {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\twidth: $header-size;\\n\\t\\t\\theight: $header-size;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tcolor: white;\\n\\t\\t\\tborder: none;\\n\\t\\t\\tbackground-color: transparent;\\n\\t\\t\\tfont-size: 22px;\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\t.icon-play,\\n\\t\\t\\t\\t.icon-pause {\\n\\t\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\t\\tborder-radius: $clickable-area / 2;\\n\\t\\t\\t\\t\\tbackground-color: $icon-focus-bg;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t.icon-play,\\n\\t\\t\\t.icon-pause {\\n\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\t\\theight: $clickable-area;\\n\\t\\t\\t\\tmargin: ($header-size - $clickable-area) / 2;\\n\\t\\t\\t\\topacity: .7;\\n\\t\\t\\t\\tbackground-image: none;\\n\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t}\\n\\t\\t\\t.icon-play {\\n\\t\\t\\t\\t// better visual\\n\\t\\t\\t\\tpadding: 11px 13px;\\n\\t\\t\\t\\t@include iconfont('play');\\n\\t\\t\\t}\\n\\t\\t\\t.icon-pause {\\n\\t\\t\\t\\tpadding: 12px;\\n\\t\\t\\t\\t// ! align with circle\\n\\t\\t\\t\\tfont-size: 19.5px;\\n\\t\\t\\t\\t@include iconfont('pause');\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.header-actions {\\n\\t\\t\\tmargin: ($header-size - $clickable-area) / 2;\\n\\t\\t\\tcolor: white;\\n\\t\\t}\\n\\n\\t\\t.action-item--single {\\n\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\theight: $clickable-area;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-size: 22px;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .action-item__menutoggle {\\n\\t\\t\\tpadding: 13px 11px;\\n\\t\\t\\t// force white instead of default main text\\n\\t\\t\\tcolor: #fff;\\n\\t\\t\\t// 22px is a somehow better looking for the icon-more icon\\n\\t\\t\\tfont-size: 22px;\\n\\t\\t}\\n\\n\\t}\\n}\\n\\n.modal-wrapper {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\n\\t/* Navigation buttons */\\n\\t.prev,\\n\\t.next {\\n\\t\\tz-index: 10000;\\n\\t\\t// ignore display: none\\n\\t\\tdisplay: flex !important;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 15%;\\n\\t\\tmin-width: 60px;\\n\\t\\theight: 100%;\\n\\t\\ttransition: opacity 250ms,\\n\\t\\t\\tvisibility 250ms;\\n\\n\\t\\t// we want to keep the elements on page\\n\\t\\t// even if hidden to avoid having a unbalanced\\n\\t\\t// centered content\\n\\t\\t// replace display by visibility\\n\\t\\t&.invisible[style*='display:none'],\\n\\t\\t&.invisible[style*='display: none'] {\\n\\t\\t\\tvisibility: hidden;\\n\\t\\t}\\n\\t}\\n\\n\\t// buttons/icons\\n\\t.icon-next,\\n\\t.icon-previous {\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: $clickable-area;\\n\\t\\theight: $clickable-area;\\n\\t\\tpadding: 12px 11px;\\n\\t\\tcolor: white;\\n\\t\\tborder-radius: $clickable-area / 2;\\n\\t\\tbackground-image: none;\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\t.icon-previous {\\n\\t\\t@include iconfont('arrow-left');\\n\\t}\\n\\t.icon-next {\\n\\t\\t@include iconfont('arrow-right');\\n\\t}\\n\\n\\t/* Content */\\n\\t.modal-container {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\tpadding: 0;\\n\\t\\ttransition: transform 300ms ease;\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tbox-shadow: 0 0 40px rgba(0, 0, 0, .2);\\n\\t}\\n\\t&:not(&--large):not(&--full) .modal-container {\\n\\t\\tmax-width: 900px;\\n\\t\\tmax-height: 80%;\\n\\t}\\n\\n\\t// Sizing\\n\\t&--full {\\n\\t\\t.modal-container {\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\tmax-height: 100%;\\n\\t\\t\\tborder-radius: 0;\\n\\t\\t}\\n\\t}\\n\\t&--full,\\n\\t&--spread-navigation {\\n\\t\\t.prev,\\n\\t\\t.next {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\twidth: 10%;\\n\\t\\t}\\n\\t\\t.prev {\\n\\t\\t\\tleft: 0;\\n\\t\\t}\\n\\t\\t.next {\\n\\t\\t\\tright: 0;\\n\\t\\t}\\n\\t}\\n\\t&--large {\\n\\t\\t.modal-container {\\n\\t\\t\\tmax-width: 85%;\\n\\t\\t\\tmax-height: 90%;\\n\\t\\t}\\n\\t\\t.prev,\\n\\t\\t.next {\\n\\t\\t\\twidth: 10%;\\n\\t\\t\\tmin-width: $clickable-area;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* TRANSITIONS */\\n.fade-enter-active,\\n.fade-leave-active {\\n\\ttransition: opacity 250ms;\\n}\\n\\n.fade-enter,\\n.fade-leave-to {\\n\\topacity: 0;\\n}\\n\\n.fade-visibility-enter,\\n.fade-visibility-leave-to {\\n\\tvisibility: hidden;\\n\\topacity: 0;\\n}\\n\\n.modal-in-enter-active,\\n.modal-in-leave-active,\\n.modal-out-enter-active,\\n.modal-out-leave-active {\\n\\ttransition: opacity 250ms;\\n}\\n\\n.modal-in-enter,\\n.modal-in-leave-to,\\n.modal-out-enter,\\n.modal-out-leave-to {\\n\\topacity: 0;\\n}\\n\\n.modal-in-enter .modal-container,\\n.modal-in-leave-to .modal-container {\\n\\ttransform: scale(.9);\\n}\\n\\n.modal-out-enter .modal-container,\\n.modal-out-leave-to .modal-container {\\n\\ttransform: scale(1.1);\\n}\\n\\n// animated circle\\n$radius: 15;\\n$pi: 3.14159265358979;\\n\\n.modal-mask .play-pause {\\n\\t.progress-ring {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\ttransform: rotate(-90deg);\\n\\t\\t.progress-ring__circle {\\n\\t\\t\\ttransition: 100ms stroke-dashoffset;\\n\\t\\t\\ttransform-origin: 50% 50%; // axis compensation\\n\\t\\t\\tanimation: progressring linear 3s infinite;\\n\\n\\t\\t\\tstroke-linecap: round;\\n\\t\\t\\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\\n\\t\\t\\tstroke-dasharray: $radius * 2 * $pi; // radius * 2 * PI\\n\\t\\t}\\n\\t}\\n\\t&--paused {\\n\\t\\t.icon-pause {\\n\\t\\t\\tanimation: breath 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\\n\\t\\t}\\n\\t\\t.progress-ring__circle {\\n\\t\\t\\tanimation-play-state: paused !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n// keyframes get scoped too and break the animation name, we need them unscoped\\n@keyframes progressring {\\n\\tfrom {\\n\\t\\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\\n\\t}\\n\\tto {\\n\\t\\tstroke-dashoffset: 0;\\n\\t}\\n}\\n\\n@keyframes breath {\\n\\t0% {\\n\\t\\topacity: 1;\\n\\t}\\n\\t50% {\\n\\t\\topacity: 0;\\n\\t}\\n\\t100% {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n\",\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n// https://uxplanet.org/7-rules-for-mobile-ui-button-design-e9cf2ea54556\\n// recommended is 48px\\n// 44px is what we choose and have very good visual-to-usability ratio\\n$clickable-area: 44px;\\n\\n// background icon size\\n// also used for the scss icon font\\n$icon-size: 16px;\\n\\n// icon padding for a $clickable-area width and a $icon-size icon\\n// ( 44px - 16px ) / 2\\n$icon-margin: ($clickable-area - $icon-size) / 2;\\n\\n// transparency background for icons\\n$icon-focus-bg: rgba(127, 127, 127, .25);\\n\\n// popovermenu arrow width from the triangle center\\n$arrow-width: 9px;\\n\\n// opacities\\n$opacity_disabled: .5;\\n$opacity_normal: .7;\\n$opacity_full: 1;\\n\\n// menu round background hover feedback\\n// good looking on dark AND white bg\\n$action-background-hover: rgba(127, 127, 127, .25);\\n\\n// various structure data used in the \\n// `AppNavigation` component\\n$header-height: 50px;\\n$navigation-width: 300px;\\n\\n// mobile breakpoint\\n$breakpoint-mobile: 1024px;\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default function timer(callback, delay) {\n\tlet id\n\tlet started\n\tlet remaining = delay\n\tlet running\n\n\tthis.start = function() {\n\t\trunning = true\n\t\tstarted = new Date()\n\t\tid = setTimeout(callback, remaining)\n\t}\n\n\tthis.pause = function() {\n\t\trunning = false\n\t\tclearTimeout(id)\n\t\tremaining -= new Date() - started\n\t}\n\n\tthis.clear = function() {\n\t\trunning = false\n\t\tclearTimeout(id)\n\t\tremaining = 0\n\t}\n\n\tthis.getTimeLeft = function() {\n\t\tif (running) {\n\t\t\tthis.pause()\n\t\t\tthis.start()\n\t\t}\n\n\t\treturn remaining\n\t}\n\n\tthis.getStateRunning = function() {\n\t\treturn running\n\t}\n\n\tthis.start()\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<docs>\n\n```vue\n<template>\n\t<div>\n\t\t<button @click=\"showModal\">Show Modal</button>\n\t\t<modal v-if=\"modal\" @close=\"closeModal\">\n\t\t\t<div class=\"modal__content\">Hello world</div>\n\t\t</modal>\n\t</div>\n</template>\n<style scoped>\n\t.modal__content {\n\t\twidth: 50vw;\n\t\ttext-align: center;\n\t\tmargin: 10vw 0;\n\t}\n</style>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmodal: false\n\t\t}\n\t},\n\tmethods: {\n\t\tshowModal() {\n\t\t\tthis.modal = true\n\t\t},\n\t\tcloseModal() {\n\t\t\tthis.modal = false\n\t\t}\n\t}\n}\n</script>\n```\n\n</docs>\n<template>\n\t<transition name=\"fade\">\n\t\t<div ref=\"mask\"\n\t\t\tclass=\"modal-mask\"\n\t\t\t:class=\"{ 'modal-mask--dark': dark }\"\n\t\t\t@click=\"handleMouseMove\"\n\t\t\t@mousemove=\"handleMouseMove\"\n\t\t\t@touchmove=\"handleMouseMove\">\n\t\t\t<!-- Header -->\n\t\t\t<transition name=\"fade-visibility\">\n\t\t\t\t<div v-show=\"!clearView\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\tinvisible: clearView\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"modal-header\">\n\t\t\t\t\t<div v-if=\"title.trim() !== ''\" class=\"modal-title\">\n\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"icons-menu\">\n\t\t\t\t\t\t<!-- Play-pause toggle -->\n\t\t\t\t\t\t<button v-if=\"hasNext && enableSlideshow\"\n\t\t\t\t\t\t\tv-tooltip.auto=\"playPauseTitle\"\n\t\t\t\t\t\t\t:class=\"{ 'play-pause--paused': slideshowPaused }\"\n\t\t\t\t\t\t\tclass=\"play-pause\"\n\t\t\t\t\t\t\t@click=\"togglePlayPause\">\n\t\t\t\t\t\t\t<!-- Progress circle, css animated -->\n\t\t\t\t\t\t\t<div :class=\"[playing ? 'icon-pause' : 'icon-play']\">\n\t\t\t\t\t\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t\t\t\t\t\t{{ playPauseTitle }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Progress circle, css animated -->\n\t\t\t\t\t\t\t<svg v-if=\"playing\"\n\t\t\t\t\t\t\t\tclass=\"progress-ring\"\n\t\t\t\t\t\t\t\theight=\"50\"\n\t\t\t\t\t\t\t\twidth=\"50\">\n\t\t\t\t\t\t\t\t<circle class=\"progress-ring__circle\"\n\t\t\t\t\t\t\t\t\tstroke=\"white\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\t\t\tr=\"15\"\n\t\t\t\t\t\t\t\t\tcx=\"25\"\n\t\t\t\t\t\t\t\t\tcy=\"25\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<!-- Actions menu -->\n\t\t\t\t\t\t<Actions class=\"header-actions\">\n\t\t\t\t\t\t\t<!-- @slot List of actions to show -->\n\t\t\t\t\t\t\t<slot name=\"actions\" />\n\t\t\t\t\t\t</Actions>\n\n\t\t\t\t\t\t<!-- Close modal -->\n\t\t\t\t\t\t<Actions v-if=\"canClose\" class=\"header-close\">\n\t\t\t\t\t\t\t<ActionButton icon=\"icon-close\" @click=\"close\">\n\t\t\t\t\t\t\t\t{{ t('Close') }}\n\t\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t</Actions>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</transition>\n\n\t\t\t<!-- Content wrapper -->\n\t\t\t<transition :name=\"modalTransitionName\">\n\t\t\t\t<div\n\t\t\t\t\tv-show=\"showModal\"\n\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t`modal-wrapper--${size}`,\n\t\t\t\t\t\tspreadNavigation ? 'modal-wrapper--spread-navigation' : ''\n\t\t\t\t\t]\"\n\t\t\t\t\tclass=\"modal-wrapper\"\n\t\t\t\t\t@mousedown.self=\"close\">\n\t\t\t\t\t<!-- Navigation button -->\n\t\t\t\t\t<transition name=\"fade-visibility\">\n\t\t\t\t\t\t<a v-show=\"hasPrevious && !clearView\"\n\t\t\t\t\t\t\tclass=\"prev\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\tinvisible: clearView || !hasPrevious\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@click=\"previous\">\n\t\t\t\t\t\t\t<div class=\"icon icon-previous\">\n\t\t\t\t\t\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t\t\t\t\t\t{{ t('Previous') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</transition>\n\n\t\t\t\t\t<!-- Content -->\n\t\t\t\t\t<div class=\"modal-container\">\n\t\t\t\t\t\t<!-- @slot Modal content to render -->\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Navigation button -->\n\t\t\t\t\t<transition name=\"fade-visibility\">\n\t\t\t\t\t\t<a v-show=\"hasNext && !clearView\"\n\t\t\t\t\t\t\tclass=\"next\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\tinvisible: clearView || !hasNext\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@click=\"next\">\n\t\t\t\t\t\t\t<div class=\"icon icon-next\">\n\t\t\t\t\t\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t\t\t\t\t\t{{ t('Next') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t</transition>\n</template>\n\n<script>\nimport Hammer from 'hammerjs'\nimport Actions from '../Actions'\nimport ActionButton from '../ActionButton'\nimport l10n from '../../mixins/l10n'\nimport { t } from '../../l10n'\nimport Tooltip from '../../directives/Tooltip'\nimport Timer from '../../utils/Timer'\n\nexport default {\n\tname: 'Modal',\n\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t},\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tmixins: [l10n],\n\n\tprops: {\n\t\t/**\n\t\t * Title to be shown with the modal\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Declare if a previous slide is available\n\t\t */\n\t\thasPrevious: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declare if a next slide is available\n\t\t */\n\t\thasNext: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declare if hiding the modal should be animated\n\t\t */\n\t\toutTransition: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declare if the slideshow functionality should be enabled\n\t\t */\n\t\tenableSlideshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tclearViewDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 5000,\n\t\t},\n\t\t/**\n\t\t * Declare the slide interval\n\t\t */\n\t\tslideshowDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 3000,\n\t\t},\n\t\t/**\n\t\t * Allow to pause an ongoing slideshow\n\t\t */\n\t\tslideshowPaused: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Enable swipe between slides\n\t\t */\n\t\tenableSwipe: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tspreadNavigation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'normal',\n\t\t\tvalidator: size => {\n\t\t\t\treturn ['normal', 'large', 'full'].indexOf(size) !== -1\n\t\t\t},\n\t\t},\n\t\t/**\n\t\t * Declare if the modal can be closed\n\t\t */\n\t\tcanClose: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/** Makes the modal backdrop black if true */\n\t\tdark: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Selector for the modal container\n\t\t */\n\t\tcontainer: {\n\t\t\ttype: String,\n\t\t\tdefault: 'body',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tmc: null,\n\t\t\tshowModal: false,\n\t\t\tclearView: false,\n\t\t\tclearViewTimeout: null,\n\t\t\tplaying: false,\n\t\t\tslideshowTimeout: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tmodalTransitionName() {\n\t\t\treturn `modal-${this.outTransition ? 'out' : 'in'}`\n\t\t},\n\t\tplayPauseTitle() {\n\t\t\treturn this.playing ? t('Pause slideshow') : t('Start slideshow')\n\t\t},\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * Handle play/pause of an ongoing slideshow\n\t\t * @param {boolean} paused is the player paused\n\t\t */\n\t\tslideshowPaused(paused) {\n\t\t\tif (this.slideshowTimeout) {\n\t\t\t\tif (paused) {\n\t\t\t\t\tthis.slideshowTimeout.pause()\n\t\t\t\t} else {\n\t\t\t\t\tthis.slideshowTimeout.start()\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\twindow.addEventListener('keydown', this.handleKeydown)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('keydown', this.handleKeydown)\n\t\tthis.mc.off('swipeleft swiperight')\n\t\tthis.mc.destroy()\n\t},\n\tmounted() {\n\t\tthis.showModal = true\n\n\t\t// init clear view\n\t\tthis.handleMouseMove()\n\n\t\tthis.mc = new Hammer(this.$refs.mask)\n\t\tthis.mc.on('swipeleft swiperight', e => {\n\t\t\tthis.handleSwipe(e)\n\t\t})\n\n\t\tif (this.container === 'body') {\n\t\t\t// force mount the component to body\n\t\t\tdocument.body.insertBefore(this.$el, document.body.lastChild)\n\t\t} else {\n\t\t\tconst container = document.querySelector(this.container)\n\t\t\tcontainer.appendChild(this.$el)\n\t\t}\n\n\t},\n\tdestroyed() {\n\t\tthis.$el.remove()\n\t},\n\n\tmethods: {\n\t\t// Events emitters\n\t\tprevious(data) {\n\t\t\t// do not send the event if nothing is available\n\t\t\tif (this.hasPrevious) {\n\t\t\t\t// if data is set, then it's a user mouse event\n\t\t\t\t// and not the slideshow handler, therefore\n\t\t\t\t// we reset the timer\n\t\t\t\tif (data) {\n\t\t\t\t\tthis.resetSlideshow()\n\t\t\t\t}\n\t\t\t\tthis.$emit('previous', data)\n\t\t\t}\n\t\t},\n\t\tnext(data) {\n\t\t\t// do not send the event if nothing is available\n\t\t\tif (this.hasNext) {\n\t\t\t\t// if data is set, then it's a mouse event\n\t\t\t\t// and not the slideshow handler, therefore\n\t\t\t\t// we reset the timer\n\t\t\t\tif (data) {\n\t\t\t\t\tthis.resetSlideshow()\n\t\t\t\t}\n\t\t\t\tthis.$emit('next', data)\n\t\t\t}\n\t\t},\n\t\tclose(data) {\n\t\t\t// do not fire event if forbidden\n\t\t\tif (this.canClose) {\n\t\t\t\tthis.showModal = false\n\n\t\t\t\t// delay closing for animation\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t/**\n\t\t\t\t\t * Emitted when the closing animation is finished\n\t\t\t\t\t */\n\t\t\t\t\tthis.$emit('close', data)\n\t\t\t\t}, 300)\n\t\t\t}\n\t\t},\n\n\t\t// Key Handlers\n\t\thandleKeydown(e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\tcase 37: // left arrow\n\t\t\t\tthis.previous(e)\n\t\t\t\tbreak\n\t\t\tcase 13: // enter key\n\t\t\tcase 39: // rigth arrow\n\t\t\t\tthis.next(e)\n\t\t\t\tbreak\n\t\t\tcase 27: // escape key\n\t\t\t\tthis.close(e)\n\t\t\t\tbreak\n\t\t\t}\n\t\t},\n\t\thandleSwipe(e) {\n\t\t\tif (this.enableSwipe) {\n\t\t\t\tif (e.type === 'swipeleft') {\n\t\t\t\t\t// swiping to left to go to the next item\n\t\t\t\t\tthis.next(e)\n\t\t\t\t} else if (e.type === 'swiperight') {\n\t\t\t\t\t// swiping to right to go back to the previous item\n\t\t\t\t\tthis.previous(e)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thandleMouseMove() {\n\t\t\tif (this.clearViewDelay > 0) {\n\t\t\t\tthis.clearView = false\n\t\t\t\tclearTimeout(this.clearViewTimeout)\n\t\t\t\tthis.clearViewTimeout = setTimeout(() => {\n\t\t\t\t\tthis.clearView = true\n\t\t\t\t}, this.clearViewDelay)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Toggle the slideshow state\n\t\t */\n\t\ttogglePlayPause() {\n\t\t\tthis.playing = !this.playing\n\t\t\tif (this.playing) {\n\t\t\t\tthis.handleSlideshow()\n\t\t\t} else {\n\t\t\t\tthis.clearSlideshowTimeout()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the slideshow timer and keep going if it was on\n\t\t */\n\t\tresetSlideshow() {\n\t\t\tthis.playing = !this.playing\n\t\t\tthis.clearSlideshowTimeout()\n\t\t\tthis.$nextTick(function() {\n\t\t\t\tthis.togglePlayPause()\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handle the slideshow timer and next event\n\t\t */\n\t\thandleSlideshow() {\n\t\t\tthis.playing = true\n\t\t\tif (this.hasNext) {\n\t\t\t\tthis.slideshowTimeout = new Timer(() => {\n\t\t\t\t\tthis.next()\n\t\t\t\t\tthis.handleSlideshow()\n\t\t\t\t}, this.slideshowDelay)\n\t\t\t} else {\n\t\t\t\tthis.playing = false\n\t\t\t\tthis.clearSlideshowTimeout()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Clear slideshowTimeout if ongoing\n\t\t */\n\t\tclearSlideshowTimeout() {\n\t\t\tif (this.slideshowTimeout) {\n\t\t\t\tthis.slideshowTimeout.clear()\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../fonts/scss/iconfont-vue';\n$header-size: 50px;\n\n.modal-mask {\n\tposition: fixed;\n\tz-index: 9998;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(0, 0, 0, .5);\n\t&--dark {\n\t\tbackground-color: rgba(0, 0, 0, .92);\n\t}\n}\n\n.modal-header {\n\tposition: absolute;\n\tz-index: 10001;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n\t// prevent vue show to use display:none and reseting\n\t// the circle animation loop\n\tdisplay: flex !important;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 100%;\n\theight: $header-size;\n\ttransition: opacity 250ms,\n\t\tvisibility 250ms;\n\n\t// replace display by visibility\n\t&.invisible[style*='display:none'],\n\t&.invisible[style*='display: none'] {\n\t\tvisibility: hidden;\n\t}\n\n\t.modal-title {\n\t\toverflow-x: hidden;\n\t\tbox-sizing: border-box;\n\t\twidth: 100%;\n\t\tpadding: 0 #{$clickable-area * 3} 0 12px; // maximum actions is 3\n\t\ttransition: padding ease 100ms;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: #fff;\n\t\tfont-size: $icon-margin;\n\t}\n\n\t// On wider screens the title can be centered\n\t@media only screen and (min-width: $breakpoint-mobile/2) {\n\t\t.modal-title {\n\t\t\ttext-align: center;\n\t\t\tpadding-left: #{$clickable-area * 3}; // maximum actions is 3\n\t\t}\n\t}\n\n\t.icons-menu {\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\n\t\t.icon-close {\n\t\t\tbox-sizing: border-box;\n\t\t\tmargin: ($header-size - $clickable-area) / 2;\n\t\t\t// not using $icon-margin since we have a custom font size\n\t\t\t// and alignement seems odd\n\t\t\tpadding: 10px 11px;\n\t\t\tcolor: #fff;\n\t\t\tbackground-image: none;\n\t\t\tfont-size: 23px;\n\n\t\t\t@include iconfont('close');\n\t\t}\n\n\t\t.play-pause {\n\t\t\tposition: relative;\n\t\t\twidth: $header-size;\n\t\t\theight: $header-size;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tcursor: pointer;\n\t\t\tcolor: white;\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t\tfont-size: 22px;\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\t.icon-play,\n\t\t\t\t.icon-pause {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tborder-radius: $clickable-area / 2;\n\t\t\t\t\tbackground-color: $icon-focus-bg;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.icon-play,\n\t\t\t.icon-pause {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\twidth: $clickable-area;\n\t\t\t\theight: $clickable-area;\n\t\t\t\tmargin: ($header-size - $clickable-area) / 2;\n\t\t\t\topacity: .7;\n\t\t\t\tbackground-image: none;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t\t.icon-play {\n\t\t\t\t// better visual\n\t\t\t\tpadding: 11px 13px;\n\t\t\t\t@include iconfont('play');\n\t\t\t}\n\t\t\t.icon-pause {\n\t\t\t\tpadding: 12px;\n\t\t\t\t// ! align with circle\n\t\t\t\tfont-size: 19.5px;\n\t\t\t\t@include iconfont('pause');\n\t\t\t}\n\t\t}\n\n\t\t.header-actions {\n\t\t\tmargin: ($header-size - $clickable-area) / 2;\n\t\t\tcolor: white;\n\t\t}\n\n\t\t.action-item--single {\n\t\t\tbox-sizing: border-box;\n\t\t\twidth: $clickable-area;\n\t\t\theight: $clickable-area;\n\t\t\tcursor: pointer;\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: 22px;\n\t\t}\n\n\t\t&::v-deep .action-item__menutoggle {\n\t\t\tpadding: 13px 11px;\n\t\t\t// force white instead of default main text\n\t\t\tcolor: #fff;\n\t\t\t// 22px is a somehow better looking for the icon-more icon\n\t\t\tfont-size: 22px;\n\t\t}\n\n\t}\n}\n\n.modal-wrapper {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\theight: 100%;\n\n\t/* Navigation buttons */\n\t.prev,\n\t.next {\n\t\tz-index: 10000;\n\t\t// ignore display: none\n\t\tdisplay: flex !important;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 15%;\n\t\tmin-width: 60px;\n\t\theight: 100%;\n\t\ttransition: opacity 250ms,\n\t\t\tvisibility 250ms;\n\n\t\t// we want to keep the elements on page\n\t\t// even if hidden to avoid having a unbalanced\n\t\t// centered content\n\t\t// replace display by visibility\n\t\t&.invisible[style*='display:none'],\n\t\t&.invisible[style*='display: none'] {\n\t\t\tvisibility: hidden;\n\t\t}\n\t}\n\n\t// buttons/icons\n\t.icon-next,\n\t.icon-previous {\n\t\tbox-sizing: border-box;\n\t\twidth: $clickable-area;\n\t\theight: $clickable-area;\n\t\tpadding: 12px 11px;\n\t\tcolor: white;\n\t\tborder-radius: $clickable-area / 2;\n\t\tbackground-image: none;\n\t\tfont-size: 24px;\n\t}\n\t.icon-previous {\n\t\t@include iconfont('arrow-left');\n\t}\n\t.icon-next {\n\t\t@include iconfont('arrow-right');\n\t}\n\n\t/* Content */\n\t.modal-container {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\tpadding: 0;\n\t\ttransition: transform 300ms ease;\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\t\tbox-shadow: 0 0 40px rgba(0, 0, 0, .2);\n\t}\n\t&:not(&--large):not(&--full) .modal-container {\n\t\tmax-width: 900px;\n\t\tmax-height: 80%;\n\t}\n\n\t// Sizing\n\t&--full {\n\t\t.modal-container {\n\t\t\tmax-width: 100%;\n\t\t\tmax-height: 100%;\n\t\t\tborder-radius: 0;\n\t\t}\n\t}\n\t&--full,\n\t&--spread-navigation {\n\t\t.prev,\n\t\t.next {\n\t\t\tposition: absolute;\n\t\t\twidth: 10%;\n\t\t}\n\t\t.prev {\n\t\t\tleft: 0;\n\t\t}\n\t\t.next {\n\t\t\tright: 0;\n\t\t}\n\t}\n\t&--large {\n\t\t.modal-container {\n\t\t\tmax-width: 85%;\n\t\t\tmax-height: 90%;\n\t\t}\n\t\t.prev,\n\t\t.next {\n\t\t\twidth: 10%;\n\t\t\tmin-width: $clickable-area;\n\t\t}\n\t}\n}\n\n/* TRANSITIONS */\n.fade-enter-active,\n.fade-leave-active {\n\ttransition: opacity 250ms;\n}\n\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.fade-visibility-enter,\n.fade-visibility-leave-to {\n\tvisibility: hidden;\n\topacity: 0;\n}\n\n.modal-in-enter-active,\n.modal-in-leave-active,\n.modal-out-enter-active,\n.modal-out-leave-active {\n\ttransition: opacity 250ms;\n}\n\n.modal-in-enter,\n.modal-in-leave-to,\n.modal-out-enter,\n.modal-out-leave-to {\n\topacity: 0;\n}\n\n.modal-in-enter .modal-container,\n.modal-in-leave-to .modal-container {\n\ttransform: scale(.9);\n}\n\n.modal-out-enter .modal-container,\n.modal-out-leave-to .modal-container {\n\ttransform: scale(1.1);\n}\n\n// animated circle\n$radius: 15;\n$pi: 3.14159265358979;\n\n.modal-mask .play-pause {\n\t.progress-ring {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\ttransform: rotate(-90deg);\n\t\t.progress-ring__circle {\n\t\t\ttransition: 100ms stroke-dashoffset;\n\t\t\ttransform-origin: 50% 50%; // axis compensation\n\t\t\tanimation: progressring linear 3s infinite;\n\n\t\t\tstroke-linecap: round;\n\t\t\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\n\t\t\tstroke-dasharray: $radius * 2 * $pi; // radius * 2 * PI\n\t\t}\n\t}\n\t&--paused {\n\t\t.icon-pause {\n\t\t\tanimation: breath 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\n\t\t}\n\t\t.progress-ring__circle {\n\t\t\tanimation-play-state: paused !important;\n\t\t}\n\t}\n}\n\n// keyframes get scoped too and break the animation name, we need them unscoped\n@keyframes progressring {\n\tfrom {\n\t\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\n\t}\n\tto {\n\t\tstroke-dashoffset: 0;\n\t}\n}\n\n@keyframes breath {\n\t0% {\n\t\topacity: 1;\n\t}\n\t50% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&id=3e0b109b&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{ref:\"mask\",staticClass:\"modal-mask\",class:{ 'modal-mask--dark': _vm.dark },on:{\"click\":_vm.handleMouseMove,\"mousemove\":_vm.handleMouseMove,\"touchmove\":_vm.handleMouseMove}},[_c('transition',{attrs:{\"name\":\"fade-visibility\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.clearView),expression:\"!clearView\"}],staticClass:\"modal-header\",class:{\n\t\t\t\t\tinvisible: _vm.clearView\n\t\t\t\t}},[(_vm.title.trim() !== '')?_c('div',{staticClass:\"modal-title\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"icons-menu\"},[(_vm.hasNext && _vm.enableSlideshow)?_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.playPauseTitle),expression:\"playPauseTitle\",modifiers:{\"auto\":true}}],staticClass:\"play-pause\",class:{ 'play-pause--paused': _vm.slideshowPaused },on:{\"click\":_vm.togglePlayPause}},[_c('div',{class:[_vm.playing ? 'icon-pause' : 'icon-play']},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.playPauseTitle)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])]),_vm._v(\" \"),(_vm.playing)?_c('svg',{staticClass:\"progress-ring\",attrs:{\"height\":\"50\",\"width\":\"50\"}},[_c('circle',{staticClass:\"progress-ring__circle\",attrs:{\"stroke\":\"white\",\"stroke-width\":\"2\",\"fill\":\"transparent\",\"r\":\"15\",\"cx\":\"25\",\"cy\":\"25\"}})]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('Actions',{staticClass:\"header-actions\"},[_vm._t(\"actions\")],2),_vm._v(\" \"),(_vm.canClose)?_c('Actions',{staticClass:\"header-close\"},[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('Close'))+\"\\n\\t\\t\\t\\t\\t\\t\")])],1):_vm._e()],1)])]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":_vm.modalTransitionName}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showModal),expression:\"showModal\"}],staticClass:\"modal-wrapper\",class:[\n\t\t\t\t\t(\"modal-wrapper--\" + _vm.size),\n\t\t\t\t\t_vm.spreadNavigation ? 'modal-wrapper--spread-navigation' : ''\n\t\t\t\t],on:{\"mousedown\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.close($event)}}},[_c('transition',{attrs:{\"name\":\"fade-visibility\"}},[_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasPrevious && !_vm.clearView),expression:\"hasPrevious && !clearView\"}],staticClass:\"prev\",class:{\n\t\t\t\t\t\t\tinvisible: _vm.clearView || !_vm.hasPrevious\n\t\t\t\t\t\t},on:{\"click\":_vm.previous}},[_c('div',{staticClass:\"icon icon-previous\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('Previous'))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])])])]),_vm._v(\" \"),_c('div',{staticClass:\"modal-container\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade-visibility\"}},[_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasNext && !_vm.clearView),expression:\"hasNext && !clearView\"}],staticClass:\"next\",class:{\n\t\t\t\t\t\t\tinvisible: _vm.clearView || !_vm.hasNext\n\t\t\t\t\t\t},on:{\"click\":_vm.next}},[_c('div',{staticClass:\"icon icon-next\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('Next'))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])])])])],1)])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport ScopeComponent from '../../utils/ScopeComponent'\nimport Modal from './Modal'\n\nScopeComponent(Modal)\n\nexport default Modal\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.string.trim.js","webpack:///./node_modules/core-js/internals/string-trim-forced.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///../lib/gettext.ts","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///NextcloudVue.[name]/webpack/universalModuleDefinition","webpack:///NextcloudVue.[name]/webpack/bootstrap","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/api.js","webpack:///NextcloudVue.[name]/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///NextcloudVue.[name]/node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///NextcloudVue.[name]/node_modules/css-loader/dist/runtime/getUrl.js","webpack:///webpack:/NextcloudVue.[name]/external \"vue\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.object.to-string.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"v-tooltip\"","webpack:///NextcloudVue.[name]/src/fonts/iconfont-vue-6b494fc.eot","webpack:///NextcloudVue.[name]/src/l10n.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.function.name.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.regexp.exec.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.string.iterator.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.iterator.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/web.dom-collections.iterator.js\"","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?770b","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.scss?0d1f","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.js","webpack:///NextcloudVue.[name]/src/directives/Tooltip/index.scss","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.string.replace.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.regexp.to-string.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/web.dom-collections.for-each.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.concat.js\"","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?d02f","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?470d","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue","webpack:///NextcloudVue.[name]/src/components/Popover/Popover.vue?01ec","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.string.trim.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.number.constructor.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.symbol.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"@nextcloud/l10n/dist/gettext\"","webpack:///NextcloudVue.[name]/src/utils/GenRandomId.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.symbol.description.js\"","webpack:///NextcloudVue.[name]/src/mixins/actionGlobal.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/web.url.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.slice.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.symbol.iterator.js\"","webpack:///NextcloudVue.[name]/src/components/Popover/index.js","webpack:///NextcloudVue.[name]/src/utils/GetParent.js","webpack:///NextcloudVue.[name]/src/mixins/actionText.js","webpack:///NextcloudVue.[name]/src/utils/ValidateSlot.js","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.filter.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.from.js\"","webpack:///NextcloudVue.[name]/src/mixins/l10n.js","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?c79a","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.object.keys.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.object.get-own-property-descriptor.js\"","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.object.get-own-property-descriptors.js\"","webpack:///NextcloudVue.[name]/src/components/Actions/index.js","webpack:///NextcloudVue.[name]/src/utils/ScopeComponent.js","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?26d2","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?608f","webpack:///NextcloudVue.[name]/src/components/Actions/Actions.vue?a102","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?adfe","webpack:///webpack:/NextcloudVue.[name]/external \"core-js/modules/es.array.splice.js\"","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?4f4c","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?fe29","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue","webpack:///NextcloudVue.[name]/src/components/ActionButton/ActionButton.vue?04e0","webpack:///webpack:/NextcloudVue.[name]/external \"hammerjs\"","webpack:///NextcloudVue.[name]/src/components/ActionButton/index.js","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?f3ac","webpack:///NextcloudVue.[name]/src/utils/Timer.js","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?6422","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?6733","webpack:///NextcloudVue.[name]/src/components/Modal/Modal.vue?aad2","webpack:///NextcloudVue.[name]/src/components/Modal/index.js","webpack:///./node_modules/hammerjs/hammer.js"],"names":["$","require","$trim","trim","target","proto","forced","forcedStringTrimMethod","this","fails","whitespaces","module","exports","METHOD_NAME","name","DESCRIPTORS","global","isForced","redefine","has","classof","inheritIfRequired","toPrimitive","create","getOwnPropertyNames","f","getOwnPropertyDescriptor","defineProperty","NativeNumber","NumberPrototype","prototype","BROKEN_CLASSOF","toNumber","argument","first","third","radix","maxCode","digits","length","index","code","it","charCodeAt","NaN","slice","parseInt","key","NumberWrapper","value","arguments","dummy","valueOf","call","keys","split","j","constructor","GettextBuilder","translations","debug","language","setLanguage","getLanguage","data","GettextWrapper","locale","GetText","sourceLocale","translated","vars","r","original","placeholders","subtitudePlaceholders","gt","gettext","singular","plural","count","ngettext","replace","toIndexedObject","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","stat","sham","ownKeys","getOwnPropertyDescriptorModule","createProperty","getOwnPropertyDescriptors","object","descriptor","O","result","undefined","toAbsoluteIndex","toInteger","toLength","toObject","arraySpeciesCreate","HAS_SPECIES_SUPPORT","arrayMethodHasSpeciesSupport","max","Math","min","splice","start","deleteCount","insertCount","actualDeleteCount","A","k","from","to","len","actualStart","argumentsLength","TypeError","factory","window","installedModules","__webpack_require__","moduleId","i","l","modules","m","c","d","getter","o","Object","enumerable","get","Symbol","toStringTag","t","mode","__esModule","ns","bind","n","property","hasOwnProperty","p","s","_slicedToArray","arr","Array","isArray","iterator","_arr","_n","_d","_e","_s","_i","next","done","push","err","minLen","_arrayLikeToArray","toString","test","arr2","item","_item","content","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","concat","sourceMapping","sourceURLs","sources","map","source","sourceRoot","join","cssWithMappingToString","list","mediaQuery","dedupe","alreadyImportedModules","id","memo","getTarget","styleTarget","document","querySelector","HTMLIFrameElement","contentDocument","head","e","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","options","idCountMap","identifiers","base","obj","css","media","sourceMap","references","updater","addStyle","insertStyleElement","style","createElement","attributes","nonce","forEach","setAttribute","insert","Error","appendChild","textStore","replaceText","replacement","filter","Boolean","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","newObj","all","atob","lastIdentifiers","newList","newLastIdentifiers","_index","normalizeComponent","scriptExports","render","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","url","default","hash","needQuotes","__webpack_exports__","gtBuilder","getGettextBuilder","detectLocale","TRANSLATIONS","lang","pluralId","msgid","msgid_plural","msgstr","addTranslation","","build","___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default","version","names","mappings","sourcesContent","injectStylesIntoStyleTag_default","Tooltip","locals","VTooltip","defaultTemplate","SCOPE_VERSION","defaultHtml","Popover_Popovervue_type_script_lang_js_","components","VPopover","mounted","val","_this","Popovervue_type_style_index_0_lang_scss_","_h","$createElement","_c","_self","_g","_b","ref","attrs","popover-base-class","popover-wrapper-class","popover-arrow-class","popover-inner-class","$attrs","$listeners","_t","_v","slot","GenRandomId","random","substr","before","$slots","text","Vue","util","warn","$destroy","$el","beforeUpdate","getText","computed","isLongText","methods","Popover","GetParent","$parent","mixins","actionGlobal","props","icon","type","String","title","closeAfterClick","ariaLabel","isIconUrl","URL","error","onClick","event","$emit","closeMenu","ValidateSlot","slots","allowed","vm","node","isHtmlElement","componentOptions","tag","indexOf","isVueComponent","isForbiddenComponent","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","___CSS_LOADER_URL_REPLACEMENT_0___","_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default","_fonts_iconfont_vue_6b494fc_eot__WEBPACK_IMPORTED_MODULE_3__","___CSS_LOADER_URL_REPLACEMENT_1___","_fonts_iconfont_vue_6b494fc_woff__WEBPACK_IMPORTED_MODULE_4__","___CSS_LOADER_URL_REPLACEMENT_2___","_fonts_iconfont_vue_6b494fc_ttf__WEBPACK_IMPORTED_MODULE_5__","___CSS_LOADER_URL_REPLACEMENT_3___","_fonts_iconfont_vue_6b494fc_svg__WEBPACK_IMPORTED_MODULE_6__","Actions","ScopeComponent","Component","Actions_Actionsvue_type_script_lang_js_","directives","tooltip","VNodes","open","forceMenu","menuTitle","primary","defaultIcon","placement","boundariesElement","container","disabled","actions","opened","focusIndex","randomId","children","hasMultipleActions","isValidSingleAction","firstActionVNode","firstAction","firstActionBinding","is","href","aria-label","exact","firstActionEvent","firstActionEventBinding","firstActionIconSlot","firstActionClass","dynClass","iconSlotIsPopulated","watch","state","beforeMount","openMenu","onOpen","onMouseFocusAction","removeCurrentActive","currentActiveElement","focusAction","focusElement","liMenuParent","focusPreviousAction","focusNextAction","focusFirstAction","focusLastAction","preventIfEvent","execFirstAction","initActions","onFocus","onBlur","Actionsvue_type_style_index_0_id_551c21fd_lang_scss_scoped_true_","_obj","_obj$1","_vm","rawName","expression","modifiers","auto","staticClass","class","rel","on","focus","blur","vnodes","aria-hidden","hidden","action-item--open","delay","handle-resize","boundaries-element","update:open","$event","show","after-show","hide","aria-haspopup","aria-controls","test-attr","aria-expanded","tabindex","keydown","_k","keyCode","ctrlKey","shiftKey","altKey","metaKey","preventDefault","mousemove","ActionButton_ActionButtonvue_type_script_lang_js_","isFocusable","ActionButtonvue_type_style_index_0_id_42b28436_lang_scss_scoped_true_","action--disabled","focusable","click","backgroundImage","domProps","textContent","ActionButton","timer","callback","started","running","remaining","Date","setTimeout","pause","clearTimeout","clear","getTimeLeft","getStateRunning","Modal_Modalvue_type_script_lang_js_","hasPrevious","hasNext","outTransition","enableSlideshow","clearViewDelay","slideshowDelay","slideshowPaused","enableSwipe","spreadNavigation","size","validator","canClose","dark","mc","showModal","clearView","clearViewTimeout","playing","slideshowTimeout","modalTransitionName","playPauseTitle","paused","beforeDestroy","destroyed","previous","close","_this2","handleKeydown","handleSwipe","handleMouseMove","_this3","togglePlayPause","resetSlideshow","handleSlideshow","_this4","clearSlideshowTimeout","Modalvue_type_style_index_0_id_3e0b109b_lang_scss_scoped_true_","modal-mask--dark","touchmove","invisible","play-pause--paused","height","width","stroke","stroke-width","fill","cx","cy","mousedown","currentTarget","Modal","define","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","now","setTimeoutContext","fn","timeout","bindFn","invokeArrayArg","arg","each","deprecate","method","message","deprecationMessage","stack","log","console","apply","output","nextKey","extend","dest","src","merge","inherit","child","properties","childP","baseP","_super","boolOrFn","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","str","find","inArray","findByKey","toArray","uniqueArray","sort","results","values","a","b","prefixed","prefix","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","navigator","userAgent","PROPS_XY","PROPS_CLIENT_XY","Input","manager","self","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offset","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mouseup","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchend","touchcancel","SingleTouchInput","normalizeSingleTouches","touches","changed","changedTouches","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","targetTouches","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","Recognizer","defaults","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","stop","force","stopped","curRecognizer","events","off","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press"],"mappings":"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","file":"vendors~files-modal.js?v=22f4021876ecddad87c8","sourcesContent":["'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","import GetText from \"node-gettext\"\n\nimport { getLanguage } from \".\"\n\nclass GettextBuilder {\n\n private locale?: string\n private translations = {}\n private debug = false\n\n setLanguage(language: string): GettextBuilder {\n this.locale = language\n return this\n }\n\n detectLocale(): GettextBuilder {\n return this.setLanguage(getLanguage().replace('-', '_'))\n }\n\n addTranslation(language: string, data: any): GettextBuilder {\n this.translations[language] = data\n return this\n }\n\n enableDebugMode(): GettextBuilder {\n this.debug = true\n return this\n }\n\n build(): GettextWrapper {\n return new GettextWrapper(this.locale || 'en', this.translations, this.debug)\n }\n\n}\n\nclass GettextWrapper {\n\n private gt: GetText\n\n constructor(locale: string, data: any, debug: boolean) {\n this.gt = new GetText({\n debug,\n sourceLocale: 'en',\n })\n\n for (let key in data) {\n this.gt.addTranslations(key, 'messages', data[key])\n }\n\n this.gt.setLocale(locale)\n }\n\n private subtitudePlaceholders(translated: string, vars: object): string {\n return translated.replace(/{([^{}]*)}/g, (a, b) => {\n const r = vars[b]\n if (typeof r === 'string' || typeof r === 'number') {\n return r.toString()\n } else {\n return a\n }\n })\n }\n\n gettext(original: string, placeholders: object = {}): string {\n return this.subtitudePlaceholders(\n this.gt.gettext(original),\n placeholders\n )\n }\n\n ngettext(singular: string, plural: string, count: number, placeholders: object = {}): string {\n return this.subtitudePlaceholders(\n this.gt.ngettext(singular, plural, count).replace(/%n/g, count.toString()),\n placeholders\n )\n }\n\n}\n\nexport function getGettextBuilder() {\n return new GettextBuilder()\n}\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Components/Modal\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Components/Modal\"] = factory();\n\telse\n\t\troot[\"NextcloudVue\"] = root[\"NextcloudVue\"] || {}, root[\"NextcloudVue\"][\"Components/Modal\"] = factory();\n})(window, function() {\nreturn "," \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 = 129);\n","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== \"string\") {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n\n return url;\n};","module.exports = require(\"vue\");","module.exports = require(\"core-js/modules/es.object.to-string.js\");","module.exports = require(\"v-tooltip\");","export default \"data:application/vnd.ms-fontobject;base64,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\"","import { getGettextBuilder } from '@nextcloud/l10n/dist/gettext'\n\nconst gtBuilder = getGettextBuilder()\n\t.detectLocale()\n\n// Decompress Translations to gettext format and add to gtBuilder\nTRANSLATIONS.forEach((lang) => {\n\tconst translations = {}\n\n\tfor (const key in lang.translations) {\n\t\t// Plural\n\t\tif (lang.translations[key].pluralId) {\n\t\t\ttranslations[key] = {\n\t\t\t\tmsgid: key,\n\t\t\t\tmsgid_plural: lang.translations[key].pluralId,\n\t\t\t\tmsgstr: lang.translations[key].msgstr,\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Singular\n\t\ttranslations[key] = {\n\t\t\tmsgid: key,\n\t\t\tmsgstr: [\n\t\t\t\tlang.translations[key],\n\t\t\t],\n\t\t}\n\t}\n\n\tgtBuilder.addTranslation(lang.locale, {\n\t\ttranslations: {\n\t\t\t'': translations,\n\t\t},\n\t})\n})\n\nconst gt = gtBuilder.build()\n\nconst n = gt.ngettext.bind(gt)\nconst t = gt.gettext.bind(gt)\n\nexport { t, n }\n","module.exports = require(\"core-js/modules/es.function.name.js\");","module.exports = require(\"core-js/modules/es.regexp.exec.js\");","module.exports = require(\"core-js/modules/es.string.iterator.js\");","module.exports = require(\"core-js/modules/es.array.iterator.js\");","module.exports = require(\"core-js/modules/web.dom-collections.iterator.js\");","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".popover{z-index:100000;display:block !important;filter:drop-shadow(0 1px 10px var(--color-box-shadow))}.popover__inner{padding:0;color:var(--color-main-text);border-radius:var(--border-radius);background:var(--color-main-background)}.popover__arrow{position:absolute;z-index:1;width:0;height:0;margin:10px;border-style:solid;border-color:var(--color-main-background)}.popover[x-placement^='top']{margin-bottom:10px}.popover[x-placement^='top'] .popover__arrow{bottom:-10px;left:calc(50% - $arrow-width);margin-top:0;margin-bottom:0;border-width:10px 10px 0 10px;border-right-color:transparent !important;border-bottom-color:transparent !important;border-left-color:transparent !important}.popover[x-placement^='bottom']{margin-top:10px}.popover[x-placement^='bottom'] .popover__arrow{top:-10px;left:calc(50% - $arrow-width);margin-top:0;margin-bottom:0;border-width:0 10px 10px 10px;border-top-color:transparent !important;border-right-color:transparent !important;border-left-color:transparent !important}.popover[x-placement^='right']{margin-left:10px}.popover[x-placement^='right'] .popover__arrow{top:calc(50% - $arrow-width);left:-10px;margin-right:0;margin-left:0;border-width:10px 10px 10px 0;border-top-color:transparent !important;border-bottom-color:transparent !important;border-left-color:transparent !important}.popover[x-placement^='left']{margin-right:10px}.popover[x-placement^='left'] .popover__arrow{top:calc(50% - $arrow-width);right:-10px;margin-right:0;margin-left:0;border-width:10px 0 10px 10px;border-top-color:transparent !important;border-right-color:transparent !important;border-bottom-color:transparent !important}.popover[aria-hidden='true']{visibility:hidden;transition:opacity var(--animation-quick),visibility var(--animation-quick);opacity:0}.popover[aria-hidden='false']{visibility:visible;transition:opacity var(--animation-quick);opacity:1}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Popover.vue\"],\"names\":[],\"mappings\":\"AAgHA,SACC,cAAe,CACf,wBAAyB,CAEzB,sDAAuD,CAEvD,gBACC,SAAU,CACV,4BAA6B,CAC7B,kCAAmC,CACnC,uCAAwC,CACxC,gBAGA,iBAAkB,CAClB,SAAU,CACV,OAAQ,CACR,QAAS,CACT,WApBgB,CAqBhB,kBAAmB,CACnB,yCAA0C,CApB5C,6BAwBE,kBA1BgB,CAElB,6CA2BG,YA7Be,CA8Bf,6BAA8B,CAC9B,YAAa,CACb,eAAgB,CAChB,6BAjCe,CAkCf,yCAA0C,CAC1C,0CAA2C,CAC3C,wCAAyC,CAlC5C,gCAuCE,eAzCgB,CAElB,gDA0CG,SA5Ce,CA6Cf,6BAA8B,CAC9B,YAAa,CACb,eAAgB,CAChB,6BAhDe,CAiDf,uCAAwC,CACxC,yCAA0C,CAC1C,wCAAyC,CAjD5C,+BAsDE,gBAxDgB,CAElB,+CAyDG,4BAA6B,CAC7B,UA5De,CA6Df,cAAe,CACf,aAAc,CACd,6BAAsD,CACtD,uCAAwC,CACxC,0CAA2C,CAC3C,wCAAyC,CAhE5C,8BAqEE,iBAvEgB,CAElB,8CAwEG,4BAA6B,CAC7B,WA3Ee,CA4Ef,cAAe,CACf,aAAc,CACd,6BA9Ee,CA+Ef,uCAAwC,CACxC,yCAA0C,CAC1C,0CAA2C,CA/E9C,6BAoFE,iBAAkB,CAClB,2EAA6E,CAC7E,SAAU,CAtFZ,8BA0FE,kBAAmB,CACnB,yCAA0C,CAC1C,SAAU\",\"sourcesContent\":[\"$scope_version:\\\"6b494fc\\\"; @import 'variables';\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$arrow-width: 10px;\\n\\n.popover {\\n\\tz-index: 100000;\\n\\tdisplay: block !important;\\n\\n\\tfilter: drop-shadow(0 1px 10px var(--color-box-shadow));\\n\\n\\t&__inner {\\n\\t\\tpadding: 0;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground: var(--color-main-background);\\n\\t}\\n\\n\\t&__arrow {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 1;\\n\\t\\twidth: 0;\\n\\t\\theight: 0;\\n\\t\\tmargin: $arrow-width;\\n\\t\\tborder-style: solid;\\n\\t\\tborder-color: var(--color-main-background);\\n\\t}\\n\\n\\t&[x-placement^='top'] {\\n\\t\\tmargin-bottom: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\tbottom: -$arrow-width;\\n\\t\\t\\tleft: calc(50% - $arrow-width);\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width 0 $arrow-width;\\n\\t\\t\\tborder-right-color: transparent !important;\\n\\t\\t\\tborder-bottom-color: transparent !important;\\n\\t\\t\\tborder-left-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[x-placement^='bottom'] {\\n\\t\\tmargin-top: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\ttop: -$arrow-width;\\n\\t\\t\\tleft: calc(50% - $arrow-width);\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: 0 $arrow-width $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent !important;\\n\\t\\t\\tborder-right-color: transparent !important;\\n\\t\\t\\tborder-left-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[x-placement^='right'] {\\n\\t\\tmargin-left: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\ttop: calc(50% - $arrow-width);\\n\\t\\t\\tleft: -$arrow-width;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width $arrow-width 0;\\n\\t\\t\\tborder-top-color: transparent !important;\\n\\t\\t\\tborder-bottom-color: transparent !important;\\n\\t\\t\\tborder-left-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[x-placement^='left'] {\\n\\t\\tmargin-right: $arrow-width;\\n\\n\\t\\t.popover__arrow {\\n\\t\\t\\ttop: calc(50% - $arrow-width);\\n\\t\\t\\tright: -$arrow-width;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width 0 $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent !important;\\n\\t\\t\\tborder-right-color: transparent !important;\\n\\t\\t\\tborder-bottom-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&[aria-hidden='true'] {\\n\\t\\tvisibility: hidden;\\n\\t\\ttransition: opacity var(--animation-quick), visibility var(--animation-quick);\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t&[aria-hidden='false'] {\\n\\t\\tvisibility: visible;\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!./index.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { VTooltip } from 'v-tooltip'\nimport './index.scss'\n\n// force scope the tooltip and use .vue-tooltip\n// instead of .tooltip to avoid server compatibility\n// issues and the use of !important\nVTooltip.options.defaultTemplate = `<div class=\"vue-tooltip\" role=\"tooltip\" data-v-${SCOPE_VERSION}><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>`\nVTooltip.options.defaultHtml = false\n\nexport default VTooltip\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vue-tooltip[data-v-6b494fc]{position:absolute;z-index:100000;right:auto;left:auto;display:block;margin:0;margin-top:-3px;padding:10px 0;text-align:left;text-align:start;opacity:0;line-height:1.6;line-break:auto;filter:drop-shadow(0 1px 10px var(--color-box-shadow))}.vue-tooltip[data-v-6b494fc][x-placement^='top'] .tooltip-arrow{bottom:0;margin-top:0;margin-bottom:0;border-width:10px 10px 0 10px;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-6b494fc][x-placement^='bottom'] .tooltip-arrow{top:0;margin-top:0;margin-bottom:0;border-width:0 10px 10px 10px;border-top-color:transparent;border-right-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-6b494fc][x-placement^='right'] .tooltip-arrow{right:100%;margin-right:0;margin-left:0;border-width:10px 10px 10px 0;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.vue-tooltip[data-v-6b494fc][x-placement^='left'] .tooltip-arrow{left:100%;margin-right:0;margin-left:0;border-width:10px 0 10px 10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent}.vue-tooltip[data-v-6b494fc][aria-hidden='true']{visibility:hidden;transition:opacity .15s, visibility .15s;opacity:0}.vue-tooltip[data-v-6b494fc][aria-hidden='false']{visibility:visible;transition:opacity .15s;opacity:1}.vue-tooltip[data-v-6b494fc] .tooltip-inner{max-width:350px;padding:5px 8px;text-align:center;color:var(--color-main-text);border-radius:var(--border-radius);background-color:var(--color-main-background)}.vue-tooltip[data-v-6b494fc] .tooltip-arrow{position:absolute;z-index:1;width:0;height:0;margin:0;border-style:solid;border-color:var(--color-main-background)}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./index.scss\"],\"names\":[],\"mappings\":\"AAeA,6BACC,iBAAkB,CAClB,cAAe,CACf,UAAW,CACX,SAAU,CACV,aAAc,CACd,QAAS,CAET,eAAgB,CAChB,cAAe,CACf,eAAgB,CAChB,gBAAiB,CACjB,SAAU,CACV,eAAgB,CAEhB,eAAgB,CAChB,sDAAuD,CAhBxD,gEAqBG,QAAS,CACT,YAAa,CACb,eAAgB,CAChB,6BA1Be,CA2Bf,8BAA+B,CAC/B,+BAAgC,CAChC,6BAA8B,CA3BjC,mEAkCG,KAAM,CACN,YAAa,CACb,eAAgB,CAChB,6BAvCe,CAwCf,4BAA6B,CAC7B,8BAA+B,CAC/B,6BAA8B,CAxCjC,kEA+CG,UAAW,CACX,cAAe,CACf,aAAc,CACd,6BAAsD,CACtD,4BAA6B,CAC7B,+BAAgC,CAChC,6BAA8B,CArDjC,iEA4DG,SAAU,CACV,cAAe,CACf,aAAc,CACd,6BAjEe,CAkEf,4BAA6B,CAC7B,8BAA+B,CAC/B,+BAAgC,CAlEnC,iDAwEE,iBAAkB,CAClB,wCAAyC,CACzC,SAAU,CA1EZ,kDA6EE,kBAAmB,CACnB,uBAAwB,CACxB,SAAU,CA/EZ,4CAoFE,eAAgB,CAChB,eAAgB,CAChB,iBAAkB,CAClB,4BAA6B,CAC7B,kCAAmC,CACnC,6CAA8C,CAzFhD,4CA8FE,iBAAkB,CAClB,SAAU,CACV,OAAQ,CACR,QAAS,CACT,QAAS,CACT,kBAAmB,CACnB,yCAA0C\",\"sourcesContent\":[\"$scope_version:\\\"6b494fc\\\"; @import 'variables';\\n/**\\n* @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>\\n* @copyright Copyright (c) 2016, Robin Appelman <robin@icewind.nl>\\n* @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>\\n* @copyright Copyright (c) 2016, Erik Pellikka <erik@pellikka.org>\\n* @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>\\n*\\n* Bootstrap v3.3.5 (http://getbootstrap.com)\\n* Copyright 2011-2015 Twitter, Inc.\\n* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n*/\\n\\n$arrow-width: 10px;\\n\\n.vue-tooltip[data-v-#{$scope_version}] {\\n\\tposition: absolute;\\n\\tz-index: 100000;\\n\\tright: auto;\\n\\tleft: auto;\\n\\tdisplay: block;\\n\\tmargin: 0;\\n\\t/* default to top */\\n\\tmargin-top: -3px;\\n\\tpadding: 10px 0;\\n\\ttext-align: left;\\n\\ttext-align: start;\\n\\topacity: 0;\\n\\tline-height: 1.6;\\n\\n\\tline-break: auto;\\n\\tfilter: drop-shadow(0 1px 10px var(--color-box-shadow));\\n\\n\\t// TOP\\n\\t&[x-placement^='top'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\tbottom: 0;\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width 0 $arrow-width;\\n\\t\\t\\tborder-right-color: transparent;\\n\\t\\t\\tborder-bottom-color: transparent;\\n\\t\\t\\tborder-left-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// BOTTOM\\n\\t&[x-placement^='bottom'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\tborder-width: 0 $arrow-width $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent;\\n\\t\\t\\tborder-right-color: transparent;\\n\\t\\t\\tborder-left-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// RIGHT\\n\\t&[x-placement^='right'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\tright: 100%;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width $arrow-width $arrow-width 0;\\n\\t\\t\\tborder-top-color: transparent;\\n\\t\\t\\tborder-bottom-color: transparent;\\n\\t\\t\\tborder-left-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// LEFT\\n\\t&[x-placement^='left'] {\\n\\t\\t.tooltip-arrow {\\n\\t\\t\\tleft: 100%;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t\\tborder-width: $arrow-width 0 $arrow-width $arrow-width;\\n\\t\\t\\tborder-top-color: transparent;\\n\\t\\t\\tborder-right-color: transparent;\\n\\t\\t\\tborder-bottom-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t// HIDDEN / SHOWN\\n\\t&[aria-hidden='true'] {\\n\\t\\tvisibility: hidden;\\n\\t\\ttransition: opacity .15s, visibility .15s;\\n\\t\\topacity: 0;\\n\\t}\\n\\t&[aria-hidden='false'] {\\n\\t\\tvisibility: visible;\\n\\t\\ttransition: opacity .15s;\\n\\t\\topacity: 1;\\n\\t}\\n\\n\\t// CONTENT\\n\\t.tooltip-inner {\\n\\t\\tmax-width: 350px;\\n\\t\\tpadding: 5px 8px;\\n\\t\\ttext-align: center;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t}\\n\\n\\t// ARROW\\n\\t.tooltip-arrow {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 1;\\n\\t\\twidth: 0;\\n\\t\\theight: 0;\\n\\t\\tmargin: 0;\\n\\t\\tborder-style: solid;\\n\\t\\tborder-color: var(--color-main-background);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = require(\"core-js/modules/es.string.replace.js\");","module.exports = require(\"core-js/modules/es.regexp.to-string.js\");","module.exports = require(\"core-js/modules/web.dom-collections.for-each.js\");","module.exports = require(\"core-js/modules/es.array.concat.js\");","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('VPopover',_vm._g(_vm._b({ref:\"popover\",attrs:{\"popover-base-class\":\"popover\",\"popover-wrapper-class\":\"popover__wrapper\",\"popover-arrow-class\":\"popover__arrow\",\"popover-inner-class\":\"popover__inner\"}},'VPopover',_vm.$attrs,false),_vm.$listeners),[_vm._t(\"trigger\"),_vm._v(\" \"),_c('template',{slot:\"popover\"},[_vm._t(\"default\")],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Popover.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Popover.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n -\n - @author Marco Ambrosini <marcoambrosini@pm.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<docs>\n\n### General description\n\nThis component is just a wrapper for the v-component plugin by Akryum,\nplease refer to this documentation for customization:\nhttps://github.com/Akryum/v-tooltip\n\nThis components has two slots:\n* 'trigger' which can be any html element and it will trigger the popover\nthis slot is optional since you can toggle the popover also by updating the\nopen prop on this component;\n\n* a default slot that is for the content of the popover.\n\n### Examples\n\nWith a `<button>` as a trigger:\n```vue\n<template>\n\t<Popover>\n\t\t<button slot=\"trigger\"> I am the trigger </button>\n\t\t<template>\n\t\t<h2>this is some content</h2>\n\t\t</template>\n\t</Popover>\n</template>\n```\n</docs>\n\n<template>\n\t<VPopover\n\t\tref=\"popover\"\n\t\tv-bind=\"$attrs\"\n\t\tpopover-base-class=\"popover\"\n\t\tpopover-wrapper-class=\"popover__wrapper\"\n\t\tpopover-arrow-class=\"popover__arrow\"\n\t\tpopover-inner-class=\"popover__inner\"\n\t\tv-on=\"$listeners\">\n\t\t<!-- This will be the popover target (for the events and position) -->\n\t\t<slot name=\"trigger\" />\n\t\t<!-- This will be the content of the popover -->\n\t\t<template slot=\"popover\">\n\t\t\t<slot />\n\t\t</template>\n\t</VPopover>\n</template>\n\n<script>\nimport { VPopover } from 'v-tooltip'\n\nexport default {\n\tname: 'Popover',\n\tcomponents: {\n\t\tVPopover,\n\t},\n\n\tmounted() {\n\t\tthis.$watch(\n\t\t\t() => {\n\t\t\t\t// required because v-tooltip doesn't provide events\n\t\t\t\t// and @show is too early\n\t\t\t\t// see https://github.com/Akryum/v-tooltip/issues/661\n\t\t\t\treturn this.$refs.popover.isOpen\n\t\t\t},\n\t\t\t(val) => {\n\t\t\t\tif (val) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Triggered after the tooltip was visually displayed.\n\t\t\t\t\t *\n\t\t\t\t\t * This is different from the 'show' and 'apply-show' which\n\t\t\t\t\t * run earlier than this where there is no guarantee that the\n\t\t\t\t\t * tooltip is already visible and in the DOM.\n\t\t\t\t\t */\n\t\t\t\t\tthis.$emit('after-show')\n\t\t\t\t} else {\n\t\t\t\t\t/**\n\t\t\t\t\t * Triggered after the tooltip was visually hidden.\n\t\t\t\t\t */\n\t\t\t\t\tthis.$emit('after-hide')\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n$arrow-width: 10px;\n\n.popover {\n\tz-index: 100000;\n\tdisplay: block !important;\n\n\tfilter: drop-shadow(0 1px 10px var(--color-box-shadow));\n\n\t&__inner {\n\t\tpadding: 0;\n\t\tcolor: var(--color-main-text);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground: var(--color-main-background);\n\t}\n\n\t&__arrow {\n\t\tposition: absolute;\n\t\tz-index: 1;\n\t\twidth: 0;\n\t\theight: 0;\n\t\tmargin: $arrow-width;\n\t\tborder-style: solid;\n\t\tborder-color: var(--color-main-background);\n\t}\n\n\t&[x-placement^='top'] {\n\t\tmargin-bottom: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\tbottom: -$arrow-width;\n\t\t\tleft: calc(50% - $arrow-width);\n\t\t\tmargin-top: 0;\n\t\t\tmargin-bottom: 0;\n\t\t\tborder-width: $arrow-width $arrow-width 0 $arrow-width;\n\t\t\tborder-right-color: transparent !important;\n\t\t\tborder-bottom-color: transparent !important;\n\t\t\tborder-left-color: transparent !important;\n\t\t}\n\t}\n\n\t&[x-placement^='bottom'] {\n\t\tmargin-top: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\ttop: -$arrow-width;\n\t\t\tleft: calc(50% - $arrow-width);\n\t\t\tmargin-top: 0;\n\t\t\tmargin-bottom: 0;\n\t\t\tborder-width: 0 $arrow-width $arrow-width $arrow-width;\n\t\t\tborder-top-color: transparent !important;\n\t\t\tborder-right-color: transparent !important;\n\t\t\tborder-left-color: transparent !important;\n\t\t}\n\t}\n\n\t&[x-placement^='right'] {\n\t\tmargin-left: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\ttop: calc(50% - $arrow-width);\n\t\t\tleft: -$arrow-width;\n\t\t\tmargin-right: 0;\n\t\t\tmargin-left: 0;\n\t\t\tborder-width: $arrow-width $arrow-width $arrow-width 0;\n\t\t\tborder-top-color: transparent !important;\n\t\t\tborder-bottom-color: transparent !important;\n\t\t\tborder-left-color: transparent !important;\n\t\t}\n\t}\n\n\t&[x-placement^='left'] {\n\t\tmargin-right: $arrow-width;\n\n\t\t.popover__arrow {\n\t\t\ttop: calc(50% - $arrow-width);\n\t\t\tright: -$arrow-width;\n\t\t\tmargin-right: 0;\n\t\t\tmargin-left: 0;\n\t\t\tborder-width: $arrow-width 0 $arrow-width $arrow-width;\n\t\t\tborder-top-color: transparent !important;\n\t\t\tborder-right-color: transparent !important;\n\t\t\tborder-bottom-color: transparent !important;\n\t\t}\n\t}\n\n\t&[aria-hidden='true'] {\n\t\tvisibility: hidden;\n\t\ttransition: opacity var(--animation-quick), visibility var(--animation-quick);\n\t\topacity: 0;\n\t}\n\n\t&[aria-hidden='false'] {\n\t\tvisibility: visible;\n\t\ttransition: opacity var(--animation-quick);\n\t\topacity: 1;\n\t}\n}\n\n</style>\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Popover.vue?vue&type=style&index=0&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","module.exports = require(\"core-js/modules/es.string.trim.js\");","module.exports = require(\"core-js/modules/es.number.constructor.js\");","module.exports = require(\"core-js/modules/es.symbol.js\");","module.exports = require(\"@nextcloud/l10n/dist/gettext\");","\n/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst GenRandomId = (length) => {\n\treturn Math.random()\n\t\t.toString(36)\n\t\t.replace(/[^a-z]+/g, '')\n\t\t.substr(0, length || 5)\n}\n\nexport default GenRandomId\n","module.exports = require(\"core-js/modules/es.symbol.description.js\");","\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\n\nexport default {\n\tbefore() {\n\t\t// all actions requires a valid text content\n\t\t// if none, forbid the component mount and throw error\n\t\tif (!this.$slots.default || this.text.trim() === '') {\n\t\t\tVue.util.warn(`${this.$options.name} cannot be empty and requires a meaningful text content`, this)\n\t\t\tthis.$destroy()\n\t\t\tthis.$el.remove()\n\t\t}\n\t},\n\n\tbeforeUpdate() {\n\t\tthis.text = this.getText()\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// $slots are not reactive.\n\t\t\t// We need to update the content manually\n\t\t\ttext: this.getText(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisLongText() {\n\t\t\treturn this.text && this.text.trim().length > 20\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetText() {\n\t\t\treturn this.$slots.default ? this.$slots.default[0].text.trim() : ''\n\t\t},\n\t},\n}\n","module.exports = require(\"core-js/modules/web.url.js\");","module.exports = require(\"core-js/modules/es.array.slice.js\");","module.exports = require(\"core-js/modules/es.symbol.iterator.js\");","/**\n * @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @author Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Popover from './Popover'\n\nexport default Popover\n","\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Get the first parent component matching the provided name\n *\n * @param {Object} context the context to search from (usualy this)\n * @param {string} name the parent name\n * @returns {Object} the parent component\n */\nconst GetParent = function(context, name) {\n\tlet parent = context.$parent\n\twhile (parent) {\n\t\tif (parent.$options.name === name) {\n\t\t\treturn parent\n\t\t}\n\t\tparent = parent.$parent\n\t}\n}\n\nexport default GetParent\n","\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport actionGlobal from './actionGlobal'\nimport GetParent from '../utils/GetParent'\n\nexport default {\n\tmixins: [actionGlobal],\n\tprops: {\n\t\t/**\n\t\t * Icon to show with the action, can be either a CSS class or an URL\n\t\t */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Title to show next to the icon\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Whether we close the Actions menu after the click\n\t\t */\n\t\tcloseAfterClick: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Aria label for the button. Not needed if the button has text.\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tisIconUrl() {\n\t\t\ttry {\n\t\t\t\treturn new URL(this.icon)\n\t\t\t} catch (error) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonClick(event) {\n\t\t\t/**\n\t\t\t * Emitted when the action is clicked\n\t\t\t * @type {Event}\n\t\t\t */\n\t\t\tthis.$emit('click', event)\n\n\t\t\tif (this.closeAfterClick) {\n\t\t\t\tconst parent = GetParent(this, 'Actions')\n\t\t\t\tif (parent && parent.closeMenu) {\n\t\t\t\t\tparent.closeMenu()\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\n\n/**\n * Validate children of a vue component\n *\n * @param {Object[]} slots the vue component slot\n * @param {String[]} allowed the allowed components name\n * @param {Object} vm the vue component instance\n */\nconst ValidateSlot = (slots, allowed, vm) => {\n\tif (slots === undefined) {\n\t\treturn\n\t}\n\n\tfor (let index = slots.length - 1; index >= 0; index--) {\n\t\tconst node = slots[index]\n\t\t// also check against allowed to avoid uninitiated vnodes with no componentOptions\n\t\tconst isHtmlElement = !node.componentOptions && node.tag && allowed.indexOf(node.tag) === -1\n\t\tconst isVueComponent = !!node.componentOptions && typeof node.componentOptions.tag === 'string'\n\t\tconst isForbiddenComponent = isVueComponent && allowed.indexOf(node.componentOptions.tag) === -1\n\n\t\t// if html element or not a vue component or vue component not in allowed tags\n\t\tif (isHtmlElement || !isVueComponent || isForbiddenComponent) {\n\t\t\t// only warn when html elment or forbidden component\n\t\t\t// sometimes text nodes are present which are hardly removeable by the developer and spam the warnings\n\t\t\tif (isHtmlElement || isForbiddenComponent) {\n\t\t\t\tVue.util.warn(`${isHtmlElement ? node.tag : node.componentOptions.tag} is not allowed inside the ${vm.$options.name} component`, vm)\n\t\t\t}\n\n\t\t\t// cleanup\n\t\t\tslots.splice(index, 1)\n\t\t}\n\t}\n}\n\nexport default ValidateSlot\n","module.exports = require(\"core-js/modules/es.array.filter.js\");","module.exports = require(\"core-js/modules/es.array.from.js\");","import { n, t } from '../l10n'\n\nexport default {\n\tmethods: {\n\t\tn,\n\t\tt,\n\t},\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../fonts/iconfont-vue-6b494fc.eot\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"../../fonts/iconfont-vue-6b494fc.woff\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"../../fonts/iconfont-vue-6b494fc.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"../../fonts/iconfont-vue-6b494fc.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face{font-family:\\\"iconfont-vue-6b494fc\\\";src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"embedded-opentype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"woff\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format(\\\"truetype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format(\\\"svg\\\")}.icon[data-v-551c21fd]{font-style:normal;font-weight:400}.icon.arrow-left-double[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.arrow-left[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.arrow-right-double[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.arrow-right[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.breadcrumb[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.checkmark[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.close[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.confirm[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.info[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.menu[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.more[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.pause[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.play[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.triangle-s[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-away[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-dnd[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-invisible[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-online[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.action-item[data-v-551c21fd]{position:relative;display:inline-block}.action-item--single[data-v-551c21fd]:hover,.action-item--single[data-v-551c21fd]:focus,.action-item--single[data-v-551c21fd]:active,.action-item__menutoggle[data-v-551c21fd]:hover,.action-item__menutoggle[data-v-551c21fd]:focus,.action-item__menutoggle[data-v-551c21fd]:active{opacity:1;background-color:rgba(127,127,127,0.25)}.action-item__menutoggle[data-v-551c21fd]:disabled,.action-item--single[data-v-551c21fd]:disabled{opacity:.3 !important}.action-item.action-item--open .action-item__menutoggle[data-v-551c21fd]{opacity:1;background-color:rgba(127,127,127,0.25)}.action-item--single[data-v-551c21fd],.action-item__menutoggle[data-v-551c21fd]{box-sizing:border-box;width:auto;min-width:44px;height:44px;margin:0;padding:14px;cursor:pointer;border:none;border-radius:22px;background-color:transparent}.action-item__menutoggle[data-v-551c21fd]{display:flex;align-items:center;justify-content:center;opacity:.7;font-weight:bold;line-height:16px}.action-item__menutoggle[data-v-551c21fd] span{width:16px;height:16px;line-height:16px}.action-item__menutoggle[data-v-551c21fd]:before{content:''}.action-item__menutoggle--default-icon[data-v-551c21fd]:before{font-family:\\\"iconfont-vue-6b494fc\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.action-item__menutoggle--default-icon[data-v-551c21fd]::before{font-size:16px}.action-item__menutoggle--with-title[data-v-551c21fd]{position:relative;padding-left:44px;white-space:nowrap;opacity:1;border:1px solid var(--color-border-dark);background-color:var(--color-background-dark);background-position:14px center;font-size:inherit}.action-item__menutoggle--with-title[data-v-551c21fd]:before{position:absolute;top:14px;left:14px}.action-item__menutoggle--primary[data-v-551c21fd]{opacity:1;color:var(--color-primary-text);border:none;background-color:var(--color-primary-element)}.action-item--open .action-item__menutoggle--primary[data-v-551c21fd],.action-item__menutoggle--primary[data-v-551c21fd]:hover,.action-item__menutoggle--primary[data-v-551c21fd]:focus,.action-item__menutoggle--primary[data-v-551c21fd]:active{color:var(--color-primary-text) !important;background-color:var(--color-primary-element-light) !important}.action-item--single[data-v-551c21fd]{opacity:.7}.action-item--single[data-v-551c21fd]:hover,.action-item--single[data-v-551c21fd]:focus,.action-item--single[data-v-551c21fd]:active{opacity:1}.action-item--single>[hidden][data-v-551c21fd]{display:none}.ie .action-item__menu[data-v-551c21fd],.ie .action-item__menu .action-item__menu_arrow[data-v-551c21fd],.edge .action-item__menu[data-v-551c21fd],.edge .action-item__menu .action-item__menu_arrow[data-v-551c21fd]{border:1px solid var(--color-border)}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../fonts/scss/iconfont-vue.scss\",\"webpack://./Actions.vue\",\"webpack://./../../assets/variables.scss\"],\"names\":[],\"mappings\":\"AA2FE,WACC,kCAAmC,CACnC,2CAAuC,CACvC,+OAGmD,CAMpD,uBACE,iBAAkB,CAClB,eAAgB,CAFlB,gDAMM,kCAAmC,CACnC,WA5Ge,CAAO,yCA0GL,kCACJ,CAAsB,WA1G3B,CAAA,iDAyGU,kCACL,CAAA,WAzGG,CAAA,0CAwGL,kCACE,CAAA,WAxGJ,CAAA,yCAuGC,kCACG,CAAA,WACN,CAxGC,wCAsGC,kCACI,CAAA,WACb,CAAO,oCAFF,kCACQ,CAAA,WACb,CAAA,sCAFO,kCACM,CAAA,WACb,CAAA,mCAFI,kCACS,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WACb,CAAA,oCAPD,kCAMc,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WAAsB,CACnC,yCAPD,kCAMc,CAAA,WAAA,CAAsB,+CANpC,kCAMc,CAAA,WAAA,CAAA,8CANd,kCAMc,CAAA,WAAA,CAAA,oDANd,kCAMc,CAAA,WAAA,CAAA,iDANd,kCAMc,CAAA,WAAA,CAAA,8BA1FG,iBC6nBZ,CACX,oBACA,CAAA,sRASC,SAAA,CAAY,uCCvnBE,CAAA,kGD+nBd,qBACA,CAAA,yEAGmB,SAAA,CAAA,uCCvnBK,CAAA,gFD8nBxB,qBACA,CAAA,UAAY,CAAA,cACL,CAAA,WACP,CAAS,QACT,CAAA,YACA,CAAA,cClpBY,CAAA,WDopBJ,CAAA,kBAER,CAAA,4BACA,CAAA,0CACA,YAAA,CAAA,kBAMA,CAAA,sBACA,CAAA,UAAe,CAAE,gBCrpBF,CAAE,gBDupBJ,CAAI,+CANjB,UAUA,CAAA,WACC,CAAK,gBC1qBI,CAAI,iDD+pBd,UAAY,CAAA,+DAkBX,kCD7sBF,CAAA,iBAAsB,CAkFnB,eAAY,CAAA,WACZ,CAAA,gEC4nBD,cAAc,CAAA,sDAIb,iBAAA,CAGW,iBACF,CAAQ,kBC/rBA,CDisBlB,SAAA,CAAA,yCAEkB,CAAA,6CAEA,CAAA,+BAClB,CAAA,iBAAkC,CAAM,6DARxC,iBAAY,CAWJ,QACP,CAAQ,SAAU,CAClB,mDAEA,SAAA,CAAA,+BAKM,CAAA,WAAA,CAAA,6CAEW,CAAA,kPAJlB,0CASQ,CAAA,8DACW,CAAA,sCAClB,UAAA,CAAA,qIAIF,SAAA,CAAA,+CAAA,YAQI,CAAA,sNASc,oCACA\",\"sourcesContent\":[\"$__iconfont__data: map-merge(if(global_variable_exists('__iconfont__data'), $__iconfont__data, ()), (\\n\\t\\\"iconfont-vue-6b494fc\\\": (\\n\\t\\t\\\"arrow-left-double\\\": \\\"\\\\ea01\\\",\\n\\t\\t\\\"arrow-left\\\": \\\"\\\\ea02\\\",\\n\\t\\t\\\"arrow-right-double\\\": \\\"\\\\ea03\\\",\\n\\t\\t\\\"arrow-right\\\": \\\"\\\\ea04\\\",\\n\\t\\t\\\"breadcrumb\\\": \\\"\\\\ea05\\\",\\n\\t\\t\\\"checkmark\\\": \\\"\\\\ea06\\\",\\n\\t\\t\\\"close\\\": \\\"\\\\ea07\\\",\\n\\t\\t\\\"confirm\\\": \\\"\\\\ea08\\\",\\n\\t\\t\\\"info\\\": \\\"\\\\ea09\\\",\\n\\t\\t\\\"menu\\\": \\\"\\\\ea0a\\\",\\n\\t\\t\\\"more\\\": \\\"\\\\ea0b\\\",\\n\\t\\t\\\"pause\\\": \\\"\\\\ea0c\\\",\\n\\t\\t\\\"play\\\": \\\"\\\\ea0d\\\",\\n\\t\\t\\\"triangle-s\\\": \\\"\\\\ea0e\\\",\\n\\t\\t\\\"user-status-away\\\": \\\"\\\\ea0f\\\",\\n\\t\\t\\\"user-status-dnd\\\": \\\"\\\\ea10\\\",\\n\\t\\t\\\"user-status-invisible\\\": \\\"\\\\ea11\\\",\\n\\t\\t\\\"user-status-online\\\": \\\"\\\\ea12\\\"\\n\\t)\\n));\\n\\n\\n$create-font-face: true !default; // should the @font-face tag get created?\\n\\n// should there be a custom class for each icon? will be .filename\\n$create-icon-classes: true !default; \\n\\n// what is the common class name that icons share? in this case icons need to have .icon.filename in their classes\\n// this requires you to have 2 classes on each icon html element, but reduced redeclaration of the font family\\n// for each icon\\n$icon-common-class: 'icon' !default;\\n\\n// if you whish to prefix your filenames, here you can do so.\\n// if this string stays empty, your classes will use the filename, for example\\n// an icon called star.svg will result in a class called .star\\n// if you use the prefix to be 'icon-' it would result in .icon-star\\n$icon-prefix: '' !default; \\n\\n// helper function to get the correct font group\\n@function iconfont-group($group: null) {\\n @if (null == $group) {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n @if (false == map-has-key($__iconfont__data, $group)) {\\n @warn 'Undefined Iconfont Family!';\\n @return ();\\n }\\n @return map-get($__iconfont__data, $group);\\n}\\n\\n// helper function to get the correct icon of a group\\n@function iconfont-item($name) {\\n $slash: str-index($name, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($name, 0, $slash - 1);\\n $name: str-slice($name, $slash + 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n $group: iconfont-group($group);\\n @if (false == map-has-key($group, $name)) {\\n @warn 'Undefined Iconfont Glyph!';\\n @return '';\\n }\\n @return map-get($group, $name);\\n}\\n\\n// complete mixing to include the icon\\n// usage:\\n// .my_icon{ @include iconfont('star') }\\n@mixin iconfont($icon) {\\n $slash: str-index($icon, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($icon, 0, $slash - 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n &:before {\\n font-family: $group;\\n font-style: normal;\\n font-weight: 400;\\n content: iconfont-item($icon);\\n }\\n}\\n\\n// creates the font face tag if the variable is set to true (default)\\n@if $create-font-face == true {\\n @font-face {\\n font-family: \\\"iconfont-vue-6b494fc\\\";\\n src: url('../iconfont-vue-6b494fc.eot'); /* IE9 Compat Modes */\\n src: url('../iconfont-vue-6b494fc.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\\n url('../iconfont-vue-6b494fc.woff') format('woff'), /* Pretty Modern Browsers */\\n url('../iconfont-vue-6b494fc.ttf') format('truetype'), /* Safari, Android, iOS */\\n url('../iconfont-vue-6b494fc.svg') format('svg'); /* Legacy iOS */\\n }\\n}\\n\\n// creates icon classes for each individual loaded svg (default)\\n@if $create-icon-classes == true {\\n .#{$icon-common-class} {\\n font-style: normal;\\n font-weight: 400;\\n\\n @each $icon, $content in map-get($__iconfont__data, \\\"iconfont-vue-6b494fc\\\") {\\n &.#{$icon-prefix}#{$icon}:before {\\n font-family: \\\"iconfont-vue-6b494fc\\\";\\n content: iconfont-item(\\\"iconfont-vue-6b494fc/#{$icon}\\\");\\n }\\n }\\n }\\n}\\n\",\"$scope_version:\\\"6b494fc\\\"; @import 'variables';\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import '../../fonts/scss/iconfont-vue';\\n\\n.action-item {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\n\\t// put a grey round background when menu is opened\\n\\t// or hover-focused\\n\\t&--single:hover,\\n\\t&--single:focus,\\n\\t&--single:active,\\n\\t&__menutoggle:hover,\\n\\t&__menutoggle:focus,\\n\\t&__menutoggle:active {\\n\\t\\topacity: $opacity_full;\\n\\t\\t// good looking on dark AND white bg\\n\\t\\tbackground-color: $icon-focus-bg;\\n\\t}\\n\\n\\t// TODO: handle this in the future button component\\n\\t&__menutoggle:disabled,\\n\\t&--single:disabled {\\n\\t\\topacity: .3 !important;\\n\\t}\\n\\n\\t&.action-item--open .action-item__menutoggle {\\n\\t\\topacity: $opacity_full;\\n\\t\\tbackground-color: $action-background-hover;\\n\\t}\\n\\n\\t// icons\\n\\t&--single,\\n\\t&__menutoggle {\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: auto;\\n\\t\\tmin-width: $clickable-area;\\n\\t\\theight: $clickable-area;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: $icon-margin;\\n\\t\\tcursor: pointer;\\n\\t\\tborder: none;\\n\\t\\tborder-radius: $clickable-area / 2;\\n\\t\\tbackground-color: transparent;\\n\\t}\\n\\n\\t// icon-more\\n\\t&__menutoggle {\\n\\t\\t// align menu icon in center\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: center;\\n\\t\\topacity: $opacity_normal;\\n\\t\\tfont-weight: bold;\\n\\t\\tline-height: $icon-size;\\n\\n\\t\\t// image slot\\n\\t\\t/deep/ span {\\n\\t\\t\\twidth: $icon-size;\\n\\t\\t\\theight: $icon-size;\\n\\t\\t\\tline-height: $icon-size;\\n\\t\\t}\\n\\n\\t\\t&:before {\\n\\t\\t\\tcontent: '';\\n\\t\\t}\\n\\n\\t\\t&--default-icon {\\n\\t\\t\\t@include iconfont('more');\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\tfont-size: $icon-size;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--with-title {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tpadding-left: $clickable-area;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t\\tborder: 1px solid var(--color-border-dark);\\n\\t\\t\\t// with a title, we need to display this as a real button\\n\\t\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\t\\tbackground-position: $icon-margin center;\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\t// non-background icon class\\n\\t\\t\\t&:before {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: $icon-margin;\\n\\t\\t\\t\\tleft: $icon-margin;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--primary {\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tborder: none;\\n\\t\\t\\tbackground-color: var(--color-primary-element);\\n\\t\\t\\t.action-item--open &,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus,\\n\\t\\t\\t&:active {\\n\\t\\t\\t\\tcolor: var(--color-primary-text) !important;\\n\\t\\t\\t\\tbackground-color: var(--color-primary-element-light) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&--single {\\n\\t\\topacity: $opacity_normal;\\n\\t\\t&:hover,\\n\\t\\t&:focus,\\n\\t\\t&:active {\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t}\\n\\t\\t// hide anything the slot is displaying\\n\\t\\t& > [hidden] {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ie,\\n.edge {\\n\\t.action-item__menu,\\n\\t.action-item__menu .action-item__menu_arrow {\\n\\t\\tborder: 1px solid var(--color-border);\\n\\t}\\n}\\n\\n\",\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n// https://uxplanet.org/7-rules-for-mobile-ui-button-design-e9cf2ea54556\\n// recommended is 48px\\n// 44px is what we choose and have very good visual-to-usability ratio\\n$clickable-area: 44px;\\n\\n// background icon size\\n// also used for the scss icon font\\n$icon-size: 16px;\\n\\n// icon padding for a $clickable-area width and a $icon-size icon\\n// ( 44px - 16px ) / 2\\n$icon-margin: ($clickable-area - $icon-size) / 2;\\n\\n// transparency background for icons\\n$icon-focus-bg: rgba(127, 127, 127, .25);\\n\\n// popovermenu arrow width from the triangle center\\n$arrow-width: 9px;\\n\\n// opacities\\n$opacity_disabled: .5;\\n$opacity_normal: .7;\\n$opacity_full: 1;\\n\\n// menu round background hover feedback\\n// good looking on dark AND white bg\\n$action-background-hover: rgba(127, 127, 127, .25);\\n\\n// various structure data used in the \\n// `AppNavigation` component\\n$header-height: 50px;\\n$navigation-width: 300px;\\n\\n// mobile breakpoint\\n$breakpoint-mobile: 1024px;\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = require(\"core-js/modules/es.object.keys.js\");","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptor.js\");","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptors.js\");","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Actions from './Actions'\n\nexport default Actions\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst ScopeComponent = (Component) => {\n\t// Init mounted vue if none\n\tif (!Component.mounted) {\n\t\tComponent.mounted = []\n\t} else if (!Array.isArray(Component.mounted)) {\n\t\tComponent.mounted = [Component.mounted]\n\t}\n\n\t// Inject root scoping function\n\tComponent.mounted.push(function() {\n\t\tthis.$el.setAttribute(`data-v-${SCOPE_VERSION}`, '')\n\t})\n}\n\nexport default ScopeComponent\n","var render = function () {\nvar _obj, _obj$1;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isValidSingleAction && !_vm.forceMenu)?_c('element',_vm._b({directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.firstAction.text),expression:\"firstAction.text\",modifiers:{\"auto\":true}}],staticClass:\"action-item action-item--single\",class:( _obj = {}, _obj[_vm.firstAction.icon] = !_vm.iconSlotIsPopulated, _obj[_vm.firstActionClass] = !_vm.iconSlotIsPopulated, _obj ),attrs:{\"rel\":\"noreferrer noopener\",\"disabled\":_vm.disabled},on:_vm._d({\"focus\":_vm.onFocus,\"blur\":_vm.onBlur},[_vm.firstActionEventBinding,_vm.execFirstAction])},'element',_vm.firstActionBinding,false),[_c('VNodes',{attrs:{\"vnodes\":_vm.firstActionIconSlot}}),_vm._v(\" \"),_c('span',{attrs:{\"aria-hidden\":true,\"hidden\":\"\"}},[_vm._t(\"default\")],2)],1):_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasMultipleActions || _vm.forceMenu),expression:\"hasMultipleActions || forceMenu\"}],staticClass:\"action-item\",class:{'action-item--open': _vm.opened}},[_c('Popover',{attrs:{\"delay\":0,\"handle-resize\":true,\"open\":_vm.opened,\"placement\":_vm.placement,\"boundaries-element\":_vm.boundariesElement,\"container\":_vm.container},on:{\"update:open\":function($event){_vm.opened=$event},\"show\":_vm.openMenu,\"after-show\":_vm.onOpen,\"hide\":_vm.closeMenu}},[_c('button',{ref:\"menuButton\",staticClass:\"icon action-item__menutoggle\",class:( _obj$1 = {}, _obj$1[_vm.defaultIcon] = !_vm.iconSlotIsPopulated, _obj$1['action-item__menutoggle--with-title'] = _vm.menuTitle, _obj$1['action-item__menutoggle--primary'] = _vm.primary, _obj$1 ),attrs:{\"slot\":\"trigger\",\"disabled\":_vm.disabled,\"aria-label\":_vm.ariaLabel,\"aria-haspopup\":\"true\",\"aria-controls\":_vm.randomId,\"test-attr\":\"1\",\"aria-expanded\":_vm.opened ? 'true' : 'false'},on:{\"focus\":_vm.onFocus,\"blur\":_vm.onBlur},slot:\"trigger\"},[_vm._t(\"icon\"),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.menuTitle)+\"\\n\\t\\t\")],2),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.opened),expression:\"opened\"}],ref:\"menu\",class:{ open: _vm.opened },attrs:{\"tabindex\":\"-1\"},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"up\",38,$event.key,[\"Up\",\"ArrowUp\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusPreviousAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusNextAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"tab\",9,$event.key,\"Tab\")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusNextAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"tab\",9,$event.key,\"Tab\")){ return null; }if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusPreviousAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-up\",undefined,$event.key,undefined)){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusFirstAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"page-down\",undefined,$event.key,undefined)){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.focusLastAction($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }$event.preventDefault();return _vm.closeMenu($event)}],\"mousemove\":_vm.onMouseFocusAction}},[_c('ul',{attrs:{\"id\":_vm.randomId,\"tabindex\":\"-1\"}},[(_vm.opened)?[_vm._t(\"default\")]:_vm._e()],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Marco Ambrosini <marcoambrosini@pm.me\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<!-- Accessibility guidelines:\nhttps://www.w3.org/TR/wai-aria-practices/examples/menu-button/menu-button-actions.html -->\n\n<docs>\n### Single action\n\n```\n<Actions>\n\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n</Actions>\n```\n\n### Multiple actions\n\n```\n<Actions>\n\t<ActionButton icon=\"icon-edit\" @click=\"alert('Edit')\">Edit</ActionButton>\n\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n\t<ActionLink icon=\"icon-external\" title=\"Link\" href=\"https://nextcloud.com\" />\n</Actions>\n```\n\n### Multiple actions with custom icon\n\n```\n<Actions default-icon=\"icon-edit\">\n\t<ActionButton icon=\"icon-edit\" @click=\"alert('Edit')\">Edit</ActionButton>\n\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n\t<ActionLink icon=\"icon-external\" title=\"Link\" href=\"https://nextcloud.com\" />\n</Actions>\n```\n\n### With menu title\n\n```\n<Actions default-icon=\"icon-edit\" menu-title=\"Object management\">\n\t<ActionButton icon=\"icon-edit\">Rename</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n\t<ActionButton icon=\"icon-confirm\">Validate</ActionButton>\n\t<ActionButton icon=\"icon-download\">Download</ActionButton>\n</Actions>\n```\n\n### Various icons styles\n```\n<Actions :primary=\"true\">\n\t<ActionButton icon=\"icon-edit\">Edit</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n</Actions>\n```\n\n```\n<Actions default-icon=\"icon-add-white\" :primary=\"true\" menu-title=\"Object management\">\n\t<ActionButton icon=\"icon-edit\">Rename</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n\t<ActionButton icon=\"icon-confirm\">Validate</ActionButton>\n\t<ActionButton icon=\"icon-download\">Download</ActionButton>\n</Actions>\n```\n\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```\n<template>\n\t<div style=\"display: flex;align-items: center;\">\n\t\t<button @click=\"toggled = !toggled\">Toggle multiple action</button>\n\t\t<Actions>\n\t\t\t<DotsHorizontalCircleOutline\n\t\t\t\tslot=\"icon\"\n\t\t\t\t:size=\"16\"\n\t\t\t\tdecorative />\n\t\t\t<ActionButton>\n\t\t\t\t<MicrophoneOff\n\t\t\t\t\tslot=\"icon\"\n\t\t\t\t\t:size=\"16\"\n\t\t\t\t\tdecorative />\n\t\t\t\tMute\n\t\t\t</ActionButton>\n\t\t\t<ActionButton v-if=\"toggled\" icon=\"icon-delete\">Delete</ActionButton>\n\t\t</Actions>\n\t\t<Actions>\n\t\t</Actions>\n\t</div>\n</template>\n<script>\nimport DotsHorizontalCircleOutline from 'vue-material-design-icons/DotsHorizontalCircleOutline'\nimport MicrophoneOff from 'vue-material-design-icons/MicrophoneOff'\n\nexport default {\n\tcomponents: {\n\t\tDotsHorizontalCircleOutline,\n\t\tMicrophoneOff,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false\n\t\t}\n\t}\n}\n</script>\n```\n\n### Custom icon slot in child elements\n```\n<Actions :primary=\"true\">\n\t<ActionButton><template #icon><MagnifyIcon /></template>Search</ActionButton>\n\t<ActionButton icon=\"icon-delete\">Delete</ActionButton>\n</Actions>\n```\n\n</docs>\n<template>\n\t<!-- if only one action, check if we need to bind to click or not -->\n\t<element v-if=\"isValidSingleAction && !forceMenu\"\n\t\tv-tooltip.auto=\"firstAction.text\"\n\t\tv-bind=\"firstActionBinding\"\n\t\t:class=\"{\n\t\t\t[firstAction.icon]: !iconSlotIsPopulated ,\n\t\t\t[firstActionClass]: !iconSlotIsPopulated }\"\n\t\tclass=\"action-item action-item--single\"\n\t\trel=\"noreferrer noopener\"\n\t\t:disabled=\"disabled\"\n\t\t@focus=\"onFocus\"\n\t\t@blur=\"onBlur\"\n\t\t@[firstActionEventBinding]=\"execFirstAction\">\n\t\t<!-- Render the icon slot content of the first action -->\n\t\t<VNodes :vnodes=\"firstActionIconSlot\" />\n\n\t\t<!-- fake slot to gather main action -->\n\t\t<span :aria-hidden=\"true\" hidden>\n\t\t\t<!-- @slot All action elements passed into the default slot will be used -->\n\t\t\t<slot />\n\t\t</span>\n\t</element>\n\n\t<!-- more than one action -->\n\t<div v-else\n\t\tv-show=\"hasMultipleActions || forceMenu\"\n\t\t:class=\"{'action-item--open': opened}\"\n\t\tclass=\"action-item\">\n\t\t<!-- If more than one action, create a popovermenu -->\n\t\t<Popover\n\t\t\t:delay=\"0\"\n\t\t\t:handle-resize=\"true\"\n\t\t\t:open.sync=\"opened\"\n\t\t\t:placement=\"placement\"\n\t\t\t:boundaries-element=\"boundariesElement\"\n\t\t\t:container=\"container\"\n\t\t\t@show=\"openMenu\"\n\t\t\t@after-show=\"onOpen\"\n\t\t\t@hide=\"closeMenu\">\n\t\t\t<!-- Menu open/close trigger button -->\n\t\t\t<button slot=\"trigger\"\n\t\t\t\tref=\"menuButton\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\tclass=\"icon action-item__menutoggle\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t[defaultIcon]: !iconSlotIsPopulated,\n\t\t\t\t\t'action-item__menutoggle--with-title': menuTitle,\n\t\t\t\t\t'action-item__menutoggle--primary': primary\n\t\t\t\t}\"\n\t\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t:aria-controls=\"randomId\"\n\t\t\t\ttest-attr=\"1\"\n\t\t\t\t:aria-expanded=\"opened ? 'true' : 'false'\"\n\t\t\t\t@focus=\"onFocus\"\n\t\t\t\t@blur=\"onBlur\">\n\t\t\t\t<slot name=\"icon\" />\n\t\t\t\t{{ menuTitle }}\n\t\t\t</button>\n\n\t\t\t<!-- Menu content -->\n\t\t\t<div v-show=\"opened\"\n\t\t\t\tref=\"menu\"\n\t\t\t\t:class=\"{ open: opened }\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t\t@keydown.up.exact=\"focusPreviousAction\"\n\t\t\t\t@keydown.down.exact=\"focusNextAction\"\n\t\t\t\t@keydown.tab.exact=\"focusNextAction\"\n\t\t\t\t@keydown.shift.tab.exact=\"focusPreviousAction\"\n\t\t\t\t@keydown.page-up.exact=\"focusFirstAction\"\n\t\t\t\t@keydown.page-down.exact=\"focusLastAction\"\n\t\t\t\t@keydown.esc.exact.prevent=\"closeMenu\"\n\t\t\t\t@mousemove=\"onMouseFocusAction\">\n\t\t\t\t<!-- menu content -->\n\t\t\t\t<ul :id=\"randomId\" tabindex=\"-1\">\n\t\t\t\t\t<template v-if=\"opened\">\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</template>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</Popover>\n\t</div>\n</template>\n<script>\nimport Tooltip from '../../directives/Tooltip'\nimport GenRandomId from '../../utils/GenRandomId'\nimport ValidateSlot from '../../utils/ValidateSlot'\nimport { t } from '../../l10n'\nimport Popover from '../Popover'\n\n// This is the list of ALL the ALLOWED components\n// in the default SLOT\nconst allowedChildren = [\n\t'ActionButton',\n\t'ActionCheckbox',\n\t'ActionInput',\n\t'ActionLink',\n\t'ActionRadio',\n\t'ActionRouter',\n\t'ActionSeparator',\n\t'ActionText',\n\t'ActionTextEditable',\n]\n\nconst focusableSelector = '.focusable'\n\n/**\n * The Actions component can be used to display one ore more actions.\n * If only a single action is provided, it will be rendered as an inline icon.\n * For more, a menu indicator will be shown and a popovermenu containing the\n * actions will be opened on click.\n *\n * @since 0.10.0\n */\nexport default {\n\tname: 'Actions',\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tcomponents: {\n\t\tPopover,\n\n\t\t// Component to render the first action icon slot content (vnodes)\n\t\tVNodes: {\n\t\t\tfunctional: true,\n\t\t\trender: (h, context) => context.props.vnodes,\n\t\t},\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Specify the open state of the popover menu\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Force the actions to display in a three dot menu\n\t\t */\n\t\tforceMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specify the menu title\n\t\t */\n\t\tmenuTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Apply primary styling for this menu\n\t\t */\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Icon to show for the toggle menu button\n\t\t * when more than one action is inside the actions component.\n\t\t * Only replace the default three-dot icon if really necessary.\n\t\t */\n\t\tdefaultIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'action-item__menutoggle--default-icon',\n\t\t},\n\n\t\t/**\n\t\t * Aria label for the actions menu\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: t('Actions'),\n\t\t},\n\n\t\t/**\n\t\t * Wanted direction of the menu\n\t\t */\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'bottom',\n\t\t},\n\n\t\t/**\n\t\t * DOM element for the actions' popover boundaries\n\t\t */\n\t\tboundariesElement: {\n\t\t\ttype: Element,\n\t\t\tdefault: () => document.querySelector('body'),\n\t\t},\n\n\t\t/**\n\t\t * Selector for the actions' popover container\n\t\t */\n\t\tcontainer: {\n\t\t\ttype: String,\n\t\t\tdefault: 'body',\n\t\t},\n\n\t\t/**\n\t\t * Disabled state of the main button (single action or menu toggle)\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tactions: [],\n\t\t\topened: this.open,\n\t\t\tfocusIndex: 0,\n\t\t\trandomId: 'menu-' + GenRandomId(),\n\t\t\t// Making children reactive!\n\t\t\t// By binding this here, vuejs will track the object content\n\t\t\t// Needed for firstAction reactivity !!!\n\t\t\tchildren: this.$children,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is there more than one action?\n\t\t * @returns {boolean}\n\t\t */\n\t\thasMultipleActions() {\n\t\t\treturn this.actions.length > 1\n\t\t},\n\t\t/**\n\t\t * Is there any first action ?\n\t\t * And is it allowed as a standalone element ?\n\t\t * @returns {boolean}\n\t\t */\n\t\tisValidSingleAction() {\n\t\t\treturn this.actions.length === 1\n\t\t\t\t&& this.firstActionElement !== null\n\t\t},\n\t\t/**\n\t\t * First action vnode\n\t\t * @returns {Object} return the first action vue vnode\n\t\t */\n\t\tfirstActionVNode() {\n\t\t\treturn this.actions[0]\n\t\t},\n\t\t/**\n\t\t * Reactive binding to the first children\n\t\t * Since we're here, it means we already passed all the proper checks\n\t\t * we can assume the first action is the first children too\n\t\t * @returns {Object} first action vue children object\n\t\t */\n\t\tfirstAction() {\n\t\t\treturn this.children[0]\n\t\t\t\t? this.children[0]\n\t\t\t\t: {}\n\t\t},\n\n\t\t/**\n\t\t * Binding of the first action to the template\n\t\t * @returns {Object} vue template v-bind shortcut\n\t\t */\n\t\tfirstActionBinding() {\n\t\t\tif (this.firstActionVNode && this.firstActionVNode.componentOptions) {\n\t\t\t\tconst tag = this.firstActionVNode.componentOptions.tag\n\t\t\t\tif (tag === 'ActionLink') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tis: 'a',\n\t\t\t\t\t\thref: this.firstAction.href,\n\t\t\t\t\t\ttarget: this.firstAction.target,\n\t\t\t\t\t\t'aria-label': this.firstAction.ariaLabel,\n\t\t\t\t\t\t...this.firstAction.$attrs,\n\t\t\t\t\t\t...this.firstAction.$props,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tag === 'ActionRouter') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tis: 'router-link',\n\t\t\t\t\t\tto: this.firstAction.to,\n\t\t\t\t\t\texact: this.firstAction.exact,\n\t\t\t\t\t\t'aria-label': this.firstAction.ariaLabel,\n\t\t\t\t\t\t...this.firstAction.$attrs,\n\t\t\t\t\t\t...this.firstAction.$props,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tag === 'ActionButton') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tis: 'button',\n\t\t\t\t\t\t'aria-label': this.firstAction.ariaLabel,\n\t\t\t\t\t\t...this.firstAction.$attrs,\n\t\t\t\t\t\t...this.firstAction.$props,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// other action types are not allowed as standalone buttons\n\t\t\treturn null\n\t\t},\n\n\t\t// return the event to bind if the firstActionVNode have an action\n\t\tfirstActionEvent() {\n\t\t\treturn this.firstActionVNode?.componentOptions?.listeners?.click\n\t\t},\n\t\tfirstActionEventBinding() {\n\t\t\treturn this.firstActionEvent ? 'click' : null\n\t\t},\n\t\t// return the first action icon slot vnodes array\n\t\tfirstActionIconSlot() {\n\t\t\treturn this.firstAction?.$slots?.icon\n\t\t},\n\t\tfirstActionClass() {\n\t\t\tconst staticClass = this.firstActionVNode && this.firstActionVNode.data.staticClass\n\t\t\tconst dynClass = this.firstActionVNode && this.firstActionVNode.data.class\n\t\t\treturn `${staticClass} ${dynClass}`\n\t\t},\n\n\t\ticonSlotIsPopulated() {\n\t\t\treturn !!this.$slots.icon\n\t\t},\n\t},\n\n\twatch: {\n\t\t// Watch parent prop\n\t\topen(state) {\n\t\t\tif (state === this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = state\n\t\t},\n\t},\n\tbeforeMount() {\n\t\t// init actions\n\t\tthis.initActions()\n\n\t\t// filter invalid menu items\n\t\tValidateSlot(this.$slots.default, allowedChildren, this)\n\t},\n\tbeforeUpdate() {\n\t\t// ! since we're using $slots to manage our actions\n\t\t// ! we NEED to update the actions if anything change\n\n\t\t// update children & actions\n\t\t// no need to init actions again since we bound it to $children\n\t\t// and the array is now reactive\n\t\t// init actions\n\t\tthis.initActions()\n\t\tValidateSlot(this.$slots.default, allowedChildren, this)\n\t},\n\n\tmethods: {\n\t\t// MENU STATE MANAGEMENT\n\t\topenMenu(e) {\n\t\t\tif (this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = true\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu open state is changed\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is closed\n\t\t\t */\n\t\t\tthis.$emit('open')\n\t\t},\n\t\tcloseMenu(e) {\n\t\t\tif (!this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = false\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu open state is changed\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is closed\n\t\t\t */\n\t\t\tthis.$emit('close')\n\n\t\t\t// close everything\n\t\t\tthis.opened = false\n\t\t\tthis.focusIndex = 0\n\n\t\t\t// focus back the menu button\n\t\t\tthis.$refs.menuButton.focus()\n\t\t},\n\n\t\tonOpen(event) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.focusFirstAction(event)\n\t\t\t})\n\t\t},\n\n\t\t// MENU KEYS & FOCUS MANAGEMENT\n\t\t// focus nearest focusable item on mouse move\n\t\t// DO NOT change the focus if the target is already focused\n\t\t// this will prevent issues with input being unfocused\n\t\t// on mouse move\n\t\tonMouseFocusAction(event) {\n\t\t\tif (document.activeElement === event.target) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst menuItem = event.target.closest('li')\n\t\t\tif (menuItem) {\n\t\t\t\tconst focusableItem = menuItem.querySelector(focusableSelector)\n\t\t\t\tif (focusableItem) {\n\t\t\t\t\tconst focusList = this.$refs.menu.querySelectorAll(focusableSelector)\n\t\t\t\t\tconst focusIndex = [...focusList].indexOf(focusableItem)\n\t\t\t\t\tif (focusIndex > -1) {\n\t\t\t\t\t\tthis.focusIndex = focusIndex\n\t\t\t\t\t\tthis.focusAction()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremoveCurrentActive() {\n\t\t\tconst currentActiveElement = this.$refs.menu.querySelector('li.active')\n\t\t\tif (currentActiveElement) {\n\t\t\t\tcurrentActiveElement.classList.remove('active')\n\t\t\t}\n\t\t},\n\t\tfocusAction() {\n\t\t\t// TODO: have a global disabled state for non input elements\n\t\t\tconst focusElement = this.$refs.menu.querySelectorAll(focusableSelector)[this.focusIndex]\n\t\t\tif (focusElement) {\n\t\t\t\tthis.removeCurrentActive()\n\t\t\t\tconst liMenuParent = focusElement.closest('li.action')\n\t\t\t\tfocusElement.focus()\n\t\t\t\tif (liMenuParent) {\n\t\t\t\t\tliMenuParent.classList.add('active')\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfocusPreviousAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tif (this.focusIndex === 0) {\n\t\t\t\t\t// First element overflows to body-navigation (no preventDefault!) and closes Actions-menu\n\t\t\t\t\tthis.closeMenu()\n\t\t\t\t} else {\n\t\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t\tthis.focusIndex = this.focusIndex - 1\n\t\t\t\t}\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusNextAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tconst indexLength = this.$refs.menu.querySelectorAll(focusableSelector).length - 1\n\t\t\t\tif (this.focusIndex === indexLength) {\n\t\t\t\t\t// Last element overflows to body-navigation (no preventDefault!) and closes Actions-menu\n\t\t\t\t\tthis.closeMenu()\n\t\t\t\t} else {\n\t\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t\tthis.focusIndex = this.focusIndex + 1\n\t\t\t\t}\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusFirstAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\tthis.focusIndex = 0\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusLastAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\tthis.focusIndex = this.$el.querySelectorAll(focusableSelector).length - 1\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\n\t\tpreventIfEvent(event) {\n\t\t\tif (event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t},\n\n\t\t// ACTIONS MANAGEMENT\n\t\t// exec the first action\n\t\texecFirstAction(event) {\n\t\t\tif (this.firstActionEvent) {\n\t\t\t\tthis.firstActionEvent(event)\n\t\t\t}\n\t\t},\n\t\tinitActions() {\n\t\t\t// filter out invalid slots\n\t\t\tthis.actions = (this.$slots.default || []).filter(node => !!node && !!node.componentOptions)\n\t\t},\n\t\tonFocus(event) {\n\t\t\tthis.$emit('focus', event)\n\t\t},\n\t\tonBlur(event) {\n\t\t\tthis.$emit('blur', event)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../fonts/scss/iconfont-vue';\n\n.action-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\n\t// put a grey round background when menu is opened\n\t// or hover-focused\n\t&--single:hover,\n\t&--single:focus,\n\t&--single:active,\n\t&__menutoggle:hover,\n\t&__menutoggle:focus,\n\t&__menutoggle:active {\n\t\topacity: $opacity_full;\n\t\t// good looking on dark AND white bg\n\t\tbackground-color: $icon-focus-bg;\n\t}\n\n\t// TODO: handle this in the future button component\n\t&__menutoggle:disabled,\n\t&--single:disabled {\n\t\topacity: .3 !important;\n\t}\n\n\t&.action-item--open .action-item__menutoggle {\n\t\topacity: $opacity_full;\n\t\tbackground-color: $action-background-hover;\n\t}\n\n\t// icons\n\t&--single,\n\t&__menutoggle {\n\t\tbox-sizing: border-box;\n\t\twidth: auto;\n\t\tmin-width: $clickable-area;\n\t\theight: $clickable-area;\n\t\tmargin: 0;\n\t\tpadding: $icon-margin;\n\t\tcursor: pointer;\n\t\tborder: none;\n\t\tborder-radius: $clickable-area / 2;\n\t\tbackground-color: transparent;\n\t}\n\n\t// icon-more\n\t&__menutoggle {\n\t\t// align menu icon in center\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\topacity: $opacity_normal;\n\t\tfont-weight: bold;\n\t\tline-height: $icon-size;\n\n\t\t// image slot\n\t\t/deep/ span {\n\t\t\twidth: $icon-size;\n\t\t\theight: $icon-size;\n\t\t\tline-height: $icon-size;\n\t\t}\n\n\t\t&:before {\n\t\t\tcontent: '';\n\t\t}\n\n\t\t&--default-icon {\n\t\t\t@include iconfont('more');\n\t\t\t&::before {\n\t\t\t\tfont-size: $icon-size;\n\t\t\t}\n\t\t}\n\n\t\t&--with-title {\n\t\t\tposition: relative;\n\t\t\tpadding-left: $clickable-area;\n\t\t\twhite-space: nowrap;\n\t\t\topacity: $opacity_full;\n\t\t\tborder: 1px solid var(--color-border-dark);\n\t\t\t// with a title, we need to display this as a real button\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t\tbackground-position: $icon-margin center;\n\t\t\tfont-size: inherit;\n\t\t\t// non-background icon class\n\t\t\t&:before {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: $icon-margin;\n\t\t\t\tleft: $icon-margin;\n\t\t\t}\n\t\t}\n\n\t\t&--primary {\n\t\t\topacity: $opacity_full;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tborder: none;\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t\t.action-item--open &,\n\t\t\t&:hover,\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\tcolor: var(--color-primary-text) !important;\n\t\t\t\tbackground-color: var(--color-primary-element-light) !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--single {\n\t\topacity: $opacity_normal;\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\topacity: $opacity_full;\n\t\t}\n\t\t// hide anything the slot is displaying\n\t\t& > [hidden] {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.ie,\n.edge {\n\t.action-item__menu,\n\t.action-item__menu .action-item__menu_arrow {\n\t\tborder: 1px solid var(--color-border);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Actions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Actions.vue?vue&type=script&lang=js&\"","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Actions.vue?vue&type=style&index=0&id=551c21fd&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"li.active[data-v-42b28436]{background-color:var(--color-background-hover)}.action--disabled[data-v-42b28436]{pointer-events:none;opacity:.5}.action--disabled[data-v-42b28436]:hover,.action--disabled[data-v-42b28436]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-42b28436]{opacity:1 !important}.action-button[data-v-42b28436]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-right:14px;cursor:pointer;white-space:nowrap;opacity:.7;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:normal;font-size:var(--default-font-size);line-height:44px}.action-button[data-v-42b28436]:hover,.action-button[data-v-42b28436]:focus{opacity:1}.action-button>span[data-v-42b28436]{cursor:pointer;white-space:nowrap}.action-button__icon[data-v-42b28436]{width:44px;height:44px;opacity:1;background-position:14px center;background-size:16px;background-repeat:no-repeat}.action-button .material-design-icon[data-v-42b28436]{width:44px;height:44px;opacity:1}.action-button .material-design-icon .material-design-icon__svg[data-v-42b28436]{vertical-align:middle}.action-button p[data-v-42b28436]{width:220px;padding:7px 0;cursor:pointer;text-align:left;line-height:1.6em;overflow:hidden;text-overflow:ellipsis}.action-button__longtext[data-v-42b28436]{cursor:pointer;white-space:pre-wrap}.action-button__title[data-v-42b28436]{font-weight:bold;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:inline-block}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../assets/action.scss\",\"webpack://./../../assets/variables.scss\"],\"names\":[],\"mappings\":\"AAwBC,2BAEE,8CAA+C,CAC/C,mCAMD,mBAAoB,CACpB,UCQmB,CDVpB,kFAIE,cAAe,CACf,UCKkB,CDVpB,qCAQE,oBAAqB,CACrB,gCAOD,YAAa,CACb,sBAAuB,CAEvB,UAAW,CACX,WAAY,CACZ,QAAS,CACT,SAAU,CACV,kBCtB8C,CDwB9C,cAAe,CACf,kBAAmB,CAEnB,UCjBiB,CDkBjB,4BAA6B,CAC7B,QAAS,CACT,eAAgB,CAChB,4BAA6B,CAC7B,eAAgB,CAEhB,kBAAmB,CACnB,kCAAmC,CACnC,gBC5CmB,CDsBpB,4EA0BE,SC7Ba,CDGf,qCA8BE,cAAe,CACf,kBAAmB,CACnB,sCAGA,UCzDkB,CD0DlB,WC1DkB,CD2DlB,SCxCa,CDyCb,+BAAwC,CACxC,oBCzDa,CD0Db,2BAA4B,CAxC9B,sDA4CE,UClEkB,CDmElB,WCnEkB,CDoElB,SCjDa,CDGf,iFAiDG,qBAAsB,CAjDzB,kCAuDE,WAAY,CACZ,aAA8B,CAE9B,cAAe,CACf,eAAgB,CAEhB,iBAAkB,CAGlB,eAAgB,CAChB,sBAAuB,CACvB,0CAGA,cAAe,CAEf,oBAAqB,CACrB,uCAGA,gBAAiB,CACjB,sBAAuB,CACvB,eAAgB,CAChB,kBAAmB,CACnB,cAAe,CACf,oBAAqB\",\"sourcesContent\":[\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n * @author Marco Ambrosini <marcoambrosini@pm.me>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n@mixin action-active {\\n\\tli {\\n\\t\\t&.active {\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t}\\n\\t}\\n}\\n\\n@mixin action--disabled {\\n\\t.action--disabled {\\n\\t\\tpointer-events: none;\\n\\t\\topacity: $opacity_disabled;\\n\\t\\t&:hover, &:focus {\\n\\t\\t\\tcursor: default;\\n\\t\\t\\topacity: $opacity_disabled;\\n\\t\\t}\\n\\t\\t& * {\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n\\n@mixin action-item($name) {\\n\\t.action-#{$name} {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\n\\t\\twidth: 100%;\\n\\t\\theight: auto;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 0;\\n\\t\\tpadding-right: $icon-margin;\\n\\n\\t\\tcursor: pointer;\\n\\t\\twhite-space: nowrap;\\n\\n\\t\\topacity: $opacity_normal;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tborder: 0;\\n\\t\\tborder-radius: 0; // otherwise Safari will cut the border-radius area\\n\\t\\tbackground-color: transparent;\\n\\t\\tbox-shadow: none;\\n\\n\\t\\tfont-weight: normal;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\tline-height: $clickable-area;\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t}\\n\\n\\t\\t& > span {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\n\\t\\t&__icon {\\n\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\theight: $clickable-area;\\n\\t\\t\\topacity: $opacity_full;\\n\\t\\t\\tbackground-position: $icon-margin center;\\n\\t\\t\\tbackground-size: $icon-size;\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t}\\n\\n\\t\\t.material-design-icon {\\n\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\theight: $clickable-area;\\n\\t\\t\\topacity: $opacity_full;\\n\\n\\t\\t\\t.material-design-icon__svg {\\n\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// long text area\\n\\t\\tp {\\n\\t\\t\\twidth: 220px;\\n\\t\\t\\tpadding: #{$icon-margin / 2} 0;\\n\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\ttext-align: left;\\n\\n\\t\\t\\tline-height: 1.6em;\\n\\n\\t\\t\\t// in case there are no spaces like long email addresses\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t}\\n\\n\\t\\t&__longtext {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\t// allow the use of `\\\\n`\\n\\t\\t\\twhite-space: pre-wrap;\\n\\t\\t}\\n\\n\\t\\t&__title {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\t}\\n}\\n\",\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n// https://uxplanet.org/7-rules-for-mobile-ui-button-design-e9cf2ea54556\\n// recommended is 48px\\n// 44px is what we choose and have very good visual-to-usability ratio\\n$clickable-area: 44px;\\n\\n// background icon size\\n// also used for the scss icon font\\n$icon-size: 16px;\\n\\n// icon padding for a $clickable-area width and a $icon-size icon\\n// ( 44px - 16px ) / 2\\n$icon-margin: ($clickable-area - $icon-size) / 2;\\n\\n// transparency background for icons\\n$icon-focus-bg: rgba(127, 127, 127, .25);\\n\\n// popovermenu arrow width from the triangle center\\n$arrow-width: 9px;\\n\\n// opacities\\n$opacity_disabled: .5;\\n$opacity_normal: .7;\\n$opacity_full: 1;\\n\\n// menu round background hover feedback\\n// good looking on dark AND white bg\\n$action-background-hover: rgba(127, 127, 127, .25);\\n\\n// various structure data used in the \\n// `AppNavigation` component\\n$header-height: 50px;\\n$navigation-width: 300px;\\n\\n// mobile breakpoint\\n$breakpoint-mobile: 1024px;\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = require(\"core-js/modules/es.array.splice.js\");","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"action\",class:{ 'action--disabled': _vm.disabled }},[_c('button',{staticClass:\"action-button\",class:{ focusable: _vm.isFocusable },attrs:{\"aria-label\":_vm.ariaLabel},on:{\"click\":_vm.onClick}},[_c('span',{staticClass:\"action-button__icon\",class:[_vm.isIconUrl ? 'action-button__icon--url' : _vm.icon],style:({ backgroundImage: _vm.isIconUrl ? (\"url(\" + _vm.icon + \")\") : null })},[_vm._t(\"icon\")],2),_vm._v(\" \"),(_vm.title)?_c('p',[_c('strong',{staticClass:\"action-button__title\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('span',{staticClass:\"action-button__longtext\",domProps:{\"textContent\":_vm._s(_vm.text)}})]):(_vm.isLongText)?_c('p',{staticClass:\"action-button__longtext\",domProps:{\"textContent\":_vm._s(_vm.text)}}):_c('span',{staticClass:\"action-button__text\"},[_vm._v(_vm._s(_vm.text))]),_vm._v(\" \"),(false)?_vm._t(\"default\"):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionButton.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Marco Ambrosini <marcoambrosini@pm.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<docs>\nThis component is made to be used inside of the [Actions](#Actions) component slots.\n\n```vue\n\t<Actions>\n\t\t<ActionButton icon=\"icon-delete\" @click=\"alert('Delete')\">Delete</ActionButton>\n\t\t<ActionButton icon=\"icon-delete\" :close-after-click=\"true\" @click=\"alert('Delete and close menu')\">Delete and close</ActionButton>\n\t\t<ActionButton icon=\"icon-delete\" :disabled=\"true\" @click=\"alert('Disabled')\">Disabled button</ActionButton>\n\t</Actions>\n```\n\nIf you're using a long text you can specify a title\n\n```vue\n\t<Actions>\n\t\t<ActionButton icon=\"icon-add\" @click=\"alert('Add')\">Add new</ActionButton>\n\t\t<ActionButton icon=\"icon-delete\" title=\"Long button\" @click=\"alert('Delete')\">This button is associated with a very long text.\\nAnd with new lines too.</ActionButton>\n\t</Actions>\n```\n\nYou can also use a custom icon, for example from the vue-material-design-icons library:\n\n```vue\n<template>\n\t<Actions>\n\t\t<ActionButton>\n\t\t\t<HandLeft\n\t\t\t\tslot=\"icon\"\n\t\t\t\t:size=\"16\"\n\t\t\t\tdecorative\n\t\t\t\ttitle=\"\" />\n\t\t\tRaise left hand\n\t\t</ActionButton>\n\t\t<ActionButton>\n\t\t\t<HandRight\n\t\t\t\tslot=\"icon\"\n\t\t\t\t:size=\"16\"\n\t\t\t\tdecorative\n\t\t\t\ttitle=\"\" />\n\t\t\tRaise right hand\n\t\t</ActionButton>\n\t</Actions>\n</template>\n<script>\nimport HandLeft from 'vue-material-design-icons/HandLeft'\nimport HandRight from 'vue-material-design-icons/HandRight'\n\nexport default {\n\tcomponents: {\n\t\tHandLeft,\n\t\tHandRight,\n\t},\n}\n</script>\n```\n</docs>\n\n<template>\n\t<li class=\"action\" :class=\"{ 'action--disabled': disabled }\">\n\t\t<button\n\t\t\tclass=\"action-button\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t:class=\"{ focusable: isFocusable }\"\n\t\t\t@click=\"onClick\">\n\t\t\t<span :class=\"[isIconUrl ? 'action-button__icon--url' : icon]\"\n\t\t\t\t:style=\"{ backgroundImage: isIconUrl ? `url(${icon})` : null }\"\n\t\t\t\tclass=\"action-button__icon\">\n\t\t\t\t<!-- @slot Manually provide icon -->\n\t\t\t\t<slot name=\"icon\" />\n\t\t\t</span>\n\n\t\t\t<!-- long text with title -->\n\t\t\t<p v-if=\"title\">\n\t\t\t\t<strong class=\"action-button__title\">\n\t\t\t\t\t{{ title }}\n\t\t\t\t</strong>\n\t\t\t\t<br>\n\t\t\t\t<!-- white space is shown on longtext, so we can't\n\t\t\t\t\tput {{ text }} on a new line for code readability -->\n\t\t\t\t<span class=\"action-button__longtext\" v-text=\"text\" />\n\t\t\t</p>\n\n\t\t\t<!-- long text only -->\n\t\t\t<!-- white space is shown on longtext, so we can't\n\t\t\t\tput {{ text }} on a new line for code readability -->\n\t\t\t<p v-else-if=\"isLongText\"\n\t\t\t\tclass=\"action-button__longtext\"\n\t\t\t\tv-text=\"text\" />\n\n\t\t\t<!-- default text display -->\n\t\t\t<span v-else class=\"action-button__text\">{{ text }}</span>\n\n\t\t\t<!-- fake slot to gather inner text -->\n\t\t\t<slot v-if=\"false\" />\n\t\t</button>\n\t</li>\n</template>\n\n<script>\nimport ActionTextMixin from '../../mixins/actionText'\n\n/**\n * Button component to be used in Actions\n*/\nexport default {\n\tname: 'ActionButton',\n\n\tmixins: [ActionTextMixin],\n\n\tprops: {\n\t\t/**\n\t\t * disabled state of the action button\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * determines if the action is focusable\n\t\t * @returns {boolean} is the action focusable ?\n\t\t */\n\t\tisFocusable() {\n\t\t\treturn !this.disabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../assets/action';\n@include action-active;\n@include action--disabled;\n@include action-item('button');\n</style>\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionButton.vue?vue&type=style&index=0&id=42b28436&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","module.exports = require(\"hammerjs\");","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport ActionButton from './ActionButton'\n\nexport default ActionButton\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../fonts/iconfont-vue-6b494fc.eot\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"../../fonts/iconfont-vue-6b494fc.woff\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"../../fonts/iconfont-vue-6b494fc.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"../../fonts/iconfont-vue-6b494fc.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face{font-family:\\\"iconfont-vue-6b494fc\\\";src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"embedded-opentype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"woff\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format(\\\"truetype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format(\\\"svg\\\")}.icon[data-v-3e0b109b]{font-style:normal;font-weight:400}.icon.arrow-left-double[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.arrow-left[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.arrow-right-double[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.arrow-right[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.breadcrumb[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.checkmark[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.close[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.confirm[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.info[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.menu[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.more[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.pause[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.play[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.triangle-s[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-away[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-dnd[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-invisible[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.icon.user-status-online[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";content:\\\"\\\"}.modal-mask[data-v-3e0b109b]{position:fixed;z-index:9998;top:0;left:0;display:block;width:100%;height:100%;background-color:rgba(0,0,0,0.5)}.modal-mask--dark[data-v-3e0b109b]{background-color:rgba(0,0,0,0.92)}.modal-header[data-v-3e0b109b]{position:absolute;z-index:10001;top:0;right:0;left:0;display:flex !important;align-items:center;justify-content:center;width:100%;height:50px;transition:opacity 250ms, visibility 250ms}.modal-header.invisible[style*='display:none'][data-v-3e0b109b],.modal-header.invisible[style*='display: none'][data-v-3e0b109b]{visibility:hidden}.modal-header .modal-title[data-v-3e0b109b]{overflow-x:hidden;box-sizing:border-box;width:100%;padding:0 132px 0 12px;transition:padding ease 100ms;white-space:nowrap;text-overflow:ellipsis;color:#fff;font-size:14px}@media only screen and (min-width: 512px){.modal-header .modal-title[data-v-3e0b109b]{text-align:center;padding-left:132px}}.modal-header .icons-menu[data-v-3e0b109b]{position:absolute;right:0;display:flex;align-items:center;justify-content:flex-end}.modal-header .icons-menu .icon-close[data-v-3e0b109b]{box-sizing:border-box;margin:3px;padding:10px 11px;color:#fff;background-image:none;font-size:23px}.modal-header .icons-menu .icon-close[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-header .icons-menu .play-pause[data-v-3e0b109b]{position:relative;width:50px;height:50px;margin:0;padding:0;cursor:pointer;color:white;border:none;background-color:transparent;font-size:22px}.modal-header .icons-menu .play-pause:hover .icon-play[data-v-3e0b109b],.modal-header .icons-menu .play-pause:hover .icon-pause[data-v-3e0b109b],.modal-header .icons-menu .play-pause:focus .icon-play[data-v-3e0b109b],.modal-header .icons-menu .play-pause:focus .icon-pause[data-v-3e0b109b]{opacity:1;border-radius:22px;background-color:rgba(127,127,127,0.25)}.modal-header .icons-menu .play-pause .icon-play[data-v-3e0b109b],.modal-header .icons-menu .play-pause .icon-pause[data-v-3e0b109b]{box-sizing:border-box;width:44px;height:44px;margin:3px;opacity:.7;background-image:none;cursor:pointer}.modal-header .icons-menu .play-pause .icon-play[data-v-3e0b109b]{padding:11px 13px}.modal-header .icons-menu .play-pause .icon-play[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-header .icons-menu .play-pause .icon-pause[data-v-3e0b109b]{padding:12px;font-size:19.5px}.modal-header .icons-menu .play-pause .icon-pause[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-header .icons-menu .header-actions[data-v-3e0b109b]{margin:3px;color:white}.modal-header .icons-menu .action-item--single[data-v-3e0b109b]{box-sizing:border-box;width:44px;height:44px;cursor:pointer;background-position:center;background-size:22px}.modal-header .icons-menu[data-v-3e0b109b] .action-item__menutoggle{padding:13px 11px;color:#fff;font-size:22px}.modal-wrapper[data-v-3e0b109b]{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.modal-wrapper .prev[data-v-3e0b109b],.modal-wrapper .next[data-v-3e0b109b]{z-index:10000;display:flex !important;align-items:center;justify-content:center;width:15%;min-width:60px;height:100%;transition:opacity 250ms, visibility 250ms}.modal-wrapper .prev.invisible[style*='display:none'][data-v-3e0b109b],.modal-wrapper .prev.invisible[style*='display: none'][data-v-3e0b109b],.modal-wrapper .next.invisible[style*='display:none'][data-v-3e0b109b],.modal-wrapper .next.invisible[style*='display: none'][data-v-3e0b109b]{visibility:hidden}.modal-wrapper .icon-next[data-v-3e0b109b],.modal-wrapper .icon-previous[data-v-3e0b109b]{box-sizing:border-box;width:44px;height:44px;padding:12px 11px;color:white;border-radius:22px;background-image:none;font-size:24px}.modal-wrapper .icon-previous[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-wrapper .icon-next[data-v-3e0b109b]:before{font-family:\\\"iconfont-vue-6b494fc\\\";font-style:normal;font-weight:400;content:\\\"\\\"}.modal-wrapper .modal-container[data-v-3e0b109b]{display:block;overflow:hidden;padding:0;transition:transform 300ms ease;border-radius:var(--border-radius-large);background-color:var(--color-main-background);box-shadow:0 0 40px rgba(0,0,0,0.2)}.modal-wrapper:not(.modal-wrapper--large):not(.modal-wrapper--full) .modal-container[data-v-3e0b109b]{max-width:900px;max-height:80%}.modal-wrapper--full .modal-container[data-v-3e0b109b]{max-width:100%;max-height:100%;border-radius:0}.modal-wrapper--full .prev[data-v-3e0b109b],.modal-wrapper--full .next[data-v-3e0b109b],.modal-wrapper--spread-navigation .prev[data-v-3e0b109b],.modal-wrapper--spread-navigation .next[data-v-3e0b109b]{position:absolute;width:10%}.modal-wrapper--full .prev[data-v-3e0b109b],.modal-wrapper--spread-navigation .prev[data-v-3e0b109b]{left:0}.modal-wrapper--full .next[data-v-3e0b109b],.modal-wrapper--spread-navigation .next[data-v-3e0b109b]{right:0}.modal-wrapper--large .modal-container[data-v-3e0b109b]{max-width:85%;max-height:90%}.modal-wrapper--large .prev[data-v-3e0b109b],.modal-wrapper--large .next[data-v-3e0b109b]{width:10%;min-width:44px}.fade-enter-active[data-v-3e0b109b],.fade-leave-active[data-v-3e0b109b]{transition:opacity 250ms}.fade-enter[data-v-3e0b109b],.fade-leave-to[data-v-3e0b109b]{opacity:0}.fade-visibility-enter[data-v-3e0b109b],.fade-visibility-leave-to[data-v-3e0b109b]{visibility:hidden;opacity:0}.modal-in-enter-active[data-v-3e0b109b],.modal-in-leave-active[data-v-3e0b109b],.modal-out-enter-active[data-v-3e0b109b],.modal-out-leave-active[data-v-3e0b109b]{transition:opacity 250ms}.modal-in-enter[data-v-3e0b109b],.modal-in-leave-to[data-v-3e0b109b],.modal-out-enter[data-v-3e0b109b],.modal-out-leave-to[data-v-3e0b109b]{opacity:0}.modal-in-enter .modal-container[data-v-3e0b109b],.modal-in-leave-to .modal-container[data-v-3e0b109b]{transform:scale(0.9)}.modal-out-enter .modal-container[data-v-3e0b109b],.modal-out-leave-to .modal-container[data-v-3e0b109b]{transform:scale(1.1)}.modal-mask .play-pause .progress-ring[data-v-3e0b109b]{position:absolute;top:0;left:0;transform:rotate(-90deg)}.modal-mask .play-pause .progress-ring .progress-ring__circle[data-v-3e0b109b]{transition:100ms stroke-dashoffset;transform-origin:50% 50%;animation:progressring-data-v-3e0b109b linear 3s infinite;stroke-linecap:round;stroke-dashoffset:94.24778;stroke-dasharray:94.24778}.modal-mask .play-pause--paused .icon-pause[data-v-3e0b109b]{animation:breath-data-v-3e0b109b 2s cubic-bezier(0.4, 0, 0.2, 1) infinite}.modal-mask .play-pause--paused .progress-ring__circle[data-v-3e0b109b]{animation-play-state:paused !important}@keyframes progressring-data-v-3e0b109b{from{stroke-dashoffset:94.24778}to{stroke-dashoffset:0}}@keyframes breath-data-v-3e0b109b{0%{opacity:1}50%{opacity:0}100%{opacity:1}}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../fonts/scss/iconfont-vue.scss\",\"webpack://./Modal.vue\",\"webpack://./../../assets/variables.scss\"],\"names\":[],\"mappings\":\"AA2FE,WACC,kCAAmC,CACnC,2CAAuC,CACvC,+OAGmD,CAMpD,uBACE,iBAAkB,CAClB,eAAgB,CAFlB,gDAMM,kCAAmC,CACnC,WA5Ge,CAAO,yCA0GL,kCACJ,CAAsB,WA1G3B,CAAA,iDAyGU,kCACL,CAAA,WAzGG,CAAA,0CAwGL,kCACE,CAAA,WAxGJ,CAAA,yCAuGC,kCACG,CAAA,WACN,CAxGC,wCAsGC,kCACI,CAAA,WACb,CAAO,oCAFF,kCACQ,CAAA,WACb,CAAA,sCAFO,kCACM,CAAA,WACb,CAAA,mCAFI,kCACS,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WACb,CAAA,oCAPD,kCAMc,CAAA,WACb,CAAA,mCAPD,kCAMc,CAAA,WAAsB,CACnC,yCAPD,kCAMc,CAAA,WAAA,CAAsB,+CANpC,kCAMc,CAAA,WAAA,CAAA,8CANd,kCAMc,CAAA,WAAA,CAAA,oDANd,kCAMc,CAAA,WAAA,CAAA,iDANd,kCAMc,CAAA,WAAA,CAAA,6BACN,cCgYf,CAAA,YACW,CAAA,KACV,CAAA,MAAO,CAAE,aAET,CAAA,UACA,CAAO,WACP,CAAK,gCAEL,CAAA,mCACA,iCACC,CAAgB,+BAAE,iBAIP,CACZ,aAAU,CAAA,KACV,CAAA,OAAS,CAAA,MACT,CAAG,uBAKH,CAAA,kBACA,CAAA,sBACA,CAAA,UAAe,CAAE,WACjB,CAAK,0CAEO,CAAA,iIAKA,iBAAwB,CACnC,4CAnBF,iBAsBa,CACX,qBACA,CAAA,UAAY,CAAA,sBAEZ,CAAA,6BACY,CAAA,kBACZ,CAAA,sBACA,CAAA,UAAe,CAAA,cACR,CAAA,0CAKgB,4CAnCzB,iBAoCc,CACX,kBACA,CAAA,CAAA,2CAtCH,iBA0CY,CACV,OAAA,CAAQ,YACR,CAAA,kBAEA,CAAA,wBACA,CAAA,uDALD,qBAQE,CAAA,UAAY,CAAA,iBACgC,CAG5C,UAAS,CAAA,qBAET,CAAA,cAAkB,CAAA,8DAPnB,kCD5iBD,CAAA,iBAAsB,CAkFnB,eAAY,CAAA,WACZ,CAAA,uDCkdH,iBAoBC,CAAW,UACA,CAAA,WACV,CAAA,QACA,CAAA,SAjFe,CAkFf,cACA,CAAA,WACQ,CAAA,WACR,CAAK,4BAEL,CAAA,cAAkB,CAAA,kSATR,SAcT,CAAA,kBACW,CACV,uCCtiBW,CAAA,qIDshBd,qBAsBE,CAAA,UAAY,CAAA,WACZ,CAAA,UACA,CAAA,UACA,CAAA,qBAEA,CAAA,cAAkB,CAAA,kEA3BpB,iBA8BC,CAAU,yEA9BA,kCDzjBZ,CAAA,iBAAA,CAAsB,eAkFP,CAAA,WACZ,CAAA,mECseF,YAmCC,CAAA,gBACU,CAAA,0EApCA,kCDzjBZ,CAAA,iBAAA,CAAA,eAkFe,CAAA,WACZ,CAAA,2DCkdH,UA+DC,CAAA,WACC,CAAA,gEAID,qBACC,CAAA,UAAY,CAAA,WACZ,CAAA,cACA,CAAM,0BAEN,CAAA,oBAA2B,CAC3B,oEAGS,iBAAA,CAAA,UACF,CAAE,cAET,CAAK,gCAEI,YACT,CAAA,kBAMO,CAAA,sBAET,CAAA,qBACA,CAAA,UAAY,CAAA,WACZ,CAAA,4EALD,aAAA,CAAc,uBAaZ,CAAA,kBAAS,CAAA,sBAET,CAAA,SAAA,CAAA,cACA,CAAA,WACA,CAAA,0CAEY,CAAA,8RAQD,iBAAQ,CAAA,0FA3BrB,qBAmCE,CAAA,UAAY,CAAA,WACZ,CAAA,iBCzoBe,CAAA,WD2oBN,CAAA,kBACF,CAAA,qBAEP,CAAA,cAAA,CAAgB,sDAGjB,kCDzqBA,CAAA,iBAAA,CAAA,eAkFe,CAAA,WACZ,CAAA,kDC0iBJ,kCD7nBC,CAAA,iBAAA,CAAA,eAkFe,CAAA,WACZ,CAAA,iDC0iBJ,aAoDC,CAAA,eACC,CAAO,SACP,CAAA,+BAEA,CAAA,wCACe,CAAA,6CACG,CAAA,mCACL,CAAC,sGAEM,eAAQ,CAAA,cAC5B,CAAA,uDAEA,cAIA,CAAA,eACC,CAAA,eACA,CAAA,0MAKD,iBAEA,CAAA,SACC,CAAA,qGAHD,MAAA,CAAA,qGAAA,OAAA,CAAA,wDAWC,aAGD,CAAA,cACC,CAAA,0FAFD,SAAA,CAAA,cAOC,CAAA,wEAEA,wBAOF,CAAA,6DACA,SAGD,CAAA,mFAKA,iBAAA,CAAA,SACC,CAAA,kKAOD,wBACC,CAAA,4IAKD,SACA,CAAA,uGAKA,oBAAmB,CAAA,yGAKnB,oBAAoB,CAAA,wDAQR,iBACX,CAAA,KACC,CAAA,MAAA,CAAQ,wBAGR,CAAA,+EACA,kCACa,CAAA,wBACZ,CAAA,yDACW,CAAA,oBAAA,CAAA,0BAGX,CAAA,yBACA,CAAA,6DAGD,yEAEsB,CAAA,wEAEtB,sCACC,CAAA,wCACA,KAAA,0BAOD,CAAA,GAAA,mBAhCS,CAkCV,CAAA,kCACC,GAAoB,SAItB,CAAA,IAAA,SAEE,CAAA,KAAA,SAGA,CAAA\",\"sourcesContent\":[\"$__iconfont__data: map-merge(if(global_variable_exists('__iconfont__data'), $__iconfont__data, ()), (\\n\\t\\\"iconfont-vue-6b494fc\\\": (\\n\\t\\t\\\"arrow-left-double\\\": \\\"\\\\ea01\\\",\\n\\t\\t\\\"arrow-left\\\": \\\"\\\\ea02\\\",\\n\\t\\t\\\"arrow-right-double\\\": \\\"\\\\ea03\\\",\\n\\t\\t\\\"arrow-right\\\": \\\"\\\\ea04\\\",\\n\\t\\t\\\"breadcrumb\\\": \\\"\\\\ea05\\\",\\n\\t\\t\\\"checkmark\\\": \\\"\\\\ea06\\\",\\n\\t\\t\\\"close\\\": \\\"\\\\ea07\\\",\\n\\t\\t\\\"confirm\\\": \\\"\\\\ea08\\\",\\n\\t\\t\\\"info\\\": \\\"\\\\ea09\\\",\\n\\t\\t\\\"menu\\\": \\\"\\\\ea0a\\\",\\n\\t\\t\\\"more\\\": \\\"\\\\ea0b\\\",\\n\\t\\t\\\"pause\\\": \\\"\\\\ea0c\\\",\\n\\t\\t\\\"play\\\": \\\"\\\\ea0d\\\",\\n\\t\\t\\\"triangle-s\\\": \\\"\\\\ea0e\\\",\\n\\t\\t\\\"user-status-away\\\": \\\"\\\\ea0f\\\",\\n\\t\\t\\\"user-status-dnd\\\": \\\"\\\\ea10\\\",\\n\\t\\t\\\"user-status-invisible\\\": \\\"\\\\ea11\\\",\\n\\t\\t\\\"user-status-online\\\": \\\"\\\\ea12\\\"\\n\\t)\\n));\\n\\n\\n$create-font-face: true !default; // should the @font-face tag get created?\\n\\n// should there be a custom class for each icon? will be .filename\\n$create-icon-classes: true !default; \\n\\n// what is the common class name that icons share? in this case icons need to have .icon.filename in their classes\\n// this requires you to have 2 classes on each icon html element, but reduced redeclaration of the font family\\n// for each icon\\n$icon-common-class: 'icon' !default;\\n\\n// if you whish to prefix your filenames, here you can do so.\\n// if this string stays empty, your classes will use the filename, for example\\n// an icon called star.svg will result in a class called .star\\n// if you use the prefix to be 'icon-' it would result in .icon-star\\n$icon-prefix: '' !default; \\n\\n// helper function to get the correct font group\\n@function iconfont-group($group: null) {\\n @if (null == $group) {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n @if (false == map-has-key($__iconfont__data, $group)) {\\n @warn 'Undefined Iconfont Family!';\\n @return ();\\n }\\n @return map-get($__iconfont__data, $group);\\n}\\n\\n// helper function to get the correct icon of a group\\n@function iconfont-item($name) {\\n $slash: str-index($name, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($name, 0, $slash - 1);\\n $name: str-slice($name, $slash + 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n $group: iconfont-group($group);\\n @if (false == map-has-key($group, $name)) {\\n @warn 'Undefined Iconfont Glyph!';\\n @return '';\\n }\\n @return map-get($group, $name);\\n}\\n\\n// complete mixing to include the icon\\n// usage:\\n// .my_icon{ @include iconfont('star') }\\n@mixin iconfont($icon) {\\n $slash: str-index($icon, '/');\\n $group: null;\\n @if ($slash) {\\n $group: str-slice($icon, 0, $slash - 1);\\n } @else {\\n $group: nth(map-keys($__iconfont__data), 1);\\n }\\n &:before {\\n font-family: $group;\\n font-style: normal;\\n font-weight: 400;\\n content: iconfont-item($icon);\\n }\\n}\\n\\n// creates the font face tag if the variable is set to true (default)\\n@if $create-font-face == true {\\n @font-face {\\n font-family: \\\"iconfont-vue-6b494fc\\\";\\n src: url('../iconfont-vue-6b494fc.eot'); /* IE9 Compat Modes */\\n src: url('../iconfont-vue-6b494fc.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\\n url('../iconfont-vue-6b494fc.woff') format('woff'), /* Pretty Modern Browsers */\\n url('../iconfont-vue-6b494fc.ttf') format('truetype'), /* Safari, Android, iOS */\\n url('../iconfont-vue-6b494fc.svg') format('svg'); /* Legacy iOS */\\n }\\n}\\n\\n// creates icon classes for each individual loaded svg (default)\\n@if $create-icon-classes == true {\\n .#{$icon-common-class} {\\n font-style: normal;\\n font-weight: 400;\\n\\n @each $icon, $content in map-get($__iconfont__data, \\\"iconfont-vue-6b494fc\\\") {\\n &.#{$icon-prefix}#{$icon}:before {\\n font-family: \\\"iconfont-vue-6b494fc\\\";\\n content: iconfont-item(\\\"iconfont-vue-6b494fc/#{$icon}\\\");\\n }\\n }\\n }\\n}\\n\",\"$scope_version:\\\"6b494fc\\\"; @import 'variables';\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@import '../../fonts/scss/iconfont-vue';\\n$header-size: 50px;\\n\\n.modal-mask {\\n\\tposition: fixed;\\n\\tz-index: 9998;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\tbackground-color: rgba(0, 0, 0, .5);\\n\\t&--dark {\\n\\t\\tbackground-color: rgba(0, 0, 0, .92);\\n\\t}\\n}\\n\\n.modal-header {\\n\\tposition: absolute;\\n\\tz-index: 10001;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tleft: 0;\\n\\t// prevent vue show to use display:none and reseting\\n\\t// the circle animation loop\\n\\tdisplay: flex !important;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: 100%;\\n\\theight: $header-size;\\n\\ttransition: opacity 250ms,\\n\\t\\tvisibility 250ms;\\n\\n\\t// replace display by visibility\\n\\t&.invisible[style*='display:none'],\\n\\t&.invisible[style*='display: none'] {\\n\\t\\tvisibility: hidden;\\n\\t}\\n\\n\\t.modal-title {\\n\\t\\toverflow-x: hidden;\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: 100%;\\n\\t\\tpadding: 0 #{$clickable-area * 3} 0 12px; // maximum actions is 3\\n\\t\\ttransition: padding ease 100ms;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: #fff;\\n\\t\\tfont-size: $icon-margin;\\n\\t}\\n\\n\\t// On wider screens the title can be centered\\n\\t@media only screen and (min-width: $breakpoint-mobile/2) {\\n\\t\\t.modal-title {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tpadding-left: #{$clickable-area * 3}; // maximum actions is 3\\n\\t\\t}\\n\\t}\\n\\n\\t.icons-menu {\\n\\t\\tposition: absolute;\\n\\t\\tright: 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: flex-end;\\n\\n\\t\\t.icon-close {\\n\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\tmargin: ($header-size - $clickable-area) / 2;\\n\\t\\t\\t// not using $icon-margin since we have a custom font size\\n\\t\\t\\t// and alignement seems odd\\n\\t\\t\\tpadding: 10px 11px;\\n\\t\\t\\tcolor: #fff;\\n\\t\\t\\tbackground-image: none;\\n\\t\\t\\tfont-size: 23px;\\n\\n\\t\\t\\t@include iconfont('close');\\n\\t\\t}\\n\\n\\t\\t.play-pause {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\twidth: $header-size;\\n\\t\\t\\theight: $header-size;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tcolor: white;\\n\\t\\t\\tborder: none;\\n\\t\\t\\tbackground-color: transparent;\\n\\t\\t\\tfont-size: 22px;\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\t.icon-play,\\n\\t\\t\\t\\t.icon-pause {\\n\\t\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\t\\tborder-radius: $clickable-area / 2;\\n\\t\\t\\t\\t\\tbackground-color: $icon-focus-bg;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t.icon-play,\\n\\t\\t\\t.icon-pause {\\n\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\t\\theight: $clickable-area;\\n\\t\\t\\t\\tmargin: ($header-size - $clickable-area) / 2;\\n\\t\\t\\t\\topacity: .7;\\n\\t\\t\\t\\tbackground-image: none;\\n\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t}\\n\\t\\t\\t.icon-play {\\n\\t\\t\\t\\t// better visual\\n\\t\\t\\t\\tpadding: 11px 13px;\\n\\t\\t\\t\\t@include iconfont('play');\\n\\t\\t\\t}\\n\\t\\t\\t.icon-pause {\\n\\t\\t\\t\\tpadding: 12px;\\n\\t\\t\\t\\t// ! align with circle\\n\\t\\t\\t\\tfont-size: 19.5px;\\n\\t\\t\\t\\t@include iconfont('pause');\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.header-actions {\\n\\t\\t\\tmargin: ($header-size - $clickable-area) / 2;\\n\\t\\t\\tcolor: white;\\n\\t\\t}\\n\\n\\t\\t.action-item--single {\\n\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\twidth: $clickable-area;\\n\\t\\t\\theight: $clickable-area;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-size: 22px;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .action-item__menutoggle {\\n\\t\\t\\tpadding: 13px 11px;\\n\\t\\t\\t// force white instead of default main text\\n\\t\\t\\tcolor: #fff;\\n\\t\\t\\t// 22px is a somehow better looking for the icon-more icon\\n\\t\\t\\tfont-size: 22px;\\n\\t\\t}\\n\\n\\t}\\n}\\n\\n.modal-wrapper {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\n\\t/* Navigation buttons */\\n\\t.prev,\\n\\t.next {\\n\\t\\tz-index: 10000;\\n\\t\\t// ignore display: none\\n\\t\\tdisplay: flex !important;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 15%;\\n\\t\\tmin-width: 60px;\\n\\t\\theight: 100%;\\n\\t\\ttransition: opacity 250ms,\\n\\t\\t\\tvisibility 250ms;\\n\\n\\t\\t// we want to keep the elements on page\\n\\t\\t// even if hidden to avoid having a unbalanced\\n\\t\\t// centered content\\n\\t\\t// replace display by visibility\\n\\t\\t&.invisible[style*='display:none'],\\n\\t\\t&.invisible[style*='display: none'] {\\n\\t\\t\\tvisibility: hidden;\\n\\t\\t}\\n\\t}\\n\\n\\t// buttons/icons\\n\\t.icon-next,\\n\\t.icon-previous {\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: $clickable-area;\\n\\t\\theight: $clickable-area;\\n\\t\\tpadding: 12px 11px;\\n\\t\\tcolor: white;\\n\\t\\tborder-radius: $clickable-area / 2;\\n\\t\\tbackground-image: none;\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\t.icon-previous {\\n\\t\\t@include iconfont('arrow-left');\\n\\t}\\n\\t.icon-next {\\n\\t\\t@include iconfont('arrow-right');\\n\\t}\\n\\n\\t/* Content */\\n\\t.modal-container {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\tpadding: 0;\\n\\t\\ttransition: transform 300ms ease;\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tbox-shadow: 0 0 40px rgba(0, 0, 0, .2);\\n\\t}\\n\\t&:not(&--large):not(&--full) .modal-container {\\n\\t\\tmax-width: 900px;\\n\\t\\tmax-height: 80%;\\n\\t}\\n\\n\\t// Sizing\\n\\t&--full {\\n\\t\\t.modal-container {\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\tmax-height: 100%;\\n\\t\\t\\tborder-radius: 0;\\n\\t\\t}\\n\\t}\\n\\t&--full,\\n\\t&--spread-navigation {\\n\\t\\t.prev,\\n\\t\\t.next {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\twidth: 10%;\\n\\t\\t}\\n\\t\\t.prev {\\n\\t\\t\\tleft: 0;\\n\\t\\t}\\n\\t\\t.next {\\n\\t\\t\\tright: 0;\\n\\t\\t}\\n\\t}\\n\\t&--large {\\n\\t\\t.modal-container {\\n\\t\\t\\tmax-width: 85%;\\n\\t\\t\\tmax-height: 90%;\\n\\t\\t}\\n\\t\\t.prev,\\n\\t\\t.next {\\n\\t\\t\\twidth: 10%;\\n\\t\\t\\tmin-width: $clickable-area;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* TRANSITIONS */\\n.fade-enter-active,\\n.fade-leave-active {\\n\\ttransition: opacity 250ms;\\n}\\n\\n.fade-enter,\\n.fade-leave-to {\\n\\topacity: 0;\\n}\\n\\n.fade-visibility-enter,\\n.fade-visibility-leave-to {\\n\\tvisibility: hidden;\\n\\topacity: 0;\\n}\\n\\n.modal-in-enter-active,\\n.modal-in-leave-active,\\n.modal-out-enter-active,\\n.modal-out-leave-active {\\n\\ttransition: opacity 250ms;\\n}\\n\\n.modal-in-enter,\\n.modal-in-leave-to,\\n.modal-out-enter,\\n.modal-out-leave-to {\\n\\topacity: 0;\\n}\\n\\n.modal-in-enter .modal-container,\\n.modal-in-leave-to .modal-container {\\n\\ttransform: scale(.9);\\n}\\n\\n.modal-out-enter .modal-container,\\n.modal-out-leave-to .modal-container {\\n\\ttransform: scale(1.1);\\n}\\n\\n// animated circle\\n$radius: 15;\\n$pi: 3.14159265358979;\\n\\n.modal-mask .play-pause {\\n\\t.progress-ring {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\ttransform: rotate(-90deg);\\n\\t\\t.progress-ring__circle {\\n\\t\\t\\ttransition: 100ms stroke-dashoffset;\\n\\t\\t\\ttransform-origin: 50% 50%; // axis compensation\\n\\t\\t\\tanimation: progressring linear 3s infinite;\\n\\n\\t\\t\\tstroke-linecap: round;\\n\\t\\t\\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\\n\\t\\t\\tstroke-dasharray: $radius * 2 * $pi; // radius * 2 * PI\\n\\t\\t}\\n\\t}\\n\\t&--paused {\\n\\t\\t.icon-pause {\\n\\t\\t\\tanimation: breath 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\\n\\t\\t}\\n\\t\\t.progress-ring__circle {\\n\\t\\t\\tanimation-play-state: paused !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n// keyframes get scoped too and break the animation name, we need them unscoped\\n@keyframes progressring {\\n\\tfrom {\\n\\t\\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\\n\\t}\\n\\tto {\\n\\t\\tstroke-dashoffset: 0;\\n\\t}\\n}\\n\\n@keyframes breath {\\n\\t0% {\\n\\t\\topacity: 1;\\n\\t}\\n\\t50% {\\n\\t\\topacity: 0;\\n\\t}\\n\\t100% {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n\",\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n// https://uxplanet.org/7-rules-for-mobile-ui-button-design-e9cf2ea54556\\n// recommended is 48px\\n// 44px is what we choose and have very good visual-to-usability ratio\\n$clickable-area: 44px;\\n\\n// background icon size\\n// also used for the scss icon font\\n$icon-size: 16px;\\n\\n// icon padding for a $clickable-area width and a $icon-size icon\\n// ( 44px - 16px ) / 2\\n$icon-margin: ($clickable-area - $icon-size) / 2;\\n\\n// transparency background for icons\\n$icon-focus-bg: rgba(127, 127, 127, .25);\\n\\n// popovermenu arrow width from the triangle center\\n$arrow-width: 9px;\\n\\n// opacities\\n$opacity_disabled: .5;\\n$opacity_normal: .7;\\n$opacity_full: 1;\\n\\n// menu round background hover feedback\\n// good looking on dark AND white bg\\n$action-background-hover: rgba(127, 127, 127, .25);\\n\\n// various structure data used in the \\n// `AppNavigation` component\\n$header-height: 50px;\\n$navigation-width: 300px;\\n\\n// mobile breakpoint\\n$breakpoint-mobile: 1024px;\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default function timer(callback, delay) {\n\tlet id\n\tlet started\n\tlet remaining = delay\n\tlet running\n\n\tthis.start = function() {\n\t\trunning = true\n\t\tstarted = new Date()\n\t\tid = setTimeout(callback, remaining)\n\t}\n\n\tthis.pause = function() {\n\t\trunning = false\n\t\tclearTimeout(id)\n\t\tremaining -= new Date() - started\n\t}\n\n\tthis.clear = function() {\n\t\trunning = false\n\t\tclearTimeout(id)\n\t\tremaining = 0\n\t}\n\n\tthis.getTimeLeft = function() {\n\t\tif (running) {\n\t\t\tthis.pause()\n\t\t\tthis.start()\n\t\t}\n\n\t\treturn remaining\n\t}\n\n\tthis.getStateRunning = function() {\n\t\treturn running\n\t}\n\n\tthis.start()\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<docs>\n\n```vue\n<template>\n\t<div>\n\t\t<button @click=\"showModal\">Show Modal</button>\n\t\t<modal v-if=\"modal\" @close=\"closeModal\">\n\t\t\t<div class=\"modal__content\">Hello world</div>\n\t\t</modal>\n\t</div>\n</template>\n<style scoped>\n\t.modal__content {\n\t\twidth: 50vw;\n\t\ttext-align: center;\n\t\tmargin: 10vw 0;\n\t}\n</style>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmodal: false\n\t\t}\n\t},\n\tmethods: {\n\t\tshowModal() {\n\t\t\tthis.modal = true\n\t\t},\n\t\tcloseModal() {\n\t\t\tthis.modal = false\n\t\t}\n\t}\n}\n</script>\n```\n\n</docs>\n<template>\n\t<transition name=\"fade\">\n\t\t<div ref=\"mask\"\n\t\t\tclass=\"modal-mask\"\n\t\t\t:class=\"{ 'modal-mask--dark': dark }\"\n\t\t\t@click=\"handleMouseMove\"\n\t\t\t@mousemove=\"handleMouseMove\"\n\t\t\t@touchmove=\"handleMouseMove\">\n\t\t\t<!-- Header -->\n\t\t\t<transition name=\"fade-visibility\">\n\t\t\t\t<div v-show=\"!clearView\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\tinvisible: clearView\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"modal-header\">\n\t\t\t\t\t<div v-if=\"title.trim() !== ''\" class=\"modal-title\">\n\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"icons-menu\">\n\t\t\t\t\t\t<!-- Play-pause toggle -->\n\t\t\t\t\t\t<button v-if=\"hasNext && enableSlideshow\"\n\t\t\t\t\t\t\tv-tooltip.auto=\"playPauseTitle\"\n\t\t\t\t\t\t\t:class=\"{ 'play-pause--paused': slideshowPaused }\"\n\t\t\t\t\t\t\tclass=\"play-pause\"\n\t\t\t\t\t\t\t@click=\"togglePlayPause\">\n\t\t\t\t\t\t\t<!-- Progress circle, css animated -->\n\t\t\t\t\t\t\t<div :class=\"[playing ? 'icon-pause' : 'icon-play']\">\n\t\t\t\t\t\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t\t\t\t\t\t{{ playPauseTitle }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Progress circle, css animated -->\n\t\t\t\t\t\t\t<svg v-if=\"playing\"\n\t\t\t\t\t\t\t\tclass=\"progress-ring\"\n\t\t\t\t\t\t\t\theight=\"50\"\n\t\t\t\t\t\t\t\twidth=\"50\">\n\t\t\t\t\t\t\t\t<circle class=\"progress-ring__circle\"\n\t\t\t\t\t\t\t\t\tstroke=\"white\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\t\t\tr=\"15\"\n\t\t\t\t\t\t\t\t\tcx=\"25\"\n\t\t\t\t\t\t\t\t\tcy=\"25\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<!-- Actions menu -->\n\t\t\t\t\t\t<Actions class=\"header-actions\">\n\t\t\t\t\t\t\t<!-- @slot List of actions to show -->\n\t\t\t\t\t\t\t<slot name=\"actions\" />\n\t\t\t\t\t\t</Actions>\n\n\t\t\t\t\t\t<!-- Close modal -->\n\t\t\t\t\t\t<Actions v-if=\"canClose\" class=\"header-close\">\n\t\t\t\t\t\t\t<ActionButton icon=\"icon-close\" @click=\"close\">\n\t\t\t\t\t\t\t\t{{ t('Close') }}\n\t\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t</Actions>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</transition>\n\n\t\t\t<!-- Content wrapper -->\n\t\t\t<transition :name=\"modalTransitionName\">\n\t\t\t\t<div\n\t\t\t\t\tv-show=\"showModal\"\n\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t`modal-wrapper--${size}`,\n\t\t\t\t\t\tspreadNavigation ? 'modal-wrapper--spread-navigation' : ''\n\t\t\t\t\t]\"\n\t\t\t\t\tclass=\"modal-wrapper\"\n\t\t\t\t\t@mousedown.self=\"close\">\n\t\t\t\t\t<!-- Navigation button -->\n\t\t\t\t\t<transition name=\"fade-visibility\">\n\t\t\t\t\t\t<a v-show=\"hasPrevious && !clearView\"\n\t\t\t\t\t\t\tclass=\"prev\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\tinvisible: clearView || !hasPrevious\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@click=\"previous\">\n\t\t\t\t\t\t\t<div class=\"icon icon-previous\">\n\t\t\t\t\t\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t\t\t\t\t\t{{ t('Previous') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</transition>\n\n\t\t\t\t\t<!-- Content -->\n\t\t\t\t\t<div class=\"modal-container\">\n\t\t\t\t\t\t<!-- @slot Modal content to render -->\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Navigation button -->\n\t\t\t\t\t<transition name=\"fade-visibility\">\n\t\t\t\t\t\t<a v-show=\"hasNext && !clearView\"\n\t\t\t\t\t\t\tclass=\"next\"\n\t\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t\tinvisible: clearView || !hasNext\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t@click=\"next\">\n\t\t\t\t\t\t\t<div class=\"icon icon-next\">\n\t\t\t\t\t\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t\t\t\t\t\t{{ t('Next') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t</transition>\n</template>\n\n<script>\nimport Hammer from 'hammerjs'\nimport Actions from '../Actions'\nimport ActionButton from '../ActionButton'\nimport l10n from '../../mixins/l10n'\nimport { t } from '../../l10n'\nimport Tooltip from '../../directives/Tooltip'\nimport Timer from '../../utils/Timer'\n\nexport default {\n\tname: 'Modal',\n\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t},\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tmixins: [l10n],\n\n\tprops: {\n\t\t/**\n\t\t * Title to be shown with the modal\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Declare if a previous slide is available\n\t\t */\n\t\thasPrevious: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declare if a next slide is available\n\t\t */\n\t\thasNext: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declare if hiding the modal should be animated\n\t\t */\n\t\toutTransition: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declare if the slideshow functionality should be enabled\n\t\t */\n\t\tenableSlideshow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tclearViewDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 5000,\n\t\t},\n\t\t/**\n\t\t * Declare the slide interval\n\t\t */\n\t\tslideshowDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 3000,\n\t\t},\n\t\t/**\n\t\t * Allow to pause an ongoing slideshow\n\t\t */\n\t\tslideshowPaused: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Enable swipe between slides\n\t\t */\n\t\tenableSwipe: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tspreadNavigation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'normal',\n\t\t\tvalidator: size => {\n\t\t\t\treturn ['normal', 'large', 'full'].indexOf(size) !== -1\n\t\t\t},\n\t\t},\n\t\t/**\n\t\t * Declare if the modal can be closed\n\t\t */\n\t\tcanClose: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/** Makes the modal backdrop black if true */\n\t\tdark: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Selector for the modal container\n\t\t */\n\t\tcontainer: {\n\t\t\ttype: String,\n\t\t\tdefault: 'body',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tmc: null,\n\t\t\tshowModal: false,\n\t\t\tclearView: false,\n\t\t\tclearViewTimeout: null,\n\t\t\tplaying: false,\n\t\t\tslideshowTimeout: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tmodalTransitionName() {\n\t\t\treturn `modal-${this.outTransition ? 'out' : 'in'}`\n\t\t},\n\t\tplayPauseTitle() {\n\t\t\treturn this.playing ? t('Pause slideshow') : t('Start slideshow')\n\t\t},\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * Handle play/pause of an ongoing slideshow\n\t\t * @param {boolean} paused is the player paused\n\t\t */\n\t\tslideshowPaused(paused) {\n\t\t\tif (this.slideshowTimeout) {\n\t\t\t\tif (paused) {\n\t\t\t\t\tthis.slideshowTimeout.pause()\n\t\t\t\t} else {\n\t\t\t\t\tthis.slideshowTimeout.start()\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\twindow.addEventListener('keydown', this.handleKeydown)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('keydown', this.handleKeydown)\n\t\tthis.mc.off('swipeleft swiperight')\n\t\tthis.mc.destroy()\n\t},\n\tmounted() {\n\t\tthis.showModal = true\n\n\t\t// init clear view\n\t\tthis.handleMouseMove()\n\n\t\tthis.mc = new Hammer(this.$refs.mask)\n\t\tthis.mc.on('swipeleft swiperight', e => {\n\t\t\tthis.handleSwipe(e)\n\t\t})\n\n\t\tif (this.container === 'body') {\n\t\t\t// force mount the component to body\n\t\t\tdocument.body.insertBefore(this.$el, document.body.lastChild)\n\t\t} else {\n\t\t\tconst container = document.querySelector(this.container)\n\t\t\tcontainer.appendChild(this.$el)\n\t\t}\n\n\t},\n\tdestroyed() {\n\t\tthis.$el.remove()\n\t},\n\n\tmethods: {\n\t\t// Events emitters\n\t\tprevious(data) {\n\t\t\t// do not send the event if nothing is available\n\t\t\tif (this.hasPrevious) {\n\t\t\t\t// if data is set, then it's a user mouse event\n\t\t\t\t// and not the slideshow handler, therefore\n\t\t\t\t// we reset the timer\n\t\t\t\tif (data) {\n\t\t\t\t\tthis.resetSlideshow()\n\t\t\t\t}\n\t\t\t\tthis.$emit('previous', data)\n\t\t\t}\n\t\t},\n\t\tnext(data) {\n\t\t\t// do not send the event if nothing is available\n\t\t\tif (this.hasNext) {\n\t\t\t\t// if data is set, then it's a mouse event\n\t\t\t\t// and not the slideshow handler, therefore\n\t\t\t\t// we reset the timer\n\t\t\t\tif (data) {\n\t\t\t\t\tthis.resetSlideshow()\n\t\t\t\t}\n\t\t\t\tthis.$emit('next', data)\n\t\t\t}\n\t\t},\n\t\tclose(data) {\n\t\t\t// do not fire event if forbidden\n\t\t\tif (this.canClose) {\n\t\t\t\tthis.showModal = false\n\n\t\t\t\t// delay closing for animation\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t/**\n\t\t\t\t\t * Emitted when the closing animation is finished\n\t\t\t\t\t */\n\t\t\t\t\tthis.$emit('close', data)\n\t\t\t\t}, 300)\n\t\t\t}\n\t\t},\n\n\t\t// Key Handlers\n\t\thandleKeydown(e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\tcase 37: // left arrow\n\t\t\t\tthis.previous(e)\n\t\t\t\tbreak\n\t\t\tcase 13: // enter key\n\t\t\tcase 39: // rigth arrow\n\t\t\t\tthis.next(e)\n\t\t\t\tbreak\n\t\t\tcase 27: // escape key\n\t\t\t\tthis.close(e)\n\t\t\t\tbreak\n\t\t\t}\n\t\t},\n\t\thandleSwipe(e) {\n\t\t\tif (this.enableSwipe) {\n\t\t\t\tif (e.type === 'swipeleft') {\n\t\t\t\t\t// swiping to left to go to the next item\n\t\t\t\t\tthis.next(e)\n\t\t\t\t} else if (e.type === 'swiperight') {\n\t\t\t\t\t// swiping to right to go back to the previous item\n\t\t\t\t\tthis.previous(e)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thandleMouseMove() {\n\t\t\tif (this.clearViewDelay > 0) {\n\t\t\t\tthis.clearView = false\n\t\t\t\tclearTimeout(this.clearViewTimeout)\n\t\t\t\tthis.clearViewTimeout = setTimeout(() => {\n\t\t\t\t\tthis.clearView = true\n\t\t\t\t}, this.clearViewDelay)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Toggle the slideshow state\n\t\t */\n\t\ttogglePlayPause() {\n\t\t\tthis.playing = !this.playing\n\t\t\tif (this.playing) {\n\t\t\t\tthis.handleSlideshow()\n\t\t\t} else {\n\t\t\t\tthis.clearSlideshowTimeout()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the slideshow timer and keep going if it was on\n\t\t */\n\t\tresetSlideshow() {\n\t\t\tthis.playing = !this.playing\n\t\t\tthis.clearSlideshowTimeout()\n\t\t\tthis.$nextTick(function() {\n\t\t\t\tthis.togglePlayPause()\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handle the slideshow timer and next event\n\t\t */\n\t\thandleSlideshow() {\n\t\t\tthis.playing = true\n\t\t\tif (this.hasNext) {\n\t\t\t\tthis.slideshowTimeout = new Timer(() => {\n\t\t\t\t\tthis.next()\n\t\t\t\t\tthis.handleSlideshow()\n\t\t\t\t}, this.slideshowDelay)\n\t\t\t} else {\n\t\t\t\tthis.playing = false\n\t\t\t\tthis.clearSlideshowTimeout()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Clear slideshowTimeout if ongoing\n\t\t */\n\t\tclearSlideshowTimeout() {\n\t\t\tif (this.slideshowTimeout) {\n\t\t\t\tthis.slideshowTimeout.clear()\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../fonts/scss/iconfont-vue';\n$header-size: 50px;\n\n.modal-mask {\n\tposition: fixed;\n\tz-index: 9998;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(0, 0, 0, .5);\n\t&--dark {\n\t\tbackground-color: rgba(0, 0, 0, .92);\n\t}\n}\n\n.modal-header {\n\tposition: absolute;\n\tz-index: 10001;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n\t// prevent vue show to use display:none and reseting\n\t// the circle animation loop\n\tdisplay: flex !important;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 100%;\n\theight: $header-size;\n\ttransition: opacity 250ms,\n\t\tvisibility 250ms;\n\n\t// replace display by visibility\n\t&.invisible[style*='display:none'],\n\t&.invisible[style*='display: none'] {\n\t\tvisibility: hidden;\n\t}\n\n\t.modal-title {\n\t\toverflow-x: hidden;\n\t\tbox-sizing: border-box;\n\t\twidth: 100%;\n\t\tpadding: 0 #{$clickable-area * 3} 0 12px; // maximum actions is 3\n\t\ttransition: padding ease 100ms;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: #fff;\n\t\tfont-size: $icon-margin;\n\t}\n\n\t// On wider screens the title can be centered\n\t@media only screen and (min-width: $breakpoint-mobile/2) {\n\t\t.modal-title {\n\t\t\ttext-align: center;\n\t\t\tpadding-left: #{$clickable-area * 3}; // maximum actions is 3\n\t\t}\n\t}\n\n\t.icons-menu {\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\n\t\t.icon-close {\n\t\t\tbox-sizing: border-box;\n\t\t\tmargin: ($header-size - $clickable-area) / 2;\n\t\t\t// not using $icon-margin since we have a custom font size\n\t\t\t// and alignement seems odd\n\t\t\tpadding: 10px 11px;\n\t\t\tcolor: #fff;\n\t\t\tbackground-image: none;\n\t\t\tfont-size: 23px;\n\n\t\t\t@include iconfont('close');\n\t\t}\n\n\t\t.play-pause {\n\t\t\tposition: relative;\n\t\t\twidth: $header-size;\n\t\t\theight: $header-size;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tcursor: pointer;\n\t\t\tcolor: white;\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t\tfont-size: 22px;\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\t.icon-play,\n\t\t\t\t.icon-pause {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tborder-radius: $clickable-area / 2;\n\t\t\t\t\tbackground-color: $icon-focus-bg;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.icon-play,\n\t\t\t.icon-pause {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\twidth: $clickable-area;\n\t\t\t\theight: $clickable-area;\n\t\t\t\tmargin: ($header-size - $clickable-area) / 2;\n\t\t\t\topacity: .7;\n\t\t\t\tbackground-image: none;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t\t.icon-play {\n\t\t\t\t// better visual\n\t\t\t\tpadding: 11px 13px;\n\t\t\t\t@include iconfont('play');\n\t\t\t}\n\t\t\t.icon-pause {\n\t\t\t\tpadding: 12px;\n\t\t\t\t// ! align with circle\n\t\t\t\tfont-size: 19.5px;\n\t\t\t\t@include iconfont('pause');\n\t\t\t}\n\t\t}\n\n\t\t.header-actions {\n\t\t\tmargin: ($header-size - $clickable-area) / 2;\n\t\t\tcolor: white;\n\t\t}\n\n\t\t.action-item--single {\n\t\t\tbox-sizing: border-box;\n\t\t\twidth: $clickable-area;\n\t\t\theight: $clickable-area;\n\t\t\tcursor: pointer;\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: 22px;\n\t\t}\n\n\t\t&::v-deep .action-item__menutoggle {\n\t\t\tpadding: 13px 11px;\n\t\t\t// force white instead of default main text\n\t\t\tcolor: #fff;\n\t\t\t// 22px is a somehow better looking for the icon-more icon\n\t\t\tfont-size: 22px;\n\t\t}\n\n\t}\n}\n\n.modal-wrapper {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\theight: 100%;\n\n\t/* Navigation buttons */\n\t.prev,\n\t.next {\n\t\tz-index: 10000;\n\t\t// ignore display: none\n\t\tdisplay: flex !important;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 15%;\n\t\tmin-width: 60px;\n\t\theight: 100%;\n\t\ttransition: opacity 250ms,\n\t\t\tvisibility 250ms;\n\n\t\t// we want to keep the elements on page\n\t\t// even if hidden to avoid having a unbalanced\n\t\t// centered content\n\t\t// replace display by visibility\n\t\t&.invisible[style*='display:none'],\n\t\t&.invisible[style*='display: none'] {\n\t\t\tvisibility: hidden;\n\t\t}\n\t}\n\n\t// buttons/icons\n\t.icon-next,\n\t.icon-previous {\n\t\tbox-sizing: border-box;\n\t\twidth: $clickable-area;\n\t\theight: $clickable-area;\n\t\tpadding: 12px 11px;\n\t\tcolor: white;\n\t\tborder-radius: $clickable-area / 2;\n\t\tbackground-image: none;\n\t\tfont-size: 24px;\n\t}\n\t.icon-previous {\n\t\t@include iconfont('arrow-left');\n\t}\n\t.icon-next {\n\t\t@include iconfont('arrow-right');\n\t}\n\n\t/* Content */\n\t.modal-container {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\tpadding: 0;\n\t\ttransition: transform 300ms ease;\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\t\tbox-shadow: 0 0 40px rgba(0, 0, 0, .2);\n\t}\n\t&:not(&--large):not(&--full) .modal-container {\n\t\tmax-width: 900px;\n\t\tmax-height: 80%;\n\t}\n\n\t// Sizing\n\t&--full {\n\t\t.modal-container {\n\t\t\tmax-width: 100%;\n\t\t\tmax-height: 100%;\n\t\t\tborder-radius: 0;\n\t\t}\n\t}\n\t&--full,\n\t&--spread-navigation {\n\t\t.prev,\n\t\t.next {\n\t\t\tposition: absolute;\n\t\t\twidth: 10%;\n\t\t}\n\t\t.prev {\n\t\t\tleft: 0;\n\t\t}\n\t\t.next {\n\t\t\tright: 0;\n\t\t}\n\t}\n\t&--large {\n\t\t.modal-container {\n\t\t\tmax-width: 85%;\n\t\t\tmax-height: 90%;\n\t\t}\n\t\t.prev,\n\t\t.next {\n\t\t\twidth: 10%;\n\t\t\tmin-width: $clickable-area;\n\t\t}\n\t}\n}\n\n/* TRANSITIONS */\n.fade-enter-active,\n.fade-leave-active {\n\ttransition: opacity 250ms;\n}\n\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.fade-visibility-enter,\n.fade-visibility-leave-to {\n\tvisibility: hidden;\n\topacity: 0;\n}\n\n.modal-in-enter-active,\n.modal-in-leave-active,\n.modal-out-enter-active,\n.modal-out-leave-active {\n\ttransition: opacity 250ms;\n}\n\n.modal-in-enter,\n.modal-in-leave-to,\n.modal-out-enter,\n.modal-out-leave-to {\n\topacity: 0;\n}\n\n.modal-in-enter .modal-container,\n.modal-in-leave-to .modal-container {\n\ttransform: scale(.9);\n}\n\n.modal-out-enter .modal-container,\n.modal-out-leave-to .modal-container {\n\ttransform: scale(1.1);\n}\n\n// animated circle\n$radius: 15;\n$pi: 3.14159265358979;\n\n.modal-mask .play-pause {\n\t.progress-ring {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\ttransform: rotate(-90deg);\n\t\t.progress-ring__circle {\n\t\t\ttransition: 100ms stroke-dashoffset;\n\t\t\ttransform-origin: 50% 50%; // axis compensation\n\t\t\tanimation: progressring linear 3s infinite;\n\n\t\t\tstroke-linecap: round;\n\t\t\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\n\t\t\tstroke-dasharray: $radius * 2 * $pi; // radius * 2 * PI\n\t\t}\n\t}\n\t&--paused {\n\t\t.icon-pause {\n\t\t\tanimation: breath 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\n\t\t}\n\t\t.progress-ring__circle {\n\t\t\tanimation-play-state: paused !important;\n\t\t}\n\t}\n}\n\n// keyframes get scoped too and break the animation name, we need them unscoped\n@keyframes progressring {\n\tfrom {\n\t\tstroke-dashoffset: $radius * 2 * $pi; // radius * 2 * PI\n\t}\n\tto {\n\t\tstroke-dashoffset: 0;\n\t}\n}\n\n@keyframes breath {\n\t0% {\n\t\topacity: 1;\n\t}\n\t50% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/resolve-url-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&id=3e0b109b&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{ref:\"mask\",staticClass:\"modal-mask\",class:{ 'modal-mask--dark': _vm.dark },on:{\"click\":_vm.handleMouseMove,\"mousemove\":_vm.handleMouseMove,\"touchmove\":_vm.handleMouseMove}},[_c('transition',{attrs:{\"name\":\"fade-visibility\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.clearView),expression:\"!clearView\"}],staticClass:\"modal-header\",class:{\n\t\t\t\t\tinvisible: _vm.clearView\n\t\t\t\t}},[(_vm.title.trim() !== '')?_c('div',{staticClass:\"modal-title\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"icons-menu\"},[(_vm.hasNext && _vm.enableSlideshow)?_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.playPauseTitle),expression:\"playPauseTitle\",modifiers:{\"auto\":true}}],staticClass:\"play-pause\",class:{ 'play-pause--paused': _vm.slideshowPaused },on:{\"click\":_vm.togglePlayPause}},[_c('div',{class:[_vm.playing ? 'icon-pause' : 'icon-play']},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.playPauseTitle)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])]),_vm._v(\" \"),(_vm.playing)?_c('svg',{staticClass:\"progress-ring\",attrs:{\"height\":\"50\",\"width\":\"50\"}},[_c('circle',{staticClass:\"progress-ring__circle\",attrs:{\"stroke\":\"white\",\"stroke-width\":\"2\",\"fill\":\"transparent\",\"r\":\"15\",\"cx\":\"25\",\"cy\":\"25\"}})]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('Actions',{staticClass:\"header-actions\"},[_vm._t(\"actions\")],2),_vm._v(\" \"),(_vm.canClose)?_c('Actions',{staticClass:\"header-close\"},[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('Close'))+\"\\n\\t\\t\\t\\t\\t\\t\")])],1):_vm._e()],1)])]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":_vm.modalTransitionName}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showModal),expression:\"showModal\"}],staticClass:\"modal-wrapper\",class:[\n\t\t\t\t\t(\"modal-wrapper--\" + _vm.size),\n\t\t\t\t\t_vm.spreadNavigation ? 'modal-wrapper--spread-navigation' : ''\n\t\t\t\t],on:{\"mousedown\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.close($event)}}},[_c('transition',{attrs:{\"name\":\"fade-visibility\"}},[_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasPrevious && !_vm.clearView),expression:\"hasPrevious && !clearView\"}],staticClass:\"prev\",class:{\n\t\t\t\t\t\t\tinvisible: _vm.clearView || !_vm.hasPrevious\n\t\t\t\t\t\t},on:{\"click\":_vm.previous}},[_c('div',{staticClass:\"icon icon-previous\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('Previous'))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])])])]),_vm._v(\" \"),_c('div',{staticClass:\"modal-container\"},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade-visibility\"}},[_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasNext && !_vm.clearView),expression:\"hasNext && !clearView\"}],staticClass:\"next\",class:{\n\t\t\t\t\t\t\tinvisible: _vm.clearView || !_vm.hasNext\n\t\t\t\t\t\t},on:{\"click\":_vm.next}},[_c('div',{staticClass:\"icon icon-next\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('Next'))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])])])])],1)])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport ScopeComponent from '../../utils/ScopeComponent'\nimport Modal from './Modal'\n\nScopeComponent(Modal)\n\nexport default Modal\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n"],"sourceRoot":""} \ No newline at end of file